跳至主要內容

自定义广告网络接入

大约 7 分钟

自定义广告网络接入

开发者可以使用Mobit管理平台添加其他广告网络配置,新增广告代码位,在瀑布流中进行广告加载。

开发者需要在代码中通过继承特定类和实现特定接口来完成接入。开发者需要将自定义类的全路径传入Mobit管理平台中,Mobit SDK将获取自定义类的类名,通过反射方式以类名构建实例,调用方法等,因此开发者自定义的类不能被混淆

Mobit SDK会在初始化时,调用自定义广告网络的初始化。在Mobit SDK广告请求时,按策略加载自定义广告网络代码位。

示例代码参考Mobit SDK Demoopen in new window

自定义广告网络初始化

开发者需继承

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()功能描述链接
上次编辑于: