Android自定义平台适配器对接文档

[TOC]

1. 概述

尊敬的开发者,欢迎您使用ADmobile 苏伊士广告SDK自定义适配广告平台。通过本文档,您可以在几分钟之内轻松完成自定义广告平台对接过程。

操作系统及要求:使用Android Studio;Android4.1及以上(minSdkVersion 16及以上)主要按所适配渠道最低版本要求;

自定义适配器平台支持广告类型:开屏,横幅,插屏,全屏视频,激励视频,信息流等;

Demo下载地址: https://gitee.com/admobile/Android-custom-platform-adapter

2. 添加SDK到工程中

2.1 添加仓库地址

首先需要在项目的build.gradle文件中引入如下配置:

allprojects {
    repositories {
        ...
        google()
        jcenter()
        mavenCentral()
        // 添加以下仓库地址
        maven { url "https://maven.admobile.top/repository/maven-releases/" }
    }
}

2.2 添加ADSuyiSdk和需要的AdapterSdk到主项目中

    // ADSuyiSdk核心库是必须导入的
    implementation 'cn.admobiletop.adsuyi.ad:core-alpha:3.4.0.10141'
    // common库是必须导入的,请保持和Demo中版本一致
    implementation 'com.admobile:common:1.3.2'

    // oaid(用于获取设备标识)
    implementation(name: 'oaid_sdk_1.0.25', ext: 'aar')
    // oaid适配器(ADSuyi用于获取oaid)
    implementation 'cn.admobiletop.adsuyi.ad:oaid:1.0.25.08021'

    // 艾狄墨搏AdapterSdk,必须的`
    implementation 'cn.admobiletop.adsuyi.ad.adapter:admobile:5.0.1.10223'

2.3 添加ADSuyiSdk核心库和必要的库到你所适配的核心库中

dependencies {
    // ⚠️使用编译时依赖 避免和自己项目本身的依赖冲突,同时不影响适配器的编译⚠️

    compileOnly 'com.android.support:appcompat-v7:28.0.0'

    // ADSuyi核心库
    compileOnly 'cn.admobiletop.adsuyi.ad:core-alpha:3.4.0.10141'

    // 第三方渠道广告aar(优量汇aar)
    compileOnly (name: 'gdt-4.420.1290', ext: 'aar')
}

2.4 添加渠道的混淆配置

根据渠道提供的混淆进行配置。

2.5 配置渠道FileProvider配置

根据渠道提供的Provider进行配置,否则会影响到下载类广告。

3. 在ADmobile运营后台增加自定义适配平台

1、广告平台:因ADSuyiSDK与运营后台的通信是依赖于双端协定的平台名称来进行逻辑处理,新增自定义平台尚未开通开发者后台自主添加功能,如有需要请联系ADmobile运营同学协助添加;需谨记在运营后台添加的广告平台名称字段,该字段在自定义适配器开发时需要用到且必须与后台所填一致,否则会有广告加载异常问题;在后台添加新平台时需要添加该三方平台的申请的AppIdAppKey,该参数用于SDK端三方平台SDK初始化;

2、广告类型:因自定义平台适配器不能增加新的广告类型,故只能使用现有广告类型来进行平台广告的添加,在添加自定义平台广告位时,需严格按照平台的广告类型创建广告位id,现有广告类型(模板,自渲染,模板2.0等),如不清楚平台所示广告为何种类型时,请咨询我们技术同学;自定义平台适配器开发时,需明确该类为何种广告类型的加载器

3、平台及广告加载器注册:自定义适配器平台开发中,需要继承对应的初始化父类及广告类型适配器父类,并应在load方法中调用注册方法来告知主SDK注册的平台及广告类型;

4、初始化类:自定义平台初始化类继承自自定义适配平台SDK,应在父类开放方法实现中来初始化三方平台SDK;

5、广告加载类:自定义适配平台加载器类中,需要继承自适配平台SDK依赖库对应广告类型父类,并在子类中实现响应加载方法及展示方法(部分广告类型无展示方法,仅需实现请求方法且务必正确调用相应方法确保广告正常展示),方法中有广告请求参数adapterParams,根据平台加载广告所需参数从adapterParams拿到响应参数;

6、广告回调:因ADmobile需要根据平台回调时机来统计广告相关数据,故开发者在适配器开发过程中,需要根据平台广告回调中,调用listener方法,告知主SDK端进行数据统计(如:-listener.onAdReceive广告获取成功时调用此方法),需严格按照对应回调调用相应方法;

4. 自定义适配器平台示例

以下自定义广告适配示例采用已适配平台:优量汇(gdt);demo中已适配穿山甲(toutiao),优量汇(gdt)俩平台;

5. 广告平台的初始化

新建项目时需要注意包名,必须按照如下规则进行设置,这里以广点通为例,其中gdt为所适配广告平台的别名。

cn.admobiletop.adsuyi.adapter.gdt

在gdt包目录下新建ADSuyiIniter类,并实现ADSuyiAdapterIniter接口:

ADSuyiAdapterIniter接口说明

接口 参数说明 返回值 作用 是否必须实现 说明
init ADSuyiPlatform platform:平台初始化配置信息;
ADSuyiAdapterIniterExtParams extParams平台初始化额外参数。
void 获取渠道配置信息,如appId,appKey 需要在该位置初始化广告平台。
inited - Boolean ADSuyi核心库根据该方法判断渠道是否初始化完毕
getSuyiAdapterLoader String adType:请求广告类型;
ADSuyiAdType.TYPE_SPLASH 开屏广告
ADSuyiAdType.TYPE_BANNER 横幅广告
ADSuyiAdType.TYPE_FLOW 信息流广告
ADSuyiAdType.TYPE_REWARD_VOD 激励视频广告
ADSuyiAdType.TYPE_FULLSCREEN_VOD 全屏视频广告
ADSuyiAdType.TYPE_INTERSTITIAL 插屏广告
ADSuyiAdapterLoader ADSuyi核心库根据该方法获取适配器加载广告的Loader类,从而实现广告的价值
getSupportADSuyiSdkVersions - List 获取当前广告平台适配器与ADSuyi核心库所匹配的版本号 {"3.3.2.08201"}
getAdapterVersion - String 获取当前适配器所适配的版本 请对build.gradle中SDK_VERSION_NAME参数进行修改

ADSuyiPlatformADSuyiInitConfigADSuyiSdk方法说明

对象 方法 返回值 说明
ADSuyiPlatform getPlatform String 获取平台名称,与cn.admobiletop.adsuyi.adapter.gdt路径中的gdt相对应
getAppId String 获取下发的平台初始化AppId
getAppKey String 获取下发的平台初始化AppKey
ADSuyiInitConfig isAgreePrivacyStrategy Boolean 是否同意隐私政策
debug boolean 是否为测试模式
isCanUseLocation boolean 能否使用定位数据
isCanUsePhoneState boolean 能否使用设备信息
isCanUseWifiState boolean 能否使用wifi信息
isCanUseOaid boolean 能否使用OAID
ADSuyiSdk getContext Context 上下文对象
getDownloadTip int 下载类广告提示模式
getOAID String 获取OAID

6. 广告平台广告的对接

6.1 开屏广告

创建SplashAdLoader开屏广告加载器,并实现ADSuyiAdapterLoader接口:

ADSuyiAdapterLoader接口说明

接口 参数说明 返回值 作用 是否必须实现 说明
loadAd ADSuyiSplashAd splashAd: Suyi开屏广告对象,其中包含上下文类;
ADSuyiAdapterParams adapterParams:广告位配置信息
ADSuyiSplashAdListener adListener:开发者传递过来的广告监听
void 获取当前开发者传入的上下文对象,服务端广告位配置信息,开发者传入的广告监听。 用于广告的加载。
onResumed - void 目前不做处理
onPaused - void 目前不做处理
release - void 释放广告对象 ADSuyi广告对象被释放会调用该方法

loadAd方法内部具体实现

        /**
     * 加载开屏广告
     * @param splashAd
     * @param adapterParams
     * @param adListener
     */
    @Override
    public void loadAd(ADSuyiSplashAd splashAd, ADSuyiAdapterParams adapterParams, ADSuyiSplashAdListener adListener) {
          // 首先一定要进行如下判断,避免出现空指针异常
        if (!ADSuyiAdUtil.isReleased(splashAd)
                && splashAd.getContainer() != null
                && adapterParams != null
                && adapterParams.getPlatform() != null
                && adapterParams.getPlatformPosId() != null
                && adListener != null) {
            ADSuyiPlatformPosId adSuyiPlatformPosId = adapterParams.getPlatformPosId();

            // 广告加载的Activity
            Activity activity = splashAd.getActivity();
            // 广告布局容器
            ADSuyiSplashAdContainer container = splashAd.getContainer();
            // 广告平台广告位ID
            String platformPosId = adSuyiPlatformPosId.getPlatformPosId();

            loadSplashAd(activity, container, platformPosId, adListener);
        }
    }

        /**
     * 加载广点通开屏广告
     * @param activity      广告展示的Activity
     * @param container     广告布局容器
     * @param platformPosId 广告平台广告位ID
     * @param adListener    广告监听回调
     */
    private void loadSplashAd(Activity activity, ADSuyiSplashAdContainer container, String platformPosId, ADSuyiSplashAdListener adListener) {
        // 构造开屏监听类,实现广点通开屏广告回调接口
        splashAdListener = new SplashAdListener(container, platformPosId, adListener);

        // 以下是广点通加载广告逻辑
        // 构造广点通SplashAD对象,传入必要的参数
        SplashAD splashAD = new SplashAD(activity
                , platformPosId
                , splashAdListener);

        // 加载并展示广点通开屏广告
        splashAD.fetchAndShowIn(container);
    }

SplashAdListener 构造开屏监听类,将该监听设置到广告渠道设置监听回调方法内。注意:需要继承 BaseAdListener,实现所适配渠道的开屏广告监听回调,并在回调中调用事先set的adListener内的方法。

BaseAdListener类需要实现的方法说明

接口 参数说明 返回值 作用 是否必须实现 说明
SplashAdListener @param platformPosId 广告平台id<br>@param adListener 开屏监听器 SplashAdListener 构造监听类,用于打通广告渠道与ADSuyi间的回调 -
release - void 在这里可以对一些对象进行销毁 -

SplashAdListener需要实现三方广告监听回调,这里以广点通为例子,需要实现广点通SplashADListener监听:

接口 参数说明 返回值 作用 是否必须实现 说明
onADReceive - void 广点通广告成功展示回调,在该接口中需要开发者创建BaseAdInfo对象,并调用ADSuyiSplashAdListener onAdReceive回调,用于提示开发者广告获取成功。
... - ... 其它接口回调逻辑请参考适配器demo ... ...

6.2 横幅广告

创建 BannerAdLoader 开屏广告加载器,并实现 ADSuyiAdapterLoader 接口:

ADSuyiAdapterLoader接口说明

接口 参数说明 返回值 作用 是否必须实现 说明
loadAd ADSuyiBannerAd bannerAd: Suyi横幅广告对象,其中包含上下文类;
ADSuyiAdapterParams adapterParams:广告位配置信息
ADSuyiBannerAdListener adListener:开发者传递过来的广告监听
void 获取当前开发者传入的上下文对象,服务端广告位配置信息,开发者传入的广告监听。 用于广告的加载。
onResumed - void onResumed根据Activity生命周期回调
onPaused - void onPaused根据Activity生命周期回调
release - void 释放广告对象 ADSuyi广告对象被释放会调用该方法

loadAd方法内部具体实现

    /**
     * 加载横幅广告
     * @param bannerAd
     * @param adapterParams
     * @param adListener
     */
    @Override
    public void loadAd(ADSuyiBannerAd bannerAd, ADSuyiAdapterParams adapterParams, ADSuyiBannerAdListener adListener) {
        if (!ADSuyiAdUtil.isReleased(bannerAd)
                && bannerAd.getContainer() != null
                && adapterParams != null
                && adapterParams.getPlatform() != null
                && adapterParams.getPlatformPosId() != null
                && adListener != null) {
            ADSuyiPlatformPosId adSuyiPlatformPosId = adapterParams.getPlatformPosId();
            // 广告加载的Activity
            Activity activity = bannerAd.getActivity();
            // 广告布局容器
            RelativeLayout container = bannerAd.getContainer();
            // 广告平台广告位ID
            String platformPosId = adSuyiPlatformPosId.getPlatformPosId();

            loadBannerAd(activity, container, platformPosId, adListener);
        }
    }

    /**
     * 加载广点通横幅广告
     * @param activity        广告展示的Activity
     * @param container       广告布局容器
     * @param platformPosId   广告平台广告位ID
     * @param adListener      广告监听回调
     */
    private void loadBannerAd(Activity activity, RelativeLayout container, String platformPosId, ADSuyiBannerAdListener adListener) {
        // 构造横幅监听类,实现广点通横幅广告回调接口
        bannerAdListener = new BannerAdListener(platformPosId, adListener);

        // 以下是广点通加载广告逻辑
        // 构造广点通UnifiedBannerView,传入必要的参数
        unifiedBannerView = new UnifiedBannerView(activity
                , platformPosId
                , bannerAdListener);
        // 移除开发者传入的banner控件中的布局
        container.removeAllViews();
        // 将广点通unifiedBannerView添加进开发者容器中
        container.addView(unifiedBannerView);
        // 加载并展示广点通开屏广告
        unifiedBannerView.loadAD();
    }

BannerAdListener 构造横幅监听类,将该监听设置到广告渠道设置监听回调方法内。注意:需要继承 BaseAdListener,实现所适配渠道的横幅广告监听回调,并在回调中调用事先set的adListener内的方法。

BaseAdListener类需要实现的方法说明

接口 参数说明 返回值 作用 是否必须实现 说明
BannerAdListener @param platformPosId 广告平台id<br>@param adListener 横幅监听器 SplashAdListener 构造监听类,用于打通广告渠道与ADSuyi间的回调 这里要将代码进行优化,代码要改
release - void 在这里可以对一些对象进行销毁 -

BannerAdListener需要实现三方广告监听回调,这里以广点通为例子,需要实现广点通UnifiedBannerADListener监听:

接口 参数说明 返回值 作用 是否必须实现 说明
onADReceive - void 广点通广告加载成功回调,在该接口中需要开发者创建BaseAdInfo对象,并调用ADSuyiBannerAdListener onAdReceive回调,用于提示开发者广告获取成功。
... - ... 其它接口回调逻辑请参考适配器demo ... ...

6.3 插屏广告

创建 InterstitialAdLoader 插屏广告加载器,并实现 ADSuyiAdapterLoader 接口:

ADSuyiAdapterLoader接口说明

接口 参数说明 返回值 作用 是否必须实现 说明
loadAd ADSuyiInterstitialAd interstitialAd: Suyi插屏广告对象,其中包含上下文类;
ADSuyiAdapterParams adapterParams:广告位配置信息
ADSuyiInterstitialAdListener adListener:开发者传递过来的广告监听
void 获取当前开发者传入的上下文对象,服务端广告位配置信息,开发者传入的广告监听。 用于广告的加载。
onResumed - void 目前不做处理
onPaused - void 目前不做处理
release - void 释放广告对象 ADSuyi广告对象被释放会调用该方法

loadAd方法内部具体实现

    /**
     * 加载插屏广告
     * @param interstitialAd
     * @param adapterParams
     * @param adListener
     */
    @Override
    public void loadAd(ADSuyiInterstitialAd interstitialAd, ADSuyiAdapterParams adapterParams, ADSuyiInterstitialAdListener adListener) {
        if (!ADSuyiAdUtil.isReleased(interstitialAd)
                && adapterParams != null
                && adapterParams.getPlatform() != null
                && adapterParams.getPlatformPosId() != null
                && adListener != null) {
            ADSuyiPlatformPosId adSuyiPlatformPosId = adapterParams.getPlatformPosId();
            // 广告加载的Activity
            Activity activity = interstitialAd.getActivity();
            // 广告平台广告位ID
            String platformPosId = adSuyiPlatformPosId.getPlatformPosId();

            loadInterstitialAD(activity, platformPosId, adListener);
        }
    }

    /**
     * 加载广点通插屏广告
     * @param activity      广告加载广告的Activity
     * @param platformPosId 广告平台广告位ID
     * @param adListener    广告监听回调
     */
    private void loadInterstitialAD(Activity activity, String platformPosId, ADSuyiInterstitialAdListener adListener) {
        // 构造插屏广告监听类,实现广点通插屏广告回调接口
        interstitialAdListener = new InterstitialAdListener(platformPosId, adListener);

        // 以下是广点通加载广告逻辑
        // 构造广点通UnifiedInterstitialAD对象,传入必要的参数
        unifiedInterstitialAD = new UnifiedInterstitialAD(activity
                , platformPosId
                , interstitialAdListener);

        // 向封装的插屏监听类中传入unifiedInterstitialAD,用于返回给用户进行插屏的播放
        interstitialAdListener.setUnifiedInterstitialAD(unifiedInterstitialAD);
        // 加载广点通插屏广告
        unifiedInterstitialAD.loadAD();
    }

InterstitialAdListener 构造插屏监听类,将该监听设置到广告渠道设置监听回调方法内。注意:需要继承 BaseAdListener,实现所适配渠道的插屏广告监听回调,并在回调中调用事先set的adListener内的方法。

BaseAdListener类需要实现的方法说明

接口 参数说明 返回值 作用 是否必须实现 说明
InterstitialAdListener @param platformPosId 广告平台id<br>@param adListener 插屏监听器 InterstitialAdListener 构造监听类,用于打通广告渠道与ADSuyi间的回调 -
release - void 在这里可以对一些对象进行销毁 -

InterstitialAdListener需要实现三方广告监听回调,这里以广点通为例子,需要实现广点通UnifiedInterstitialADListener监听:

接口 参数说明 返回值 作用 是否必须实现 说明
onADReceive - void 广点通广告加载成功回调,在该接口中需要开发者创建InterstitialAdInfo对象,并调用ADSuyiInterstitialAdListener onAdReceive回调,用于提示开发者广告获取成功。
... - ... 其它接口回调逻辑请参考适配器demo ... ...

InterstitialAdInfo 插屏广告内容对象,需要继承 BaseAdInfo,其中E为渠道的插屏视频广告对象,并实现 ADSuyiInterstitialAdInfo 接口

接口 参数说明 返回值 作用 是否必须实现 说明
showInterstitial Activity activity:展示插屏广告的activity void 打开插屏广告
hasShown - boolean 广告是否已展示 渠道的插屏视频广告对象如果有相应接口,可以在该方法中进行调用
hasExpired - boolean 广告是否过期 渠道的插屏视频广告对象如果有相应接口,可以在该方法中进行调用
isReady - boolean 广告是否可播放 渠道的插屏视频广告对象如果有相应接口,可以在该方法中进行调用
releaseAdapter - boolean 广告释放 在该方法内将AdapterAdInfo置为空

6.4 激励视频广告

创建 RewardVodAdLoader 插屏广告加载器,并实现 ADSuyiAdapterLoader 接口:

ADSuyiAdapterLoader接口说明

接口 参数说明 返回值 作用 是否必须实现 说明
loadAd ADSuyiRewardVodAd rewardVodAd: Suyi激励视频广告对象,其中包含上下文类;
ADSuyiAdapterParams adapterParams:广告位配置信息
ADSuyiRewardVodAdListener adListener:开发者传递过来的广告监听
void 获取当前开发者传入的上下文对象,服务端广告位配置信息,开发者传入的广告监听。 用于广告的加载。
onResumed - void 目前不做处理
onPaused - void 目前不做处理
release - void 释放广告对象 ADSuyi广告对象被释放会调用该方法

loadAd方法内部具体实现

    /**
     * 加载激励视频广告
     * @param rewardVodAd
     * @param adapterParams
     * @param adListener
     */
    @Override
    public void loadAd(ADSuyiRewardVodAd rewardVodAd, ADSuyiAdapterParams adapterParams, ADSuyiRewardVodAdListener adListener) {
        if (!ADSuyiAdUtil.isReleased(rewardVodAd)
                && adapterParams != null
                && adapterParams.getPlatform() != null
                && adapterParams.getPlatformPosId() != null
                && adListener != null) {
            ADSuyiPlatformPosId adSuyiPlatformPosId = adapterParams.getPlatformPosId();
            // 激励视频广告加载的Activity
            Activity activity = rewardVodAd.getActivity();
            // 激励视频广告平台广告位ID
            String platformPosId = adSuyiPlatformPosId.getPlatformPosId();

            loadRewardVideoAD(activity, platformPosId, adListener);

        }
    }

    /**
     * 加载广点通激励视频广告
     * @param activity      广告加载广告的Activity
     * @param platformPosId 广告平台广告位ID
     * @param adListener    广告监听回调
     */
    private void loadRewardVideoAD(Activity activity, String platformPosId, ADSuyiRewardVodAdListener adListener) {
        // 构造激励视频监听类,实现广点通激励视频广告回调接口
        rewardVodAdListener = new RewardVodAdListener(platformPosId, adListener);

        // 以下是广点通加载广告逻辑
        // 构造广点通RewardVideoAD对象,传入必要的参数
        RewardVideoAD rewardVideoAD = new RewardVideoAD(activity
                , platformPosId
                , rewardVodAdListener);
        // 向封装的激励视频监听类中传入rewardVideoAD,用于返回给用户进行激励视频的播放
        rewardVodAdListener.setRewardVideoAD(rewardVideoAD);
        // 加载广点通激励视频广告
        rewardVideoAD.loadAD();
    }

RewardVodAdListener 构造激励视频监听类,将该监听设置到广告渠道设置监听回调方法内。注意:需要继承 BaseAdListener,实现所适配渠道的插屏广告监听回调,并在回调中调用事先set的adListener内的方法。

BaseAdListener类需要实现的方法说明

接口 参数说明 返回值 作用 是否必须实现 说明
RewardVodAdListener @param platformPosId 广告平台id<br>@param adListener 激励视频监听器 RewardVodAdListener 构造监听类,用于打通广告渠道与ADSuyi间的回调 -
release - void 在这里可以对一些对象进行销毁 -

RewardVodAdListener 需要实现三方广告监听回调,这里以广点通为例子,需要实现广点通 RewardVideoADListener 监听:

接口 参数说明 返回值 作用 是否必须实现 说明
onADLoad - void 广点通广告加载成功回调,在该接口中需要开发者创建 RewardVodAdInfo 对象,并调用 ADSuyiRewardVodAdListener onAdReceive 回调,用于提示开发者广告获取成功。
... - ... 其它接口回调逻辑请参考适配器demo ... ...

RewardVodAdInfo 插屏广告内容对象,需要继承 BaseAdInfo,其中E为渠道的插屏视频广告对象,并实现 ADSuyiRewardVodAdInfo 接口

接口 参数说明 返回值 作用 是否必须实现 说明
showRewardVod Activity activity:展示插屏广告的activity void 打开激励视频广告
hasShown - boolean 广告是否已展示 渠道的激励视频广告对象如果有相应接口,可以在该方法中进行调用
hasExpired - boolean 广告是否过期 渠道的激励视频广告对象如果有相应接口,可以在该方法中进行调用
isReady - boolean 广告是否可播放 渠道的激励视频广告对象如果有相应接口,可以在该方法中进行调用
releaseAdapter - boolean 广告释放 在该方法内将AdapterAdInfo置为空

6.5 全屏视频广告

创建 FullScreenVodAdLoader 插屏广告加载器,并实现 ADSuyiAdapterLoader 接口:

ADSuyiAdapterLoader接口说明

接口 参数说明 返回值 作用 是否必须实现 说明
loadAd ADSuyiFullScreenVodAd fullScreenVodAd: Suyi全屏视频广告对象,其中包含上下文类;
ADSuyiAdapterParams adapterParams:广告位配置信息
ADSuyiFullScreenVodAdListener adListener:开发者传递过来的广告监听
void 获取当前开发者传入的上下文对象,服务端广告位配置信息,开发者传入的广告监听。 用于广告的加载。
onResumed - void 目前不做处理
onPaused - void 目前不做处理
release - void 释放广告对象 ADSuyi广告对象被释放会调用该方法

loadAd方法内部具体实现

    /**
     * 加载全屏视频广告
     * @param fullScreenVodAd
     * @param adapterParams
     * @param adListener
     */
    @Override
    public void loadAd(ADSuyiFullScreenVodAd fullScreenVodAd, ADSuyiAdapterParams adapterParams, ADSuyiFullScreenVodAdListener adListener) {
        if (!ADSuyiAdUtil.isReleased(fullScreenVodAd)
                && adapterParams != null
                && adapterParams.getPlatform() != null
                && adapterParams.getPlatformPosId() != null
                && adListener != null) {
            ADSuyiPlatformPosId adSuyiPlatformPosId = adapterParams.getPlatformPosId();
            // 广告加载的Activity
            Activity activity = fullScreenVodAd.getActivity();
            // 广告平台广告位ID
            String platformPosId = adSuyiPlatformPosId.getPlatformPosId();

            loadFullScreenAd(activity, platformPosId, adListener);
        }
    }

    /**
     * 加载广点通全屏视频广告
     * @param activity      广告加载广告的Activity
     * @param platformPosId 广告平台广告位ID
     * @param adListener    广告监听回调
     */
    private void loadFullScreenAd(Activity activity, String platformPosId, ADSuyiFullScreenVodAdListener adListener) {
        // 构造全屏视频监听类,实现广点通全屏视频广告回调接口
        fullScreenVodAdListener = new FullScreenVodAdListener(platformPosId, adListener);

        // 以下是广点通加载广告逻辑
        // 构造广点通UnifiedInterstitialAD对象,传入必要的参数
        unifiedInterstitialAD = new UnifiedInterstitialAD(activity
                , platformPosId
                , fullScreenVodAdListener);

        // 向封装的全屏视频监听类中传入unifiedInterstitialAD,用于返回给用户进行全屏视频的播放
        fullScreenVodAdListener.setUnifiedInterstitialAD(unifiedInterstitialAD);
        // 加载广点通全屏视频广告
        unifiedInterstitialAD.loadFullScreenAD();
    }

FullScreenVodAdListener 构造全屏视频监听类,将该监听设置到广告渠道设置监听回调方法内。注意:需要继承 BaseAdListener,实现所适配渠道的插屏广告监听回调,并在回调中调用事先set的adListener内的方法。

BaseAdListener类需要实现的方法说明

接口 参数说明 返回值 作用 是否必须实现 说明
RewardVodAdListener @param platformPosId 广告平台id<br>@param adListener 激励视频监听器 RewardVodAdListener 构造监听类,用于打通广告渠道与ADSuyi间的回调 -
release - void 在这里可以对一些对象进行销毁 -

RewardVodAdListener 需要实现三方广告监听回调,这里以广点通为例子,需要实现广点通 RewardVideoADListener 监听:

接口 参数说明 返回值 作用 是否必须实现 说明
onADLoad - void 广点通广告加载成功回调,在该接口中需要开发者创建 RewardVodAdInfo 对象,并调用 ADSuyiRewardVodAdListener onAdReceive 回调,用于提示开发者广告获取成功。
... - ... 其它接口回调逻辑请参考适配器demo ... ...

RewardVodAdInfo 插屏广告内容对象,需要继承 BaseAdInfo,其中E为渠道的全屏视频广告对象,并实现 ADSuyiFullScreenVodAdInfo 接口

接口 参数说明 返回值 作用 是否必须实现 说明
showFullScreenVod Activity activity:展示插屏广告的activity void 打开全屏视频广告
hasShown - boolean 广告是否已展示 渠道的全屏视频广告对象如果有相应接口,可以在该方法中进行调用
hasExpired - boolean 广告是否过期 渠道的全屏视频广告对象如果有相应接口,可以在该方法中进行调用
isReady - boolean 广告是否可播放 渠道的全屏视频广告对象如果有相应接口,可以在该方法中进行调用
releaseAdapter - boolean 广告释放 在该方法内将AdapterAdInfo置为空

6.6 信息流广告

创建 NativeAdLoader 插屏广告加载器,并实现 ADSuyiAdapterLoader 接口:

ADSuyiAdapterLoader 接口说明

接口 参数说明 返回值 作用 是否必须实现 说明
loadAd ADSuyiNativeAd nativeAd: Suyi信息流广告对象,其中包含上下文类;
ADSuyiAdapterParams adapterParams:广告位配置信息
ADSuyiNativeAdListener adListener:开发者传递过来的广告监听
void 获取当前开发者传入的上下文对象,服务端广告位配置信息,开发者传入的广告监听。 用于广告的加载。
onResumed - void 目前不做处理
onPaused - void 目前不做处理
release - void 释放广告对象 ADSuyi广告对象被释放会调用该方法

loadAd方法内部具体实现

    /**
     * 加载信息流广告
     * @param nativeAd
     * @param adapterParams
     * @param adListener
     */
    @Override
    public void loadAd(ADSuyiNativeAd nativeAd, ADSuyiAdapterParams adapterParams, ADSuyiNativeAdListener adListener) {
        if (!ADSuyiAdUtil.isReleased(nativeAd)
                && adapterParams != null
                && adapterParams.getPlatform() != null
                && adapterParams.getPlatformPosId() != null
                && adListener != null) {
            ADSuyiPlatformPosId adSuyiPlatformPosId = adapterParams.getPlatformPosId();
            // 广告加载的Activity
            Activity activity = nativeAd.getActivity();
            // 广告平台广告位ID
            String platformPosId = adSuyiPlatformPosId.getPlatformPosId();

            if (ADSuyiConfig.RenderType.RENDER_TYPE_NATIVE == adSuyiPlatformPosId.getRenderType()) {
                loadNativeAd(activity, platformPosId, adapterParams.getCount(), adListener);
            } else {
                loadNativeExpressAd(activity, platformPosId, adapterParams.getCount(), adListener);
            }
        }
    }

    /**
     * 加载广点通模板信息流广告
     * @param activity      广告加载广告的Activity
     * @param platformPosId 广告平台广告位ID
     * @param count         广告平台请求广告数量
     * @param adListener    广告监听回调
     */
    private void loadNativeExpressAd(Activity activity, String platformPosId, int count, ADSuyiNativeAdListener adListener) {
        // 构造信息流监听类,实现广点通信息流广告回调接口
        nativeExpressAdListener = new NativeExpressAdListener(platformPosId, adListener);

        // 以下是广点通加载广告逻辑
        // 构造广点通NativeExpressAD对象,传入必要的参数
        NativeExpressAD nativeExpressAD = new NativeExpressAD(activity
                , new ADSize(ADSize.FULL_WIDTH, ADSize.AUTO_HEIGHT)
                , platformPosId
                , nativeExpressAdListener);
        // 加载广点通信息流模版广告
        nativeExpressAD.loadAD(count);
    }

    /**
     * 加载广点通原生自渲染广告
     * @param activity      广告加载广告的Activity
     * @param platformPosId 广告平台广告位ID
     * @param count         广告平台请求广告数量
     * @param adListener    广告监听回调
     */
    private void loadNativeAd(Activity activity, String platformPosId, int count, ADSuyiNativeAdListener adListener) {
        // 构造信息流监听类,实现广点通信息流广告回调接口
        nativeAdListener = new NativeAdListener(platformPosId, adListener);

        // 以下是广点通加载广告逻辑
        // 构造广点通NativeExpressAD对象,传入必要的参数
        NativeUnifiedAD nativeUnifiedAd = new NativeUnifiedAD(activity
                , platformPosId
                , nativeAdListener);
        // 加载广点通信息流原生自渲染广告
        nativeUnifiedAd.loadData(count);
    }

6.6.1 信息流模版广告

NativeExpressAdListener 构造信息流模版监听类,将该监听设置到广告渠道设置监听回调方法内。注意:需要继承 BaseAdListener,实现所适配渠道的信息流模版广告监听回调,并在回调中调用事先set的adListener内的方法。

BaseAdListener类需要实现的方法说明

接口 参数说明 返回值 作用 是否必须实现 说明
NativeExpressAdListener @param platformPosId 广告平台id<br>@param adListener 信息流模版监听器 NativeExpressAdListener 构造监听类,用于打通广告渠道与ADSuyi间的回调 -
release - void 在这里可以对一些对象进行销毁 -

NativeExpressAdListener 需要实现三方广告监听回调,这里以广点通为例子,需要实现广点通 NativeExpressAD.NativeExpressADListener 监听:

接口 参数说明 返回值 作用 是否必须实现 说明
onADLoaded List nativeExpressADViewList:返回了可以用来展示广告的 NativeExpressADView void 广点通广告加载成功回调,在该接口中需要开发者创建 List 数组,将NativeExpressADView循环放到ADSuyiNativeAdInfo对象中,并调用 ADSuyiNativeAdListener onAdReceive 回调,用于提示开发者广告获取成功。
... - ... 其它接口回调逻辑请参考适配器demo ... ...

NativeExpressAdInfo 信息流模版广告内容对象,需要继承 BaseAdInfo,其中E为渠道的信息流模版广告对象,并实现 ADSuyiNativeExpressAdInfo和NativeExpressMediaListener 接口

接口 参数说明 返回值 作用 是否必须实现 说明
isNativeExpress - boolean 是否为模版广告 请直接返回true
isVideo - boolean 是否为带视频的模版广告 渠道的信息流模版广告对象如果有相应接口,可以在该方法中进行调用
setVideoListener - void 设置信息流模版广告带视频情况时的监听回调 有需求的话可以进行设置
getNativeExpressAdView ViewGroup container:需要传入广告容器 View 返回广告容器,需要在内部将模版广告view add到container中并返回 -
render ViewGroup viewGroup:需要传入广告容器 void 渲染广告视图 部分渠道可能需要调用render方法才能真正的展示广告
releaseAdapter - void 释放资源 请在此处对渠道的广告对象进行销毁,并setAdapterAdInfo(null);

6.6.2 信息流原生自渲染广告

NativeAdListener构造信息流模版监听类,将该监听设置到广告渠道设置监听回调方法内。注意:需要继承 BaseAdListener,实现所适配渠道的信息流原生自渲染广告监听回调,并在回调中调用事先set的adListener内的方法。

BaseAdListener类需要实现的方法说明

接口 参数说明 返回值 作用 是否必须实现 说明
NativeAdListener @param platformPosId 广告平台id<br>@param adListener 信息流原生自渲染监听器 NativeAdListener 构造监听类,用于打通广告渠道与ADSuyi间的回调 -
release - void 在这里可以对一些对象进行销毁 -

NativeAdListener需要实现三方广告监听回调,这里以广点通为例子,需要实现广点通 NativeADUnifiedListener 监听:

接口 参数说明 返回值 作用 是否必须实现 说明
onADLoaded List nativeUnifiedADDataList:返回了可以用来展示广告的 NativeUnifiedADData void 广点通广告加载成功回调,在该接口中需要开发者创建 List 数组,将NativeUnifiedADData循环放到ADSuyiNativeAdInfo对象中,并调用 ADSuyiNativeAdListener onAdReceive 回调,用于提示开发者广告获取成功。
... - ... 其它接口回调逻辑请参考适配器demo ... ...

NativeAdInfo 信息流模版广告内容对象,需要继承 BaseAdInfo,其中E为渠道的信息流模版广告对象,并实现 ADSuyiNativeFeedAdInfo、NativeADEventListener、NativeADMediaListener 接口

接口 参数说明 返回值 作用 是否必须实现 说明
isNativeExpress - boolean 是否为模版广告 请直接返回false
isVideo - boolean 是否为带视频的原生自渲染广告 渠道的信息流原生自渲染广告对象如果有相应接口,可以在该方法中进行调用
setVideoListener - void 设置信息原生自渲染广告带视频情况时的监听回调 有需求的话可以进行设置
registerViewForInteraction ViewGroup viewGroup:需要传入广告容器
View... views:传递可点击的view
void xxx -
getTitle - String 获取广告标题 渠道的信息流原生自渲染广告对象如果有相应接口,可以在该方法中进行调用
getDesc - String 获取广告内容 渠道的信息流原生自渲染广告对象如果有相应接口,可以在该方法中进行调用
getActionType - String 获取广告类型 渠道的信息流原生自渲染广告对象如果有相应接口,可以在该方法中进行调用
getCtaText - String 获取广告行动按钮文案 渠道的信息流原生自渲染广告对象如果有相应接口,可以在该方法中进行调用
getIconUrl - String 获取广告icon图标 渠道的信息流原生自渲染广告对象如果有相应接口,可以在该方法中进行调用
getImageUrl - String 获取广告大图 渠道的信息流原生自渲染广告对象如果有相应接口,可以在该方法中进行调用
getImageUrlList - List 获取广告大图数组 渠道的信息流原生自渲染广告对象如果有相应接口,可以在该方法中进行
hasMediaView - String 是否包含视频控件 渠道的信息流原生自渲染广告对象如果有相应接口,可以在该方法中进行调用
isVideo - View 是否为包含视频广告 渠道的信息流原生自渲染广告对象如果有相应接口,可以在该方法中进行调用
getMediaView ViewGroup container View 获取广告视频视图 一般自渲染广告都会有写好的视频控件,如果没有请在isVideo中返回false

results matching ""

    No results matching ""