# Android自定义平台适配器 **Repository Path**: jianlailing/Android-custom-platform-adapter ## Basic Information - **Project Name**: Android自定义平台适配器 - **Description**: No description available - **Primary Language**: Java - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1 - **Created**: 2022-01-12 - **Last Updated**: 2022-05-24 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ## Android自定义平台适配器对接文档 [TOC] ## 1. 概述 尊敬的开发者,欢迎您使用ADmobile 苏伊士广告SDK自定义适配广告平台。通过本文档,您可以在几分钟之内轻松完成自定义广告平台对接过程。 操作系统及要求:使用Android Studio;Android4.1及以上(minSdkVersion 16及以上)主要按所适配渠道最低版本要求; 自定义适配器平台支持广告类型:开屏,横幅,插屏,全屏视频,激励视频,信息流等; ## 2. 添加SDK到工程中 ### 2.1 添加仓库地址 首先需要在项目的build.gradle文件中引入如下配置: ```java allprojects { repositories { ... google() jcenter() mavenCentral() // 添加以下仓库地址 maven { url "https://maven.admobile.top/repository/maven-releases/" } } } ``` ### 2.2 添加ADSuyiSdk和需要的AdapterSdk到主项目中 ```java // 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核心库和必要的库到你所适配的核心库中 ```java 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运营同学**协助添加;需谨记在运营后台添加的广告平台名称字段,该字段在自定义适配器开发时需要用到且必须与后台所填一致,否则会有广告加载异常问题;在后台添加新平台时需要添加该三方平台的申请的`AppId`和`AppKey`,该参数用于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为所适配广告平台的别名。 ```java 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参数进行修改 | `ADSuyiPlatform`、`ADSuyiInitConfig`、`ADSuyiSdk`方法说明 | 对象 | 方法 | 返回值 | 说明 | | ---------------- | ---------------------- | ------- | ------------------------------------------------------------ | | 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方法内部具体实现 ```java /** * 加载开屏广告 * @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
@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方法内部具体实现 ```java /** * 加载横幅广告 * @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
@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方法内部具体实现 ```java /** * 加载插屏广告 * @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
@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方法内部具体实现 ```java /** * 加载激励视频广告 * @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
@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方法内部具体实现 ```java /** * 加载全屏视频广告 * @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
@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方法内部具体实现 ```java /** * 加载信息流广告 * @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
@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
@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 |