# AdProf demo for Android
**Repository Path**: adprof_sdk/adprofdemo
## Basic Information
- **Project Name**: AdProf demo for Android
- **Description**: adprof android adsdk demo source codes
- **Primary Language**: Java
- **License**: Apache-2.0
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2025-10-20
- **Last Updated**: 2026-03-13
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# Adprof SDK-Android接入文档
**注意:**
- 本 SDK 最低兼容 `Android API 21(Android 5.0)`
- 竞胜竞败回传:Adprof 平台根据媒体传回来的竞胜竞败价格,通过相应算法⾃动提⾼出价来获得⼴告曝光,
媒体RTB时⼀定要调⽤,否则会导致价格出不上去。
- 媒体接入信通院 `oaid-sdk`,在初始化的时通过CustomController里面的getOaid()传入获取到的oaid,若媒体没有传入则Adprof SDK内部会尝试自动获取
- 官网后台:https://www.bestadprof.com
## 一、导入SDK依赖
**1.1、压缩包目录结构**
| 文件目录 | 目录说明 |
| ------------------- | ------------------------------------------------------ |
| libs/***.aar | 项⽬中依赖的aar⽂件 和 各聚合adapter aar |
| adprofdemo | ⽤来⽅便媒体参考接⼊,示例⼯程, |
| adprof_demo-release.apk | 用来演示广告提供的多种广告展现形式. |
| README.md | Adprof SDK-Android接入文档. |
**1.2、导入SDK文件**
1.2.1、在 app 目录下新建 libs 文件夹.
1.2.2、将工程libs目录下aar文件拷贝实际项目的libs文件夹下.
1.2.3、在 app/build.gradle 添加如下代码:
```groovy
repositories {
flatDir {
dirs 'libs'
}
}
dependencies {
// 非常重要,adprof-sdk中 使用了kotlin代码,媒体务必要依赖 kotlin 否则运行时会崩
implementation 'org.jetbrains.kotlin:kotlin-stdlib:1.7.10'
implementation(name: 'adprof-sdk-x.x.x', ext: 'aar')
}
```
**1.3、AndroidManifest配置**
添加访问权限:在AndroidManifest.xml文件中添加,建议在您的隐私协议中向开发者声明Adprof SDK会获取下述权限并应用于广告投放
```xml
```
注意:Adprof SDK不强制获取可选权限,即使没有获取可选权限SDK也能正常运行
**1.4、混淆配置**
为了保证Adprof SDK正常⼯作, 请务必添加以下ProGuard配置打包.
```java
# Adprof混淆
-dontwarn com.adprof.sdk.**
-keep class com.adprof.sdk.** {*;}
-keep interface com.adprof.**{ *;}
```
---
## 二、SDK初始化
**2.1、代码实现**
~~~java
// 个性化广告开关设置
AdprofSdk.getInstance().setPersonalRecommend(true);
AdprofSdk.getInstance().init(this, new AdprofSdkConfig.Builder()
.appId("") //必填
.appSecret("") // 必填
.userId("") // 用户ID,有就填, 非必须
.useHttps(true) // 是否使用 https 发起广告请求
.showLog(false) // 是否展示adsdk内部日志,正式环境务必为false
.addCustomData(new HashMap<>()) //自定义数据
.customController(new CustomController() { // 媒体自行控制sdk可以采集哪些
@Override
public boolean canReadLocation() {
return true;
}
@Override
public boolean canUsePhoneState() {
return true;
}
@Override
public boolean canUseAndroidId() {
return true;
}
@Override
public boolean canUseWifiState() {
return true;
}
// 为SDK提供oaid
// 移动安全联盟官⽹http://www.msa-alliance.cn/
// 信通院统⼀SDK下载 http://msa-alliance.cn/col.jsp?id=120
@Override
public String getOaid() {
return "";
}
})
.setInitCallback(new InitCallback() {
// 初始化成功回调,初始化成功后才可以加载广告
@Override
public void onSuccess() {
Log.d(ConstantsDemo.LOG_TAG, "init---onSuccess---");
}
// 初始化失败回调
@Override
public void onFail(int code, String msg) {
Log.d(ConstantsDemo.LOG_TAG, "init---onFail---" + code + ":" + msg);
}
}).build());
~~~
**2.1、 初始化相关类说明**
***2.1.1 AdprofSdkConfig***
> com.adprof.sdk.api.AdprofSdkConfig.Builder
| 方法名 | 方法介绍 |
| --------------------------------------------- | -------------------------------------------------------- |
| appId(String appId) | 必须,每个应用单独一个appid |
| appSecret(String secret) | 必须,秘钥 |
| showLog(boolean isLog) | sdk是否开启debug日志打印信息,默认开启。 |
| userId(String userId) | 用户Id(非必填) |
| useHttps(boolean https) | 媒体控制 广告请求 是否使用 https |
| addCustomData(Map customData) | 初始化传入的自定义数据。 |
| customController(CustomController custom) | 设置自定义设备信息,具体可参考下方CustomController实体类 |
| setInitCallback(InitCallback callBack) | 初始化回调通知,具体可参考InitCallback实体类 |
***2.1.2 CustomController***
> com.adprof.sdk.api.CustomController
| 方法名 | 方法介绍 |
| ------------------ | ------------------------------------------------------------ |
| canReadLocation() | 是否可以读取设备位置信息 |
| getLocation() | 如果不能获取地理位置,APP内部有获取位置信息,可在该方法回传 |
| canUsePhoneState() | 是否可以获取设备IMEI等信息。 |
| canUseAndroidId() | 是否可以获取设备AndroidID |
| getImei() | 如果 canUsePhoneState为false,在Android低版本系统中获取到的Imei进行回传 |
| getMacAddress() | 回传MacAddrerss信息 |
| canUseWifiState() | 是否可以获取设备WIFI状态等信息。 |
| String getOaid() | 传入通过信通院的OAID库获取到的oaid值 |
***2.1.3 InitCallback***
> com.adprof.sdk.api.InitCallback
| 方法名 | 方法介绍 |
| --------------------------------- | ----------------- |
| void onSuccess() | sdk初始化成功回调 |
| void onFail(int code, String msg) | sdk初始化失败回调 |
**2.2、 个性化广告设置(可选)**
```java
AdprofSdk.getInstance().setPersonalRecommend(boolean personal);
```
## 三、插屏广告
**3.1 插屏广告加载**
```java
AdRequest adRequest = new AdRequest.Builder()
.setCodeId(codeId)
.setBidFloor(1)
.setExtOption(options)
.build();
mInterstitialAd = new InterstitialAd(adRequest, listener);
mInterstitialAd.loadAd();
```
**3.2 插屏广告展示**
```java
if (interstitialAd != null && interstitialAd.isReady()) {
interstitialAd.showAd( activity );
}
```
**3.3 InterstitialAdListener回调**
InterstitialAdListener listener = new InterstitialAdListener() {
@Override
public void onInterstitialAdLoadError(AdError error) { }
@Override
public void onInterstitialAdLoadSuccess() {
}
@Override
public void onInterstitialAdLoadCached() {
}
@Override
public void onInterstitialAdShow() {
}
@Override
public void onInterstitialAdPlayEnd() {
}
@Override
public void onInterstitialAdClick() {
}
@Override
public void onInterstitialAdClosed() {
}
@Override
public void onInterstitialAdShowError(AdError error) {
}
};
**3.4 插屏广告销毁**
```java
if (interstitialAd != null) {
interstitialAd.destroyAd();
interstitialAd = null;
}
```
**3.5 插屏API介绍**
***3.5.1 InterstitialAd***
> com.adprof.sdk.api.InterstitialAd
| 方法名 | 方法介绍 |
| ------------------------------------------------------------ | ------------------------------------------------------------ |
| InterstitialAd(AdRequest adRequest, InterstitialAdListener adListener) | 构造方法。参数说明:request(广告请求对象)、adListener(广告状态回调监听) |
| loadAd() | 拉取广告 |
| isReady() | 广告是否准备好,未准备好广告将无法展示 |
| showAd(Activity activity) | 展示广告。参数说明:activity(展示广告的 activity) |
| destroyAd() | 销毁广告 |
***3.5.2 AdRequest***
> com.adprof.sdk.api.AdRequest.Builder
| 方法名 | 方法介绍 |
| --------------------------------------- | ----------------------------------------------------- |
| setCodeId(String codeid) | 设置广告位ID |
| setBidFloor(int bidFloor) | 设置 底价,单位 分 |
| setExtOption(Map option) | 设置扩展参数。参数说明:options(扩展参数,可传任意) |
***3.5.3 InterstitialAdListener***
> com.adprof.sdk.api.InterstitialAdListener
| 方法名 | 方法介绍 |
| ---------------------------------------- | ------------------------------------------------------------ |
| onInterstitialAdLoadSuccess() | 广告server接口请求成功 |
| onInterstitialAdLoadCached() | 广告资源缓存下载成功 |
| onInterstitialAdLoadError(AdError error) | 广告加载失败。参数说明:error(报错信息,具体可看其内部code和message) |
| onInterstitialAdShow () | 广告展示 |
| onInterstitialAdShowError(AdError error) | 广告播放出错。参数说明:error(报错信息,具体可看其内部code和message) |
| onInterstitialAdPlayEnd() | 广告播放结束 |
| onInterstitialAdClick() | 广告被点击 |
| onInterstitialAdClosed() | 广告关闭 |
## 四、激励广告
**4.1 激励视频加载**
```java
AdRequest adRequest = new AdRequest.Builder()
.setCodeId(codeId)
.setBidFloor(1)
.setExtOption(options)
.build();
RewardAd mRewardAd = new RewardAd(adRequest, listener);
mRewardAd.loadAd();
```
**4.2 插屏广告展示**
```java
if (mRewardAd != null && mRewardAd.isReady()) {
mRewardAd.showAd(activity);
}
```
**4.3 RewardAdListener回调**
RewardAdListener listener = new RewardAdListener() {
@Override
public void onRewardAdLoadSuccess() {
}
@Override
public void onRewardAdLoadCached() {
}
@Override
public void onRewardAdShow() {
}
@Override
public void onRewardAdPlayStart() {
}
@Override
public void onRewardAdPlayEnd() {
}
@Override
public void onRewardAdClick() {
}
@Override
public void onRewardAdClosed() {
}
@Override
public void onRewardAdLoadError(AdError error) {
}
@Override
public void onRewardAdShowError(AdError error) {
}
@Override
public void onRewardVerify() {
}
@Override
public void onAdSkip() {
}
});
**4.4 激励视频广告销毁**
```java
if (mRewardAd != null) {
mRewardAd.destroyAd();
mRewardAd = null;
}
```
**4.5 激励视频API介绍**
***4.5.1 RewardAd***
> com.adprof.sdk.api.RewardAd
| 方法名 | 方法介绍 |
| :--------------------------------------------------------- | ------------------------------------------------------------ |
| RewardAd(AdRequest adRequest, RewardAdListener adListener) | 构造方法。参数说明:request(广告请求对象)、adListener(广告状态回调监听) |
| loadAd() | 拉取广告 |
| isReady() | 广告是否准备好,未准备好广告将无法展示。 |
| showAd(Activity activity) | 展示广告。参数说明:activity(展示广告的 activity)。 |
| destroyAd() | 销毁广告 |
***4.5.2 AdRequest***
> com.adprof.sdk.api.AdRequest.Builder
| 方法名 | 方法介绍 |
| --------------------------------------- | ----------------------------------------------------- |
| setCodeId(String codeid) | 设置广告位ID |
| setExtOption(Map option) | 设置扩展参数。参数说明:options(扩展参数,可传任意) |
***4.5.3 RewardAdListener***
> com.adprof.sdk.api.RewardAdListener
| 方法名 | 方法介绍 |
| ---------------------------------- | ------------------------------------------------------------ |
| onRewardAdLoadSuccess() | 广告server接口请求成功 |
| onRewardAdLoadCached() | 广告资源缓存下载成功可以展示 |
| onRewardAdLoadError(AdError error) | 广告加载失败。参数说明:error(报错信息,具体可看其内部code和message) |
| onRewardAdShow () | 广告展示 |
| onRewardAdShowError(AdError error) | 广告播放出错。参数说明:error(报错信息,具体可看其内部code和message) |
| onRewardAdPlayStart() | 广告播放开始 |
| onRewardAdPlayEnd() | 广告播放结束 |
| onRewardVerify() | 成功获得奖励 |
| onRewardAdClick() | 广告被点击 |
| onRewardAdClosed() | 广告关闭 |
| onAdSkip() | 点击广告跳过 |
## 五、开屏广告
**5.1 开屏广告加载**
```java
AdRequest adRequest = new AdRequest.Builder()
.setCodeId(ConstantsDemo.SPLASH_SLOTID) // 广告位ID
.setExtOption(new HashMap()) // 透传 自定义数据
.build();
splashAd = new SplashAd(adRequest, mSplashAdListener, 5 * 1000);
splashAd.loadAd();
```
**5.2 开屏广告展示**
```java
// 展示前 先判断 是否ready
if (splashAd != null && splashAd.isReady()) {
splashAd.showAd(splashLY);
}
```
**5.3 SplashAdListener回调**
```java
private final SplashAdListener mSplashAdListener = new SplashAdListener() {
@Override
public void onAdLoadSuccess() {
Log.d(ConstantsDemo.LOG_TAG, "--LoadSuc:" + splashAd.isReady() + " " + splashAd.getBidPrice());
}
@Override
public void onAdCacheSuccess() {
Log.d(ConstantsDemo.LOG_TAG, "----------onAdCacheSuccess-----" + splashAd.isReady());
}
@Override
public void onSplashAdLoadFail(AdError error) {
Log.d(ConstantsDemo.LOG_TAG, "----------onSplashAdLoadFail----------" + error.toString());
gotoMainActivity();
}
@Override
public void onSplashAdShow() {
Log.d(ConstantsDemo.LOG_TAG, "----------onSplashAdShow----------");
}
@Override
public void onSplashAdShowError(AdError error) {
Log.d(ConstantsDemo.LOG_TAG, "-----onSplashAdShowError----------" + error.toString());
gotoMainActivity();
}
@Override
public void onSplashAdClick() {
Log.d(ConstantsDemo.LOG_TAG, "----onSplashAdClick----------");
}
@Override
public void onSplashAdClose(boolean isSkip) {
Log.d(ConstantsDemo.LOG_TAG, "----------onSplashAdClose---------" + isSkip);
gotoMainActivity();
}
};
```
**5.4. 开屏API介绍**
***5.4.1 SplashAd***
> com.adprof.sdk.api.SplashAd
| 方法名 | 方法介绍 |
| ------------------------------------------------------------ | ------------------------------------------------------------ |
| SplashAd(AdRequest adRequest, SplashAdListener adListener) | 构造方法,广告相关状态会通过 adListener 通知开发者。参数说明:adRequest(广告请求对象)、adListener(广告状态监听器)。 |
| SplashAd(AdRequest adRequest, SplashAdListener adListener, long timeout) | adRequest 设置codeId, adListener 加载及交互监听,timeout 加载超时时间 |
| void loadAd() | 请求广告。 |
| boolean isReady() | 广告是否准备好,未准备好广告将无法展示 |
| void showAd(ViewGroup adContainer) | 展示广告。参数说明:adContainer(展示广告的容器不可为null) |
| void destroyAd() | 当广告关闭不再使用时,必须调用此方法释放资源 |
***5.4.2 AdRequest***
> com.adprof.sdk.api.AdRequest.Builder
| 方法名 | 方法介绍 |
| --------------------------------------- | ----------------------------------------------------- |
| setCodeId(String codeid) | 设置广告位ID | |
| setExtOption(Map option) | 设置扩展参数。参数说明:options(扩展参数,可传任意) |
***5.4.3 SplashAdListener***
> com.adprof.sdk.api.SplashAdListener
| 方法名 | 方法介绍 |
| --------------------------------------- | --------------------------------------------------- |
| void onSplashAdLoadSuccess() | 数据广告成功加载 |
| void onAdCacheSuccess() | 广告物料下载缓存成功 |
| void onSplashAdLoadFail(AdError error) | 广告加载失败 |
| void onSplashAdShow() | 曝光回调 |
| void onSplashAdClick() | 点击回调 |
| void onSplashAdShowError(AdError error) | 广告展示失败 |
| void onSplashAdClose(boolean isSkip) | 广告关闭,isSkip标记点击跳过还是倒计时走完触发Close |
**5.5 开屏广告销毁**
```java
// 界面销毁时,执行销毁Ad接口
if (splashAd != null) {
splashAd.destroyAd();
splashAd = null;
}
```
## 六、信息流广告
**6.1 信息流加载**
```java
AdRequest adRequest = new AdRequest.Builder()
.setCodeId(codeId)
.setIsExpressAd(true) // true 模版渲染 false自渲染
.build();
nativeAd = new NativeAd(adRequest, nativeAdLoadListener);
nativeAd.loadAd();
```
**6.2 信息流展示**
***6.2.1 信息流自渲染:***
```java
NativeAdData nativeAdData = currentAdDataList.get(0);
通过 NativeAdData 获取对应素材地址,Title,AppInfo下载六要素等信息
注册绑定:bindViewForInteraction(view,clickViews,nativeAdEventListener)
具体可参考NativeDemoRender
```
***6.2.2 信息流模板:***
```java
NativeAdData nativeAdData = currentAdDataList.get(0);
View feedView = nativeAdData.getFeedView();
adContainer.addView(data.getFeedView());
nativeAdData.setNativeAdEventListener(listener);
nativeAdData.setNativeAdMediaListener(nativeAdMediaListener);
```
**6.3 NativeAdLoadListener 回调**
```java
NativeAdLoadListener loadListener = new NativeAdLoadListener() {
@Override
public void onAdError( AdError error) {
Log.d(ConstantsDemo.LOG_TAG, "----onAdError----------:" + error.toString());
}
@Override
public void onAdLoad( List adDataList) {
if (adDataList != null && !adDataList.isEmpty()) {
currentAdDataList = adDataList;
}
}
}
```
**6.4 信息流广告销毁**
```java
if (nativeAd != null) {
nativeAd.destroyAd();
nativeAd = null;
}
```
**6.5 原生API介绍**
***6.5 .1 NativeAd***
> com.adprof.sdk.api.NativeAd
| 方法名 | 方法介绍 |
| ------------------------------------------------------------ | ------------------------------------------------------------ |
| NativeAd(AdRequest adRequest, NativeAdLoadListener adListener) | 构造方法。参数说明:adRequest(广告请求对象)、adListener(广告状态回调对象) |
| void loadAd() | 请求广告 |
| void destroyAd() | 销毁广告。 |
***6.5 .2 AdRequest***
> com.adprof.sdk.api.AdRequest.Builder
| 方法名 | 方法介绍 |
| --------------------------------------- | ----------------------------------------------------- |
| setCodeId(String codeid) | 设置广告位ID |
| setIsExpressAd(boolean express) | 设置 是否是 模版广告,默认是模版,传false代表是自渲染广告 |
| setExtOption(Map option) | 设置扩展参数。参数说明:options(扩展参数,可传任意) |
***6.5 .3 NativeAdLoadListener***
> com.adprof.sdk.api.NativeAdLoadListener
| 方法名 | 方法介绍 |
| -------------------------------------------- | ------------------------------------------------------------ |
| void onAdLoad(List adDataList) | 广告成功加载。参数说明:adDataList(返回的广告单元对象) |
| void onAdError(AdError error) | 广告加载失败。参数说明:error(报错信息,具体可看其内部code和message) |
***6.5 .4 NativeAdData***
> com.adprof.sdk.api.NativeAdData
| 方法名 | 方法介绍 |
| ------------------------------------------------------------ | ------------------------------------------------------------ |
| String getCTAText() | 获取创意按钮文案 |
| String getTitle() | 获取广告的Tittle |
| String getDesc() | 获取广告的描述 |
| String getAdLogo() | 获取广告的Logo |
| String getIconUrl() | 获取广告的Icon |
| List\ getImageList() | 获取广告的图片信息集合:AdprofImage对象中的宽、高、url等 |
| View getWidgetView(int width, int height) | 获取广告的互动组件View |
| int getAdPatternType() | 获取广告样式。取值范围:NativeAdPatternType.NATIVE_UNKNOWN、NativeAdPatternType.NATIVE_BIG_IMAGE_AD、NativeAdPatternType.NATIVE_VIDEO_AD、NativeAdPatternType.NATIVE_GROUP_IMAGE_AD |
| int getAdInteractiveType() | 获取广告交互类型。取值范围:NativeAdInteractiveType.NATIVE_UNKNOWN、NativeAdInteractiveType.NATIVE_BROWSER、NativeAdInteractiveType.NATIVE_DEEP_LINK、NativeAdInteractiveType.NATIVE_DOWNLOAD |
| AdAppInfo getAdAppInfo() | 获取下载类广告六要素信息,媒体可根据需要自行展示。 |
| void startVideo() | 播放视频广告 |
| void pauseVideo() | 暂停视频广告 |
| void resumeVideo() | 恢复视频广告 |
| void stopVideo() | 停止视频广告 |
| int getVideoWidth() | 获取视频广告宽 |
| int getVideoHeight() | 获取视频广告高 |
| View getFeedView() | 获取信息流模板View |
| Drawable getAdLogoDrawable() | 获取Adprof Logo |
| void destroy() | 销毁广告单元对象 |
| void bindViewForInteraction(View view, List clickableViews, NativeAdEventListener nativeAdEventListener) | 绑定广告交互的方法。参数说明:view(自渲染的根View)、clickableViews(可点击的View的列表)、nativeAdEventListener(广告交互监听回调对象) |
| void bindMediaView(ViewGroup mediaLayout, NativeAdMediaListener nativeAdMediaListener) | 绑定视频Video方法。参数说明:mediaLayout(装video的容器)、nativeADMediaListener(视频播放监听回调对象) |
| void setNativeAdEventListener(NativeAdEventListener nativeAdEventListener) | 信息流模板监听交互回调 |
| void setNativeAdMediaListener(NativeAdMediaListener nativeAdMediaListener) | 信息流模板监听视频播放状态 |
***6.5 .5 NativeAdAllEventListener***
此类是 NativeAdEventListener 的 子类
> com.adprof.sdk.api.NativeAdAllEventListener
| 方法名 | 方法介绍 |
| ---------------------------------- | ------------------------------------------------------------ |
| void onAdExposed() | 广告曝光 |
| void onAdClicked() | 广告点击 |
| void onAdRenderFail(AdError error) | 广告展示失败。参数说明:error(报错信息,具体可看其内部code和message)。 |
| void onAdClose(View view) | 广告关闭 |
***6.5 .6 NativeAdMediaListener***
> com.adprof.sdk.api.NativeAdData.NativeAdMediaListener
| 方法名 | 方法介绍 |
| -------------------------------- | ------------------------------------------------------------ |
| void onVideoLoad() | 视频加载成功 |
| void onVideoError(AdError error) | 视频播放失败。参数说明:error(报错信息,具体可看其内部code和message) |
| void onVideoStart() | 视频开始播放 |
| void onVideoPause() | 视频暂停播放 |
| void onVideoResume() | 视频恢复播放 |
| void onVideoCompleted() | 视频完成播放 |
***6.5 .7 安卓下载应用六要素信息***
> com.adprof.sdk.api.AdAppInfo
> 由于国内监管部门要求,在安卓下载类广告中,需要给用户披露下载的应用的六要素信息。开发者可以通过 `getAdAppInfo()` 方法获取。六要素信息包括
| 方法名 | 方法介绍 |
| ----------------------------- | ------------------------------------- |
| String getAppName() | 获取应用名称 |
| String getAuthorName() | 获取开发者公司名称 |
| String getPackageName() | 获取开发者应用包名 |
| int getAppSize() | 获取应用大小,单位字节 |
| String getVersionName() | 获取应用版本号 |
| Stirng getDeveloper() | 获取应用的开发者名称 |
| String getPermissionsUrl() | 获取应用权限列表 URL,以 WebView 渲染 |
| String getPrivacyUrl() | 获取应用隐私协议 URL,以 WebView 渲染 |
| String getAppDescriptionUrl() | 获取应用功能描述URL,以 WebView 渲染 |
***6.5 .8 信息流模板***
1、通过 isExpressAd() 判断是否为信息流模板,true 模板广告 false 自渲染
2、信息流模板通过 setNativeAdEventListener 和 setNativeAdMediaListener 对信息流广告交互进行监听
## 七、横幅广告
**7.1 横幅广告加载**
```java
AdRequest adRequest = new AdRequest.Builder()
.setCodeId(codeID)
.build();
mBannerAd = new BannerAd(adRequest, listener, true, true);
mBannerAd.loadAd();
```
**7.2 横幅广告展示**
```java
if (mBannerAd != null && mBannerAd.isReady()) {
View bannerView = mBannerAd.getBannerView();
if (bannerView != null) {
bannerContainer.addView(bannerView);
}
}
```
**7.3 BannerAdListener回调**
BannerAdListener listener = new BannerAdListener() {
@Override
public void onBannerAdLoadSuccess() {
}
@Override
public void onBannerAdShow() {
}
@Override
public void onBannerAdClick() {
}
@Override
public void onBannerAdClosed() {
}
@Override
public void onBannerAdLoadError(AdError error) {
}
@Override
public void onBannerAdShowError(AdError adError) {
}
};
**7.4 横幅广告销毁**
```java
if (mBannerAd != null) {
mBannerAd.destroyAd();
mBannerAd = null;
}
```
**7.5 激励视频API介绍**
***7.5.1 BannerAd***
> com.adprof.sdk.api.BannerAd
| 方法名 | 方法介绍 |
| --- | --- |
| BannerAd(AdRequest adRequest, BannerAdListener adListener),boolean showCloseButton, boolean autoRefreshEnabled | 构造方法。参数说明:request(广告请求对象)、adListener(广告状态回调监听)、是否展示关闭按钮、是否自动刷新 |
| loadAd() | 拉取广告 |
| isReady() | 广告是否准备好,未准备好广告将无法展示 |
| getBidPrice() | 获取广告价格,单位分 |
| getBannerView() | 展示时,返回广告View |
| destroyAd() | 销毁广告 |
***7.5.2 AdRequest***
> com.adprof.sdk.api.AdRequest.Builder
| 方法名 | 方法介绍 |
| --- | --- |
| setCodeId(String codeid) | 设置广告位ID |
| setBannerSize(BannerSize size) | 设置尺寸,默认 320*50 |
| setExtOption(Map option) | 设置扩展参数。参数说明:options(扩展参数,可传任意) |
***7.5.3 BannerAdListener***
> com.adprof.sdk.api.BannerAdListener
| 方法名 | 方法介绍 |
| --- | --- |
| onBannerAdLoadSuccess() | 广告server接口请求成功 |
| onBannerAdLoadError(AdError error)| 广告加载失败。参数说明:error(报错信息,具体可看其内部code和message) |
| onBannerAdShow () | 广告展示 |
| onBannerAdClick() | 广告被点击|
| onBannerAdClosed() | 广告关闭 |
## 八、错误码及常见问题
**8.1 AdprofSDK 错误码信息说明**
> 相关错误信息可参考此翻译表。
| ErrorCode | ErrorMessage | 备注 |
| --------- | ------------------------------------- | ---------------------------------------------------- |
| 100 | sdk未初始化 | 发起广告请求时未初始化sdk |
| 101 | sdk初始化失败 | SDK初始化失败,请查看初始化失败回调信息 |
|102 | 广告位ID为空 | 发起广告请求时,广告位ID为必传参数 |
| 103 | 广告加载超时 | SDK请求广告超时,请检查网络环境 |
| 104 | 广告正在加载中,请稍后再加载 | 同一个广告对象正在加载中,还没有结果,又发起广告请求 |
| 105 | 下发广告请求出错 | 广告请求出错,具体请查看错误信息里面的message |
| 106 | 网络异常 | 当前设备网络异常,请检查设备网络连接 |
| 107 | 广告资源文件下载错误 | 广告资源文件下载失败 |
| 108 | 内部错误,请联系运营或技术人员 | 内部错误,如遇此报错联系技术支持。 |
| 109 | server下发的广告缺失关键信息 | server下发的广告内容缺失关键信息 |
| 110 | 广告播放出错 | 广告展示异常,具体内容请查看回调中的错误信息 |
| 111 | 广告视频播放出错 | 广告视频播放失败,具体内容请查看回调中的错误信息 |
| 112 | 广告未ready | 广告未ready,当前没有ready的广告可以展示 |
| 113 | 广告容器不能为null | 展示广告的容器不能为null |
| 114 | 广告容器只允许为ViewGroup类型 | 展示广告容器只允许为ViewGroup类型。 |
| 115 | 广告Activity不能为null | 展示广告的Activity不能为null |
| 116 | 广告容器展示异常 | 容器不可见或者容器展示面积过小 |
| 117 | 程序异常 | 报错 |
| 118 | 请求失败 | 广告请求失败,请检查网络是否连接 |
| 119 | 不满足频控 | 不满足每日请求展示限制 |
| 120 | 无广告填充 | 正常报错,该次请求无广告填充 |
**8.2 targetSdkVersion 28以上 可以发送http请求**
```xml
network_security_config.xml 文件配置
```
**8.3 系统installProvider失败或者开启MultiDex导致的Not find Class**
> 参考链接
```
android {
buildTypes {
release {
multiDexKeepProguard file('multidex-config.pro')
...
}
}
}
```
**8.4 Demo运行问题**
如果demo 运行不起来,检查Gradle JDK 版本
**8.5 AndroidX与Android support 冲突**
> 在项目根目录下文件gradle.properties,添加以下代码
```
android.enableJetifier=true
android.useAndroidX=true
```
## 九、竞价回传
**竞胜回传:**
```java
Map map = new HashMap<>();
map.put(IBiddingNotify.WIN_FIRST_PRICE, winPrice); // 竞胜出价,值类型为Integer
map.put(IBiddingNotify.WIN_HIGHEST_LOSS_PRICE, secondPrice); // 最大竞败方出价,值类型为Integer
AdprofBaseAd.sendWinNotify(map); // 各类型对象都是AdprofBaseAd 类型: BannerAd、InterstitialAd、RewardAd、SplashAd、NativeAd
```
**竞败回传:**
```java
Map map = new HashMap<>();
map.put(IBiddingNotify.LOSS_FIRST_PRICE, winPrice); // 竞败时,其他家ADN胜出的价格,值类型为Integer
map.put(IBiddingNotify.LOSS_REASON, IBiddingNotify.AdLoseType); // 竞败原因,值参考 IBiddingNotify.AdLoseType
AdprofBaseAd.sendLossNotify(map);
```
## 十、Taku 自定义广告 接入文档
Topon(Taku)自定义广告接入地址:https://help.takuad.com/docs/4M5AIa
adprof adapter 源码地址:
https://gitee.com/adprof_sdk/AdprofSDKAdapter/tree/main/taku
查看adapter日志 过滤 tag : AdprofAdapter
**自定义广告源adapter 类名路径**
| 广告类型 | 广告类路径名称 |
| -------- | ---------------------------------------------------- |
| 初始化 | com.taku.adprofadapter.AdprofInitNetwork |
| 开屏 | com.taku.adprofadapter.AdprofSplashAdapter |
| 插屏 | com.taku.adprofadapter.AdprofInterstitialAdapter |
| 激励视频 | com.taku.adprofadapter.AdprofRewardAdapter |
| 原生 | com.taku.adprofadapter.AdprofNativeAdapter |
| 横幅 | com.taku.adprofadapter.AdprofBannerAdapter |
### 步骤1:添加自定义网络
***
***
### 步骤2:应用管理--->APP添加关联广告平台
《应用管理》--->《选择应用》---->《关联广告平台》
```java
配置参数: app_id app_secret
```
### 步骤3:添加Adprof广告位
《聚合管理》--->《选择应用》---->《选择广告位》--->《添加广告源》
### 步骤4:设置底价
### 步骤5:设置信息流自渲染
### 步骤6:代码工程添加 依赖
工程代码中放入adprof_taku_adapter_x.x.x.aar和 adprof-sdk-x.x.x.aar 文件及配置依赖AAR依赖即可,AAR文件在libs/文件夹下,版本以该文件夹下的版本为准
## 十一、Tobid 自定义广告 接入文档
[Tobid自定义广告接入文档地址: ]: https://doc.sigmob.com/ToBid使用指南/高级功能说明/自定义广告网络/
**自定义适配器aar文件,添加:adprof_tobid_adapter_xxx.aar文件**
**自定义广告源adapter参数**
| 广告类型 | 广告类名称 |
| -------- | --------------------------------------------------- |
| 初始化 | com.tobid.adprofadapter.AdprofInitNetwork |
| 开屏 | com.tobid.adprofadapter.AdprofSplashAdapter |
| 插屏 | com.tobid.adprofadapter.AdprofInterstitialAdapter |
| 激励视频 | com.tobid.adprofadapter.AdprofRewardAdapter |
| 原生 | com.tobid.adprofadapter.AdprofNativeAdapter |
| 横幅 | com.tobid.adprofadapter.AdprofBannerAdapter |
如果使用源代码形式;可下载参考Tobid适配器源码:***[源码地址](https://gitee.com/adprof_sdk/AdprofSDKAdapter/tree/main/tobid)***
https://gitee.com/adprof_sdk/AdprofSDKAdapter/tree/main/tobid
### 步骤1:添加自定义网络
《聚合管理》--->《广告网络》--->《管理自定义广告网络》--->《自定义广告网络》
### 步骤2:应用管理--->APP添加关联广告平台
《聚合管理》--->《广告网络》--->《广告网络账号》
《聚合管理》--->《流量管理》--->《应用管理》
```java
配置参数: app_id app_secret
```
### 步骤3:添加Adprof广告位
《聚合管理》--->《瀑布流管理》--->《选择某一个聚合广告位》--->《添加广告源》--->《选择Adprof》
### 步骤4:信息流自渲染 配置
### 步骤5:代码工程添加 依赖
工程代码中放入 adprof_tobid_adapter_xxx.aar 和 adprof-sdk-xxx-release.aar 文件及配置依赖AAR依赖即可,AAR文件在libs/文件夹下
## 十二、Gromore 自定义广告接入文档
**自定义适配器aar文件,添加:adprof_gromore_adapter_xxx.aar文件**
如果想源码形式依赖,可下载[***自定义源码:***](https://gitee.com/adprof_sdk/AdprofSDKAdapter)自行修改内容
https://gitee.com/adprof_sdk/AdprofSDKAdapter
**自定义广告源adapter参数**
| 广告类型 | 广告类名称 |
| -------- | ---------------------------------------------- |
| 初始化 | com.gromore.adprofadapter.AdprofInitNetwork |
| 开屏 | com.gromore.adprofadapter.AdprofSplashAdapter |
| 插屏 | com.gromore.adprofadapter.AdprofInterstitialAdapter |
| 激励视频 | com.gromore.adprofadapter.AdprofRewardAdapter |
| 原生 | com.gromore.adprofadapter.AdprofNativeAdapter |
| 横幅 | com.gromore.adprofadapter.AdprofBannerAdapter |
### 步骤1:添加自定义网络
### 步骤2:添加Adprof广告位
《瀑布流管理》--->《选择应用》---->《选择广告位》--->《添加代码位》
### 步骤3:代码工程添加 依赖
工程代码中放入adprof-gromore-adapter-xxx.aar和 adprof-sdk-xxx.aar 文件及配置依赖AAR依赖即可
### 步骤4:bidding价格回传
注意:Gromore IMediationAdSlot 的 isBidNotify 设置为true,竞败时候回传价格都为-1,为无效竞价回传,会影响Adprof 的出价和填充,需要通过Adprof 封装的工具类 AdprofBiddingUtil进行价格回传
***开屏回传***
```java
CSJSplashAd.SplashAdListener() {
@Override
public void onSplashAdShow(CSJSplashAd csjSplashAd) {
AdprofBiddingUtil.gmNotifyLoss(csjSplashAd);
}
```
***插屏回传***
```java
TTFullScreenVideoAd.FullScreenVideoAdInteractionListener() {
public void onAdShow() {
AdprofBiddingUtil.gmNotifyLoss(mTTFullScreenVideoAd);
}
```
***激励视频回传***
```java
TTRewardVideoAd.RewardAdInteractionListener() {
@Override
public void onAdShow() {
AdprofBiddingUtil.gmNotifyLoss(mTTRewardVideoAd);
}
```
***信息流回传***
```java
MediationExpressRenderListener() {
@Override
public void onAdShow() {
AdprofBiddingUtil.gmNotifyLoss(mTTFeedAd);
}
```
***Banner回传***
```java
this.mBannerInteractionListener = new TTNativeExpressAd.ExpressAdInteractionListener() {
@Override
public void onAdShow(View view, int i) {
AdprofBiddingUtil.gmNotifyLoss(mBannerAd);
}
```
## 十三、Mediatom自定义广告接入文档
**自定义适配器aar文件,添加:adprof_mediatom_adapter_xxx.aar文件**
如果想源码形式依赖,可下载[***自定义源码:***](https://gitee.com/adprof_sdk/AdprofSDKAdapter/tree/main/mediatom)自行修改内容
https://gitee.com/adprof_sdk/AdprofSDKAdapter/tree/main/mediatom
**自定义广告源adapter参数**
| 广告类型 | 广告类名称 |
| -------- | ----------------------------------------------------- |
| 开屏 | com.mediatom.adprofadapter.AdprofSplashAdapter |
| 插屏 | com.mediatom.adprofadapter.AdprofInterstitialAdapter |
| 激励视频 | com.mediatom.adprofadapter.AdprofRewardAdapter |
| 原生混合 | com.mediatom.adprofadapter.AdprofNativeAdapter |
### 步骤1:添加自定义网络
《广告管理》--->《广告主管理》--->《添加广告平台》---->《配置自定义广告类名》
### 步骤2:添加广告位
选择app--->选择广告类型---->添加Adprof 对应类型广告位json配置
```groovy
{
"app_id": "3069",
"app_secret": "bc1791487be510cfede1edef0a5257f7",
"unit_id": "31489"
}
```
### 步骤3:代码工程添加依赖
```groovy
implementation(name: 'adprof-sdk-xxx', ext: 'aar')
implementation(name: 'adprof_mediatom_adapter_xxx', ext: 'aar')
```
## 十四、 测试广告位ID
| 广告类型 | 广告ID |
| -------------- | -------- |
| AppId | 3069 |
| AppSecret |bc1791487be510cfede1edef0a5257f7 |
| 开屏ID |31488 |
| 插屏ID |31484 |
| 激励视频ID |31485 |
| 信息流自渲染ID |31531 |
| 信息流模板ID |31489 |
| 横幅ID |31487 |
## 十五、 更新日志
**v2.2.5**
1. 优化SDK出价能力
2. 信息流 支持 三图 样式
3. 适配 gromore聚合、mediatom 聚合
**v2.2.4**
1. 用户可以反馈广告问题,减少客诉
2. 角标清晰度优化
3. 广告素材展示样式优化
**v2.2.3**
1. 支持 广告位通过代码设置底价
2. 网络传输数据格式优化,速度更快
3. 合规优化
**v2.2.2**
1. 适配 tobid 聚合
2. 支持媒体控制 广告请求 是否使用 https
3. 内部打点链路优化
**v2.2.1**
1. 支持 广告格式: 开屏、插屏、激励、Banner 、信息流
2. 信息流格式广告 支持 自渲染 和 模版渲染
3. 交互方式:摇一摇、滑动、点击、扭一扭
4. 落地方式:Webview打开落地页、 Deeplink 、APP下载拉新
5. 广告合规优化
6. 适配 taku 聚合