# 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 |