自定义广告网络接入
自定义广告网络接入
开发者可以使用Mobit管理平台添加其他广告网络配置,新增广告代码位,在瀑布流中进行广告加载。
开发者需要在代码中通过继承特定类和实现特定接口来完成接入。开发者需要将自定义类的全路径传入Mobit管理平台中,Mobit SDK将获取自定义类的类名,通过反射方式以类名构建实例,调用方法等,因此开发者自定义的类不能被混淆。
Mobit SDK会在初始化时,调用自定义广告网络的初始化。在Mobit SDK广告请求时,按策略加载自定义广告网络代码位。
示例代码参考Mobit SDK Demo
自定义广告网络初始化
开发者需继承
abstract public class SACustomADNInitAdaptor {
public SACustomADNInitAdaptor() {
}
public interface InitListener {
void initSuccess();
void initFailure(int code, String message);
}
abstract public void init(Context context, SACustomADNConfig adnConfig, InitListener listener);
abstract public String SDKVersion();
}
在init
方法中进行自定义广告网络初始化,SACustomADNConfig
携带参数如下:
方法 | 含义 | 是否可能为空/默认值 |
---|---|---|
扩展信息,由开发者在mobit管理平台关联appid是传入的信息,可传入自定义广告网络的appid等信息 | 不能为空 | |
是否开启控制台日志,开发者在初始化Mobit SDK时传入的选项 | 默认false | |
是否可以读取地理位置,开发者在初始化Mobit SDK时传入的选项 | 默认true | |
是否可以读取安装列表,开发者在初始化Mobit SDK时传入的选项 | 默认true | |
是否可以读取oaid,开发者在初始化Mobit SDK时传入的选项 | 默认true | |
是否可以读取Android ID,开发者在初始化Mobit SDK时传入的选项 | 默认true | |
是否可以读取imei,开发者在初始化Mobit SDK时传入的选项 | 默认true | |
开发者自行获取的oaid,开发者在初始化Mobit SDK时传入的选项 | 可能为空 | |
开发者自行获取的Android ID,开发者在初始化Mobit SDK时传入的选项 | 可能为空 | |
开发者自行获取的imei,开发者在初始化Mobit SDK时传入的选项 | 可能为空 |
开发者通过SACustomADNConfig adnConfig
获取自定义广告网络初始化参数,并根据初始化结果调用InitListener listener
回调初始化结果
自定义广告网络代码位参数
所有类型的自定义广告网络代码位,请求时都会传入
方法名 | 含义 | 是否可能为空 |
---|---|---|
代码位ID(即广告网络广告位ID) | 不为空 | |
广告宽度,单位dp 开屏、banner、原生广告可用 | 可能为0 | |
广告高度,单位dp 开屏、banner、原生广告可用 | 可能为0 | |
代码位扩展信息,在mobit平台代码位配置中传入的扩展信息 | ||
竞价底价,当代码位为头部竞价时,可以设置竞价底价。sdk会将其单位转成分进行传递 | 可能为0 | |
开发者传入的userId,当前仅对激励视频类型生效 | 可能为空 | |
开发者传入的扩展信息,当前仅对激励视频类型生效 | 可能为空 |
自定义广告参与竞价
实现
public interface SACustomADNBiddingInterface {
interface LossReason {
int LOWER_PRICE = 0;
int NO_EXPOSE = 1;
int OTHER = 2;
}
String getECPM();
void notifyWin(long secondPrice, Map<String, ?> ext);
void notifyLoss(long winPrice, int reason, Map<String, ?> ext);
}
自定义广告网络开屏广告
开发者需继承
public abstract class SACustomADNSplashAdAdaptor {
public interface LoadListener {
void onAdLoaded();
void onAdFailed(int code, String message);
}
public interface InteractionListener {
void onAdDidShow();
void onAdDidShowFailure(int code, String message);
void onAdDidClick();
void onAdDidClose();
void onAdDidSkip();
void onAdLifetimeChange(long lifetime);
}
public SACustomADNSplashAdAdaptor() {
}
public abstract void setLoadListener(LoadListener listener);
public abstract void setInteractionListener(InteractionListener listener);
public abstract void loadAd(SACustomAdSlot adSlot, Activity activity);
public abstract void show(ViewGroup viewGroup);
public abstract boolean isReady();
public abstract void destroy();
}
自定义激励视频广告
开发者需继承
public abstract class SACustomADNRewardVideoAdAdaptor {
public interface LoadListener {
void onAdLoaded();
void onAdFailed(int code, String message);
}
public interface InteractionListener {
void onAdDidShow();
void onAdDidShowFailure(int code, String message);
void onAdDidClick();
void onAdDidClose();
void onAdDidSkip();
void onAdDidRewardEffective();
void onAdVideoPlayCompletion();
}
public SACustomADNRewardVideoAdAdaptor() {
}
public abstract void setMuted(boolean muted);
public abstract void setLoadListener(LoadListener listener);
public abstract void setInteractionListener(InteractionListener listener);
public abstract void loadAd(Context context, SACustomAdSlot slot);
public abstract void showAd(Activity activity);
public abstract boolean isReady();
public abstract void destroy();
}
开发者需继承SACustomADNInterstitialAdAdaptor
抽象类,实现抽象方法:
public abstract class SACustomADNInterstitialAdAdaptor {
public interface LoadListener {
void onAdLoaded();
void onAdFailed(int code, String message);
}
public interface InteractionListener {
void onAdDidShow();
void onAdDidShowFailure(int code, String message);
void onAdDidClick();
void onAdDidClose();
void onAdDidSkip();
}
public SACustomADNInterstitialAdAdaptor() {
}
public abstract void setMuted(boolean muted);
public abstract void setLoadListener(LoadListener listener);
public abstract void setInteractionListener(InteractionListener listener);
public abstract void loadAd(Context context, SACustomAdSlot slot);
public abstract void showAd(Activity activity);
public abstract boolean isReady();
public abstract void destroy();
}
自定义Banner广告
开发者需要继承SACustomADNBannerAdAdaptor
抽象类,实现抽象方法:
public abstract class SACustomADNBannerAdAdaptor {
public interface LoadListener {
void onAdLoaded();
void onAdFailed(int code, String message);
}
public interface InteractionListener {
void onAdRenderSuccess();
void onAdRenderFailure(int code, String message);
void onAdDidShow();
void onAdDidShowFailure(int code, String message);
void onAdDidClick();
void onAdDidClose();
}
public SACustomADNBannerAdAdaptor() {
}
public abstract void setLoadListener(LoadListener listener);
public abstract void setInteractionListener(InteractionListener listener);
public abstract void loadAd(Context context, SACustomAdSlot slot);
public abstract void render();
public abstract View getBannerView();
public abstract boolean isReady();
public abstract void destroy();
}
自定义原生广告
开发者需继承SACustomADNNativeAdAdaptor
抽象类,实现抽象方法:
public abstract class SACustomADNNativeAdAdaptor {
public interface LoadListener {
void onAdLoaded(List<SACustomADNNativeAd> nativeAd);
void onAdFailed(int code, String message);
}
public SACustomADNNativeAdAdaptor() {}
public abstract void setLoadExpressAd(boolean loadExpressAd);
public abstract void setMuted(boolean muted);
public abstract void setLoadListener(LoadListener listener);
public abstract void loadAd(Context context, SACustomAdSlot slot);
}
在Mobit聚合SDK中,原生广告分为模版渲染和开发者自渲染,自定义原生广告,在加载广告时,可以根据setLoadExpressAd(boolean loadExpressAd)
方法传入的loadExpressAd
进行判断当前应当使用模版渲染还是开发者自渲染方法。
如果接入的广告网络在加载时不区分渲染类型,则通常会在填充时区分渲染类型,开发者需要在填充结果中判断loadExpressAd
,筛选后再进行回调。
public interface SACustomADNNativeAd {
//是否是模版渲染类型
boolean isExpressAd();
// 返回原生模版渲染接口类型实例
SACustomADNExpressFeedAd getExpressAd();
// 返回原生自渲染接口类型实例
SACustomADNNativeFeedAd getNativeAd();
}
原生广告模版渲染类型
public interface SACustomADNExpressFeedAd {
interface InteractionListener {
void onAdRenderSuccess();
void onAdRenderFailure(int code, String message);
void onAdDidShow();
void onAdDidShowFailure(int code, String message);
void onAdDidClick();
void onAdDidClose();
}
void render();
View getAdView();
void destroy();
void setInteractionListener(InteractionListener listener);
boolean isReady();
}
原生广告开发者自渲染类型
public interface SACustomADNNativeFeedAd {
interface InteractionListener {
void onAdDidShow();
void onAdDidShowFailure(int code, String message);
void onAdDidClick();
void onAdDidClose();
}
interface VideoInteractionListener {
void onVideoPlay();
void onVideoPause();
void onVideoStop();
}
interface AppInfo {
String getAppName();
String getAuthorName();
String getPermissionsUrl();
String getPrivacyAgreement();
String getVersionName();
String getDescriptionUrl();
}
enum MediaMode {
OnlyIcon, OneImage, GroupImage, Video
}
void destroy();
void setInteractionListener(InteractionListener listener);
void setVideoInteractionListener(VideoInteractionListener listener);
String getTitle();
String getDescription();
String getIconUrl();
String getAdLogoUrl();
List<String> getImageList();
String getCallToActionName();
MediaMode getMediaMode();
boolean isAppAd();
AppInfo getAppInfo();
void registerVideoContainer(ViewGroup container);
void registerView(Activity activity, ViewGroup container, List<View> clickableViews);
void playVideo();
void pauseVideo();
void stopVideo();
boolean isReady();
}
方法说明:
方法名 | 说明 | 是否可以为空 |
---|---|---|
getTitle() | 广告主标题 | 可为空 |
getDescription() | 广告文章描述(副标题) | 可为空 |
getIconUrl() | app icon url | 可为空 |
getAdLogoUrl() | 广告平台logo url | 可为空 |
getImageList() | 广告图片素材列表 | 可为空 |
getCallToActionName() | cta文案 | 可为空 |
getMediaMode() | 广告素材类型(单图、多图、仅icon,视频) | 不可为空 |
isAppAd() | 是否是下载类广告 | |
getAppInfo() | 下载类广告app信息(合规六要素) | 当isAppAd()为true时,不可为空 |
registerVideoContainer(ViewGroup container) | 注册视频组件容器 | |
registerView(Activity activity, ViewGroup container, List<View> clickableViews) | 注册广告activity、容器、可点击视图 |
AppInfo说明:
方法 | 说明 |
---|---|
getAppName() | 应用名称 |
getAuthorName() | 开发者 |
getPermissionsUrl() | 权限说明链接 |
getPrivacyAgreement() | 隐私协议链接 |
getVersionName() | 版本号 |
getDescriptionUrl() | 功能描述链接 |