更新记录
日期 | 版本号 | 更新内容 |
2024年10月11日 | 5.3.3 | 1. 激励视频场景,支持图片素材,丰富预算类型 2. 激励视频场景,支持打开广告浏览指定时长获取奖励机制 3. 优化激励视频场景挽留弹窗样式 4. 横竖版广告素材适配 5. 新增数据打点及其他体验问题优化 |
2024年6月19日 | 5.3.2 | 1.优化模版广告下载交互能力 2.已知问题修复 |
2024年5月7日 | 5.3.1 | 1. 丰富视频类素材预算 2. Deeplink延迟能力完善 3. 已知问题修复 |
2023年12月7日 | 5.3.0 | 1、视频广告支持“边下边播”能力 2、模版类广告扩展预算 3、提供“一键诊断”工具 4、修复已知问题 |
2023年10月30日 | 5.2.9 | 1、插屏增加大促活动样式 2、激励视频扩展预算 3、原生模版增加"悬浮球"样式 4、原生模版支持视频素材 5、修复已知问题 |
2023年9月15日 | 5.2.8 | 1、增加广告下载状态回调 2、新增客户端竞价能力 3、全屏视频类广告视频点击区域优化 4、原生模版广告样式和点击下载逻辑优化 5、Banner广告新增样式1种,并优化定时刷新逻辑 6、修复已知问题 |
2023年8月15日 | 5.2.7 | 1、删除废弃了切换环境的接口:MimoSdk.setStagingOn(boolean enable) 2、增加自渲染对象获取六要素-产品介绍的接口:getAppIntroduction() |
一、SDK介绍
米盟广告SDK (Android) 是由小米移动广告联盟官方推出,帮助开发者在MIUI系统平台上轻松实现广告变现的软件工具包。当前米盟广告SDK支持的广告形式包括:横幅Banner广告、插屏广告、激励视频广告、开屏广告、原生模板广告。
SDK 版本 | v5.3.3 |
SDK MD5值 | 4ca616590e1db677ce7ba18d2307b3d5 |
SDK 包名 | com.miui.zeus.mimo.sdk |
二、SDK工程配置
1、SDK集成
方式一:导入aar包将SDK压缩包内的mimo-ad-sdk.aar复制到 Application Module/libs 文件夹(没有的话需手动创建),并将以下代码添加到您app的build.gradle中:
repositories {
flatDir {
dirs 'libs'
}
}
dependencies {
implementation(name: 'mimo-ad-sdk', ext: 'aar')
//注意:以下5个库必须要引入
implementation 'androidx.appcompat:appcompat:1.4.1'
implementation 'androidx.recyclerview:recyclerview:1.0.0'
implementation 'com.google.code.gson:gson:2.8.5'
implementation 'com.github.bumptech.glide:glide:4.9.0'
annotationProcessor 'com.github.bumptech.glide:compiler:4.9.0'
}
方式二:maven接入
步骤一: 添加仓库
在您工程的build.gradle中,添加如下maven配置项。注意:其中credentials中的内容是米盟为开发者提供用于访问maven仓库的认证信息
allprojects {
repositories {
google()
jcenter()
//通过maven接入时,要做如下配置
maven {
url "https://repos.xiaomi.com/maven"
credentials {
username 'mimo-developer'
password 'AKCp8ih1PFG9tV8qaLyws67dLGZi8udFM39SfsHgihN15cgsiRvHuxj8JzFmuZjaViVeNawaA'
}
}
}
}
步骤二:添加依赖
在主module的build.gradle文件添加SDK依赖
implementation 'com.miui.zeus:mimo-ad-sdk:5.3.3'
//注意:以下5个库必须要引入
implementation 'androidx.appcompat:appcompat:1.4.1'
implementation 'androidx.recyclerview:recyclerview:1.0.0'
implementation 'com.google.code.gson:gson:2.8.5'
implementation 'com.github.bumptech.glide:glide:4.9.0'
annotationProcessor 'com.github.bumptech.glide:compiler:4.9.0'
2、权限列表配置
在AndroidManifest中添加如下代码:
//必要权限配置
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<!-- 权限会用在部分下载类广告安装应用时使用 -->
<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES"/>
//以下为非必要权限配置,可以不申请,当您使用的米盟SDK版本大于等于5.3.1时可以选择性添加如下权限
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<!-- 米盟提供“获取地理位置权限”和“不给予地理位置权限,开发者传入地理位置参数”两种方式上报用户位置,两种方式均可不选,无论通过何种方式提供给米盟用户地理位置,均需向用户声明地理位置权限将应用于米盟广告投放,米盟不强制获取地理位置信息-->
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<!-- 米盟将通过此权限在Android 11系统上判定广告对应的应用是否在用户的app上安装,避免投放错误的广告,以此提高用户的广告体验。若添加此权限,需要在您的用户隐私文档中声明! -->
<uses-permission android:name="android.permission.QUERY_ALL_PACKAGES"/>
注意: 以上权限,需在用户已授权的情况下获取,获取权限后进行广告请求。开发者需为终端用户提供关闭相关权限的入口。个人处理信息规则变更后,应重新征得用户同意。
3、provider配置
注意:
(1)为不影响下载类型广告使用 无论APP处于任何阶段provider
都需要在清单文件中正常配置
(2)为不影响到广告的转化及收益 请务必在清单文件中配置xxx.fileprovider
(3)${applicationId} 必须与开发者包名保持一致,否则会引发崩溃问题
如果您的应用需要在Anroid7.0及以上环境运行,请在AndroidManifest
中添加如下代码:
<provider
android:name="androidx.core.content.FileProvider"
android:authorities="${applicationId}.fileprovider"
android:exported="false"
android:grantUriPermissions="true">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/file_paths" />
</provider>
在res/xml目录下,新建一个xml文件file_paths,在该文件中添加如下代码:
<?xml version="1.0" encoding="utf-8"?>
<paths>
<external-files-path
name="files_root" path="mimoDownload" />
</paths>
4、添加HTTP支持
目前有些资源链接为http协议,为了确保在Android 9.0以上不出现广告资源下载失败的问题,建议添加此配置。
您可以在 res/xml/下添加如下1个配置文件:network_security_config.xml
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
<base-config cleartextTrafficPermitted="true" />
<debug-overrides>
<trust-anchors>
<!-- Trust user added CAs while debuggable only -->
<certificates src="system" />
<certificates src="user" />
</trust-anchors>
</debug-overrides>
</network-security-config>
在AndroidManifest.xml中
<?xml version="1.0" encoding="utf-8"?>
<manifest ... >
<application android:networkSecurityConfig="@xml/network_security_config"
... >
...
</application>
</manifest>
5、运行环境配置
本SDK可运行于Android4.4 (API Level 19) 及以上版本
如果开发者声明targetSdkVersion到API 23以上,请确保调用本SDK的任何接口前,已经申请到了SDK要求的权限。
混淆配置
如果您需要使用proguard混淆代码,需确保不要混淆SDK的代码。
在proguard-rules.pro文件下添加
-keep class com.miui.zeus.** { *; }
支持架构
注意: 5.2.4以及以上版本SDK默认支持armeabi-v7a,arm64-v8a两种架构,如果有其他架构(armeabi架构)需求,请联系技术支持同学。
您可以在应用中的build.gradle
中使用abiFilters
选择支持的架构。如下所示:
ndk { // 设置支持的 SO 库构架,注意这里要根据你的实际情况来设置
abiFilters armeabi-v7a , arm64-v8a
}
关闭so压缩(5.2.9版本及以上可选)
如果运行后出现如下崩溃,请在build.gradle添加 packageingOptions 配置:
java.lang.UnsatisfiedLinkError: dlopen failed: empty/missing DT_HASH/DT_GNU_HASH in "/data/app/~~--eXIc4cCIVmjH1S7t1pSA==/com.xiaomi.ad.mimo.demo-JIafXkutywB6QIdXtDZM6w==/lib/arm64/libmimo_1011.so" (new hash type from the future?)
at java.lang.Runtime.loadLibrary0(Runtime.java:1077)
at java.lang.Runtime.loadLibrary0(Runtime.java:998)
at java.lang.System.loadLibrary(System.java:1656)
at ijiami_1011.NCall.<clinit>(Unknown Source:2)
at ijiami_1011.NCall.IV(Native Method)
at com.miui.zeus.mimo.sdk.utils.android.AndroidUtils.<clinit>(Unknown Source:12)
at com.miui.zeus.mimo.sdk.utils.android.AndroidUtils.isMainThread(Unknown Source:0)
at com.miui.zeus.landingpage.sdk.h4.a(TaskRunner.java:1)
at com.miui.zeus.mimo.sdk.MimoSdk.init(MimoSdk.java:2)
at com.miui.zeus.landingpage.sdk.b70.a(InitSdkHolder.java:20)
at com.xiaomi.ad.mediation.mimonew.MiMoNewSdk.init(MiMoNewSdk.java:16)
at com.xiaomi.ad.mediation.demo.ui.HomeActivity.initMiMoNewSdk(HomeActivity.java:126)
at com.xiaomi.ad.mediation.demo.ui.HomeActivity.showPrivacy(HomeActivity.java:83)
at com.xiaomi.ad.mediation.demo.ui.HomeActivity.onCreate(HomeActivity.java:48)
at android.app.Activity.performCreate(Activity.java:8200)
at android.app.Activity.performCreate(Activity.java:8166)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1329)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3744)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3938)
at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:103)
at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2318)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loopOnce(Looper.java:210)
at android.os.Looper.loop(Looper.java:299)
at android.app.ActivityThread.main(ActivityThread.java:8306)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:576)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1073)
可使用在所以的module和Application的工程下都加上这个如下配置
android {
packagingOptions {
doNotStrip "*/*/libmimo_1011.so"
doNotStrip "*/*/libzeusLib.so"
}
}
注意:本SDK需要申请应用APP ID 和 广告位ID。
开发者需要前往米盟SSP,注册开发者账户,并创建应用。
6、白名单配置
如果您的工程中接入了资源混淆插件,例如:AndResGuard,为了保证SDK的资源可以被正常使用,需要在build.gradle中新增白名单配置,内容如下:
whiteList = [
"R.id.mimo*",
"R.layout.mimo*",
"R.drawable.mimo*"
]
注意:如果您的工程中未开启资源混淆,可以忽略此配置。
三、SDK初始化
注意:开发者需要在终端用户同意APP的隐私政策之后才可以调用以下代码来初始化米盟SDK。调用如下接口:
MimoSdk.init(this, new MimoSdk.InitCallback() {
@Override
public void success() {
}
@Override
public void fail(int code, String msg) {
}
});
接口说明
/**
*
* @param context application Context
* @param initCallback 初始化回调
*/
public static void init(Context context, InitCallback initCallback)
public interface InitCallback {
/**
* 初始化成功回调 注意:开发者需要在success回调之后再去请求广告
*/
void success();
/**
* @param code 初始化失败回调错误码
* @param msg 初始化失败回调信息
*/
void fail(int code, String msg);
}
回调失败错误码说明
code值 | 说明 |
4000 | 本地执行API错误导致初始化错误码 |
5000 | 传入context为null |
个性化推荐广告开关设置
注意:默认为打开个性化推荐广告开关,开发者需向终端用户提供个性化推荐广告的开关入口,根据终端用户的选择来设置个性化推荐广告。
设置个性化广告推荐
MimoSdk.setPersonalizedAdEnabled(boolean enable);//true 开启,false 关闭
日志开关设置
以下为日志开关,上线需关闭,默认均为false
MimoSdk.setDebugOn(boolean enable);
注意:开发者在接入遇到问题时,如果需要协助排查,请提供完整的系统log日志
打开debug开关,不要过滤任何关键字或任何信息!!!
打开debug开关,不要过滤任何关键字或任何信息!!!
打开debug开关,不要过滤任何关键字或任何信息!!!
四、具体广告接入方式
1、横幅Banner广告
- 创建Banner广告对象。
注意: 广告对象不要复用,复用会影响计费统计
BannerAd bannerAd = new BannerAd();
- 请求广告数据
bannerAd.loadAd(upId, new BannerAd.BannerLoadListener() {
//请求成功回调
@Override
public void onBannerAdLoadSuccess() {
}
//请求失败回调
@Override
public void onAdLoadFailed (int errorCode, String errorMsg) {
}
});
* 请求参数说明
参数 | 说明 |
upId | 米盟SSP平台创建的广告位ID |
* BannerAd.BannerLoadListener 说明
回调 | 说明 |
onBannerAdLoadSuccess | 广告数据拉取成功 |
onAdLoadFailed | 广告请求失败回调 返回的错误码(code)表示广告请求失败的原因。详细可见:附录一、错误码 |
- 展示广告
注意:需要在onBannerAdLoadSuccess回调后调用该方法
bannerAd.showAd(activity, container, new BannerAd.BannerInteractionListener() {
@Override
public void onAdClick() {
// 广告被点击
}
@Override
public void onAdShow() {
// 广告被展示
}
@Override
public void onAdDismiss() {
// 广告消失
}
@Override
public void onRenderSuccess() {
// 广告渲染成功
}
@Override
public void onRenderFail(int code, String msg) {
// 广告渲染失败
}
});
* 参数说明
说明 |
当前Activity页面的上下文 |
广告view加载的容器 |
* BannerAd.BannerInteractionListener说明
回调 | 说明 |
onAdClick | 广告被点击 |
onAdShow | 广告展示 |
onAdDismiss | 广告消失 |
onRenderSuccess | 广告渲染成功 |
onRenderFail | 广告渲染失败 code码详细可见:附录一、错误码 |
- 监听下载进度
bannerAd.setDownLoadListener(new BannerAd.BannerDownloadListener() {
@Override
public void onDownloadStarted() {
//开始下载
}
@Override
public void onDownloadProgressUpdated(int progress) {
//下载进度,例如:${progress}%
}
@Override
public void onDownloadPaused() {
//下载暂停
}
@Override
public void onDownloadCancel() {
//取消下载
}
@Override
public void onDownloadFailed(int errorCode) {
//下载失败, 若需要了解errorCode具体含义,请咨询米盟
}
@Override
public void onDownloadFinished() {
//下载结束
}
@Override
public void onInstallStart() {
//开始安装
}
@Override
public void onInstallFailed(int errorCode) {
//安装失败
}
@Override
public void onInstallSuccess() {
//安装成功
}
});
* BannerAd.BannerDownloadListener说明
回调 | 说明 |
onDownloadStarted | 开始下载 |
onDownloadProgressUpdated | 下载进度,例如:${progress}% |
onDownloadPaused | 下载暂停 |
onDownloadCancel | 取消下载 |
onDownloadFailed | 下载失败, 若需要了解errorCode具体含义,请咨询米盟 |
onDownloadFinished | 下载结束 |
onInstallStart | 开始安装 |
onInstallFailed | 安装失败, 若需要了解errorCode具体含义,请咨询米盟 |
onInstallSuccess | 安装成功 |
- 销毁广告
注意:在activity退出时,需要调用销毁广告对象的方法,否则有可能会产生内存泄露
bannerAd.destroy();
2、插屏广告
- 创建插屏广告对象。
注意: 广告对象不用复用,复用会影响计费统计
InterstitialAd interstitialAd = new InterstitialAd();
- 请求广告数据
interstitialAd.loadAd(upId, new InterstitialAd.InterstitialAdLoadListener() {
@Override
public void onAdRequestSuccess() {
//广告请求成功
}
@Override
public void onAdLoadSuccess() {
//广告加载(缓存)成功,在需要的时候在此处展示广告
}
@Override
public void onAdLoadFailed(int errorCode, String errorMsg) {
// 请求加载失败
}
});
* 请求参数说明
参数 | 说明 |
upId | 米盟SSP平台创建的广告位ID |
* InterstitialAd.InterstitialAdLoadListener说明
回调 | 说明 |
onAdRequestSuccess | 广告数据拉取成功 |
onAdLoadSuccess | 广告素材加载(缓存)成功,在需要的时候在此处展示广告 |
onAdLoadFailed | 广告请求失败回调 返回的错误码(code)表示广告请求失败的原因。详细可见:附录一、错误码 |
- 展示广告
注意:需要在onAdLoadSuccess回调后调用该方法
interstitialAd.show(activity, new InterstitialAd.InterstitialAdInteractionListener() {
@Override
public void onAdClick() {
// 广告被点击
}
@Override
public void onAdShow() {
// 广告展示
}
@Override
public void onAdClosed() {
// 广告关闭
}
@Override
public void onRenderFail(int code, String msg) {
// 广告渲染失败
}
public void onVideoStart() {
//视频开始播放
}
@Override
public void onVideoPause() {
//视频暂停
}
@Override
public void onVideoResume() {
//视频继续播放;
}
@Override
public void onVideoEnd() {
//视频播放结束;
}
});
* 参数说明
参数 | 说明 |
context | 当前Activity页面的上下文 |
* InterstitialAd.InterstitialAdInteractionListener说明
回调 | 说明 |
onAdClick | 广告被点击 |
onAdShow | 广告展示 |
onAdClosed | 广告关闭 |
onRenderFail | 广告渲染失败 code码详细可见:附录一、错误码 |
onVideoStart | 视频类广告-视频开始播放 |
onVideoPause | 视频类广告-视频暂停 |
onVideoResume | 视频类广告-视频恢复播放 |
onVideoEnd | 视频类广告-视频播放结束 |
- 监听下载进度
interstitialAd.setDownLoadListener(new InterstitialAd.InterstitialDownloadListener() {
@Override
public void onDownloadStarted() {
//开始下载
}
@Override
public void onDownloadProgressUpdated(int progress) {
//下载进度,例如:${progress}%
}
@Override
public void onDownloadPaused() {
//下载暂停
}
@Override
public void onDownloadCancel() {
//取消下载
}
@Override
public void onDownloadFailed(int errorCode) {
//下载失败, 若需要了解errorCode具体含义,请咨询米盟
}
@Override
public void onDownloadFinished() {
//下载结束
}
@Override
public void onInstallStart() {
//开始安装
}
@Override
public void onInstallFailed(int errorCode) {
//安装失败
}
@Override
public void onInstallSuccess() {
//安装成功
}
});
* InterstitialAd.InterstitialDownloadListener说明
回调 | 说明 |
onDownloadStarted | 开始下载 |
onDownloadProgressUpdated | 下载进度,例如:${progress}% |
onDownloadPaused | 下载暂停 |
onDownloadCancel | 取消下载 |
onDownloadFailed | 下载失败, 若需要了解errorCode具体含义,请咨询米盟 |
onDownloadFinished | 下载结束 |
onInstallStart | 开始安装 |
onInstallFailed | 安装失败, 若需要了解errorCode具体含义,请咨询米盟 |
onInstallSuccess | 安装成功 |
- 视频类广告设置默认静音播放
isMuted:true 静音,false 不静音。(默认值为false)
interstitialAd.setMute(isMuted)销毁广告
注意:在activity退出时,需要调用销毁广告对象的方法,否则有可能会产生内存泄露
interstitialAd.destroy();
3、激励视频广告
- 创建广告对象。
注意:广告对象不用复用,复用会影响计费统计
RewardVideoAd rewardVideoAd = new RewardVideoAd();
- 请求广告数据
rewardVideoAd.loadAd(upId, new RewardVideoAd.RewardVideoLoadListener() {
@Override
public void onAdRequestSuccess() {
//广告请求成功
}
@Override
public void onAdLoadSuccess() {
//广告加载(缓存)成功,在需要的时候在此处展示广告
}
@Override
public void onAdLoadFailed(int errorCode, String errorMsg) {
//广告加载失败
}
});
* 请求参数说明
参数 | 说明 |
upId | 米盟SSP平台创建的广告位ID |
*RewardVideoAd.RewardVideoLoadListener说明
回调 | 说明 |
onAdRequestSuccess | 广告数据拉取成功 |
onAdLoadSuccess | 广告素材加载(缓存)成功,在需要的时候在此处展示广告 |
onAdLoadFailed | 广告请求失败回调 返回的错误码(code)表示广告请求失败的原因。详细可见:附录一、错误码 |
- 展示广告
注意:需要在onAdLoadSuccess回调后调用该方法
rewardVideoAd.showAd(activity, new RewardVideoAd.RewardVideoInteractionListener (){
@Override
public void onAdPresent() {
// 广告被曝光
}
@Override
public void onAdClick() {
// 广告被点击
}
@Override
public void onAdDismissed() {
// 广告消失
}
@Override
public void onAdFailed(String message) {
// 渲染失败
}
@Override
public void onVideoStart() {
//视频开始播放
}
@Override
public void onVideoPause() {
//视频暂停
}
@Override
public void onVideoSkip() {
//跳过视频播放
}
@Override
public void onVideoComplete() {
// 视频播放完成
}
@Override
public void onPicAdEnd() {
//图片类型广告播放完成
}
@Override
public void onReward() {
//激励回调
}
});
* 参数说明
参数 | 说明 |
context | 当前Activity页面的上下文 |
* RewardVideoAd.RewardVideoInteractionListener说明
回调 | 说明 |
onAdPresent | 广告曝光 |
onAdClick | 广告被点击 |
onAdDismissed | 广告消失 |
onAdFailed | 渲染失败 |
onVideoStart | 视频开始播放 |
onVideoPause | 视频暂停 |
onVideoSkip | 视频跳过 |
onVideoComplete | 视频播放完成 |
onPicAdEnd | 图片类-播放完成 |
onReward | 激励奖励回调 |
- 监听下载进度
rewardVideoAd.setDownLoadListener(new RewardVideoAd.RewardVideoDownloadListener() {
@Override
public void onDownloadStarted() {
//开始下载
}
@Override
public void onDownloadProgressUpdated(int progress) {
//下载进度,例如:${progress}%
}
@Override
public void onDownloadPaused() {
//下载暂停
}
@Override
public void onDownloadCancel() {
//取消下载
}
@Override
public void onDownloadFailed(int errorCode) {
//下载失败, 若需要了解errorCode具体含义,请咨询米盟
}
@Override
public void onDownloadFinished() {
//下载结束
}
@Override
public void onInstallStart() {
//开始安装
}
@Override
public void onInstallFailed(int errorCode) {
//安装失败
}
@Override
public void onInstallSuccess() {
//安装成功
}
});
* RewardVideoAd.RewardVideoDownloadListener说明
回调 | 说明 |
onDownloadStarted | 开始下载 |
onDownloadProgressUpdated | 下载进度,例如:${progress}% |
onDownloadPaused | 下载暂停 |
onDownloadCancel | 取消下载 |
onDownloadFailed | 下载失败, 若需要了解errorCode具体含义,请咨询米盟 |
onDownloadFinished | 下载结束 |
onInstallStart | 开始安装 |
onInstallFailed | 安装失败, 若需要了解errorCode具体含义,请咨询米盟 |
onInstallSuccess | 安装成功 |
- 视频类广告设置默认静音播放
isMuted:true 静音,false 不静音。(默认值为false)
interstitialAd.setMute(isMuted)
- 销毁广告
注意:在页面退出时,需要调用销毁广告对象的方法,否则有可能会产生内存泄露
rewardVideoAd.destory();
4、开屏广告
注意:暂不支持SDK内竖版开屏广告类型,如您有竖版开屏的广告需求,请根据SSP后台提示启动系统开屏广告位
- 创建广告对象。
注意: 广告对象不用复用,复用会影响计费统计
SplashAd splashAd = new SplashAd();
- 请求并展示开屏广告
splashAd.loadAndShow(container, upId, new SplashAd.SplashAdListener() {
@Override
public void onAdShow() {
// 广告展示
}
@Override
public void onAdClick() {
// 广告被点击
}
@Override
public void onAdDismissed() {
// 广告消失
}
@Override
public void onAdLoadFailed(int errorCode, String errorMessage) {
// 广告加载失败
mContainer.setVisibility(View.GONE)
}
@Override
public void onAdLoaded() {
// 广告加载成功
}
@Override
public void onAdRenderFailed() {
//广告渲染失败
mContainer.setVisibility(View.GONE)
}
});
*请求参数说明
参数 | 说明 |
upId | 米盟SSP平台创建的广告位ID |
container | 广告容器View |
* SplashAd.SplashAdListener说明
回调 | 说明 |
onAdShow | 广告展示 |
onAdClick | 广告被点击 |
onAdDismissed | 广告消失 |
onAdLoadFailed | 广告请求失败回调 返回的错误码(code)表示广告请求失败的原因。详细可见:附录一、错误码 |
onAdLoaded | 广告加载成功 |
onAdRenderFailed | 广告渲染失败 |
监听下载进度
splashAd.setDownLoadListener(new SplashAd.SplashDownloadListener() {
@Override
public void onDownloadStarted() {
//开始下载
}
@Override
public void onDownloadProgressUpdated(int progress) {
//下载进度,例如:${progress}%
}
@Override
public void onDownloadPaused() {
//下载暂停
}
@Override
public void onDownloadCancel() {
//取消下载
}
@Override
public void onDownloadFailed(int errorCode) {
//下载失败, 若需要了解errorCode具体含义,请咨询米盟
}
@Override
public void onDownloadFinished() {
//下载结束
}
@Override
public void onInstallStart() {
//开始安装
}
@Override
public void onInstallFailed(int errorCode) {
//安装失败
}
@Override
public void onInstallSuccess() {
//安装成功
}
});
*SplashAd.SplashDownloadListener说明
回调 | 说明 |
onDownloadStarted | 开始下载 |
onDownloadProgressUpdated | 下载进度,例如:${progress}% |
onDownloadPaused | 下载暂停 |
onDownloadCancel | 取消下载 |
onDownloadFailed | 下载失败, 若需要了解errorCode具体含义,请咨询米盟 |
onDownloadFinished | 下载结束 |
onInstallStart | 开始安装 |
onInstallFailed | 安装失败, 若需要了解errorCode具体含义,请咨询米盟 |
onInstallSuccess | 安装成功 |
- 销毁广告
注意:在页面退出时,需要调用销毁广告对象的方法,否则有可能会产生内存泄露
splashAd.destroy();
5、原生模板广告
注意:信息流广告在V5.0.0版本起升级为原生模板广告,原信息流大图对应原生模板上图下文;原信息流小图广告对应原生模板左文右图(带标题);原信息流组图对应原生模板上文下图(组图)
- 创建广告对象。
注意: 广告对象不用复用,复用会影响计费统计
TemplateAd templateAd = new TemplateAd();
- 请求广告数据
templateAd.load(upId, new TemplateAd.TemplateAdLoadListener() {
@Override
public void onAdLoaded() {
// 加载成功, 在需要的时候在此处展示广告
}
@Override
public void onAdLoadFailed(int errorCode, String errorMessage) {
// 加载失败
}
});
*请求参数说明
参数 | 说明 |
upId | 米盟SSP平台创建的广告位ID |
*TemplateAd.TemplateAdLoadListener说明
回调 | 说明 |
onAdLoaded | 广告加载成功,在需要的时候在此处展示广告 |
onAdLoadFailed | 广告请求失败回调 返回的错误码(code)表示广告请求失败的原因。详细可见:附录一、错误码 |
- 展示广告
注意:需要在onAdLoaded回调后调用该方法
templateAd.show(container, new TemplateAd.TemplateAdInteractionListener() {
@Override
public void onAdShow() {
// 广告展示
}
@Override
public void onAdClick() {
// 广告被点击
}
@Override
public void onAdDismissed() {
// 广告消失
}
@Override
public void onAdRenderFailed(int errorCode, String errorMsg) {
// 广告渲染失败
}
});
* 参数说明
参数 | 说明 |
container | 展示广告的容器View |
*TemplateAd.TemplateAdInteractionListener说明
回调 | 说明 |
onAdShow | 广告展示 |
onAdClick | 广告被点击 |
onAdDismissed | 广告消失 |
onAdRenderFailed | 渲染失败 |
- 监听下载进度
templateAd.setDownLoadListener(new TemplateAd.TemplateDownLoadListener() {
@Override
public void onDownloadStarted() {
//开始下载
}
@Override
public void onDownloadProgressUpdated(int progress) {
//下载进度,例如:${progress}%
}
@Override
public void onDownloadPaused() {
//下载暂停
}
@Override
public void onDownloadCancel() {
//取消下载
}
@Override
public void onDownloadFailed(int errorCode) {
//下载失败, 若需要了解errorCode具体含义,请咨询米盟
}
@Override
public void onDownloadFinished() {
//下载结束
}
@Override
public void onInstallStart() {
//开始安装
}
@Override
public void onInstallFailed(int errorCode) {
//安装失败
}
@Override
public void onInstallSuccess() {
//安装成功
}
});
*TemplateAd.TemplateDownLoadListener说明
回调 | 说明 |
onDownloadStarted | 开始下载 |
onDownloadProgressUpdated | 下载进度,例如:${progress}% |
onDownloadPaused | 下载暂停 |
onDownloadCancel | 取消下载 |
onDownloadFailed | 下载失败, 若需要了解errorCode具体含义,请咨询米盟 |
onDownloadFinished | 下载结束 |
onInstallStart | 开始安装 |
onInstallFailed | 安装失败, 若需要了解errorCode具体含义,请咨询米盟 |
onInstallSuccess | 安装成功 |
- 视频类广告设置默认静音播放
isMuted:true 静音,false 不静音。(默认值为false)
interstitialAd.setMute(isMuted)
- 销毁广告
注意:在页面退出时,需要调用销毁广告对象的方法,否则有可能会产生内存泄露
templateAd.destroy();
五、竞价能力接入
1、版本接入
- 联系商务申请客户端竞价权限
- 正常对接米盟SDK, 通过SDK提供的实时价格获取能力在客户端实现比价
2、版本要求
5.2.8及以上版本
3、SDK实时价格对接说明
- 获取米盟广告价格
⽀持所有⼴告类型(包括BannerAd、InterstitialAd、 NativeAd、RewardVideoAd、SplashAd、TemplateAd对象)返回实时价格
所有⼴告对象的Map<String, Object> getMediaExtraInfo(); 获取map后,通过key value获取额 外信息。
在获取的Map信息中,存有价格等信息,取出key为“price”的整数数值, 类型为long,单位是分(CPM价格)
bannerAd.loadAd(BANNER_POS_ID, new BannerAd.BannerLoadListener() {
@Override
public void onBannerAdLoadSuccess() {
long bannerPrice = getPrice();
if (mIsBiddingWin){
//竞价成功时候上报win
Map<String, Long> auctionBidInfo = new HashMap<>();
auctionBidInfo.put(BaseAd.IBidding.EXPECT_COST_PRICE, bannerPrice);
auctionBidInfo.put(BaseAd.IBidding.HIGHEST_LOSS_PRICE, BID_WIN_HIGHEST_LOSS_PRICE);
mBannerAd.win(auctionBidInfo);
} else {
//竞价失败的时候上报loss
Map<String, Object> lossReasonInfo = new HashMap<>();
lossReasonInfo.put(BaseAd.IBidding.WIN_PRICE, BID_LOSS_WIN_PRICE);
lossReasonInfo.put(BaseAd.IBidding.LOSS_REASON, BaseAd.LossReason.TYPE_LOWER_OTHER_BIDDER_PRICE);
lossReasonInfo.put(BaseAd.IBidding.ADN_ID, 1);
mBannerAd.loss(lossReasonInfo);
}
}
@Override
public void onAdLoadFailed(int errorCode, String errorMsg) {
Log.d(TAG, "Current BannerAd Load Failed, errorCode = " + errorCode + ", errorMsg = "+ errorMsg)
}
});
private long getPrice(){
if (bannerAd == null){
return 0;
}
Map<String, Object> map = bannerAd.getMediaExtraInfo();
if (map == null || map.isEmpty()){
return 0;
}
return (long) map.get("price");
}
- 竞价接入
所有⼴告类型(包括BannerAd、InterstitialAd、 NativeAd、RewardVideoAd、SplashAd、TemplateAd对象) 广告对象新增四个接⼝,⽤来让开发者在进⾏客⼾端竞价时调⽤, 竞价成功(win )和失败结果(loss)为必传项,其他参数为⾮必传项
竞价成功时的上报接⼝(非必传),单位是分; 注意:下面两个方法,二选一即可
/**
* 竞价成功时的上报接⼝(必传),单位是分,注意:自5.3.2版本起,此方法已废弃,不建议使用
*
* @param auctionBidToWin 竞价⽅价格(强烈推荐传入竞价⽅第⼆名价格)
*/
public void win(long auctionBidToWin);
/**
* 竞价成功时的上报接⼝(选填),单位是分; 竞胜之后调用, 需要在调用广告 show 之前调
*
* @param info 竞价⽅信息,其中
* 键 IBidding.EXPECT_COST_PRICE 对应值为竞胜出价,类型为long, 单位是分
* 键 IBidding.HIGHEST_LOSS_PRICE 对应值为最大竞败方出价,类型为long, 单位是分
*/
public void win(Map<String, Object> info);
竞价失败时的上报接⼝(非必传), 注意:下面三个方法,三选一即可
/**
* 竞价失败时的上报接⼝(必传),注意:自5.3.2版本起,此方法已废弃,不建议使用
*
* @param LossReason 竞价失败的原因(不想上报原因时传null),可参考枚举值,
*/
public void loss(LossReason lossReason);
/**
* 竞价失败时的上报接⼝(必传), 媒体⾃定义回传使用此方法, 注意:自5.3.2版本起,此方法已废弃,不建议使用
*
* @param LossReason 竞价失败的原因(不想上报原因时传null),可媒体⾃定义回传
*/
public void loss(String lossReason);
/**
* 竞败之后或未参竞调用
*
* @param lossReasonInfo 竞价失败的原因(不想上报原因时传null)
* 键 IBidding.WIN_PRICE : 值为本次竞胜方出价(单位:分),类型为long, 选填
* 键 IBidding.LOSS_REASON : 值为米盟广告竞败原因,类型为String或LossReason, 选填
* 键 IBidding.ADN_ID: 值为本次竞胜方渠道ID,类型为int。选填。
* 对于【IBidding.ADN_ID】字段回传支持2个值,选填, 分别代表:
* 1 - 输给第三方ADN,当其它ADN报价为本价的最高报价时,可上报此值,您无需回传具体竞胜方渠道;
* 2 - 输给自售广告主,当自售广告源报价为本次竞价的最高报价时,可上报此值,仅对有自售广告源的开发者使用;
*/
public void loss(Map<String, Object> lossReasonInfo);
以下为米盟定义枚举值,媒体可根据⾃⾝需求⾃定义参数回传,⾃定义参数可以和技术⽀持协 商
LossReason 枚举:
枚举 | code | message |
TYPE_TIME_OUT | 1 | 超时,等待时间过长错过参竞机会 |
TYPE_CACHE_EXPIRE | 2 | 缓存广告过期 |
TYPE_LOWER_LIMIT_PRICE | 3 | 价格低于广告位底价 |
TYPE_LOWER_OTHER_BIDDER_PRICE | 4 | 价格低于其他bidder |
TYPE_HIT_BLACKLIST | 5 | 广告物料等命中黑名单逻辑 |
TYPE_NO_PARTICIPATE | 6 | 未参与竞价 |
TYPE_OTHER | 100 | 其它原因, lossReason (开发调用 loss方法传入的字符串) |
开发者传⼊本次实际结算价(需要在show前调⽤),如果是米盟广告可回传米盟返回的出价,建议按照实际情况回传,单位是分 (非必传)
/**
* *
* * 开发者传⼊本次实际结算价(需要在show前调⽤),如果是米盟广告可回传米盟返回的出价,建议按照实际情况回传,单位是分(强烈推荐)
*
* @param auctionPrice 开发者传⼊本次实际结算价(不想传递价格传null)
*/
public void setPrice(long auctionPrice);
六、错误码
code | 含义 | 备注 |
-1 | 网络错误 | 检查网络连接或者查看是否设置了代理。 |
1 | 广告请求成功,无广告填充 | 没有合适的广告返回而导致的请求没有填充,偶现属于正常情况 |
3 | 广告解析失败 | 重新发起广告请求 |
5 | 返回广告的数据为空 | 重新发起广告请求 |
6 | 链接建立超时或失败 | 检查网络并重新发起广告请求 |
101 | 解析数据没有ad | 需要重新请求广告 |
1001 | sdk未进行初始化 | 保证在广告请求之前SDK初始化完成 |
1002 | sdk初始化失败 | 开发者重点检查下发或者设置的应用ID或者代码位ID,保证应用ID与代码位ID匹配,且传入的正确。保证在广告请求之前SDK初始化完成,且应用ID设置正确。 |
2001 | 广告加载失败 | 需要重新请求广告 |
2002 | 广告渲染异常 | 检查广告位的渲染方式与请求信息是否一致 |
2003 | 广告渲染失败 | 广告渲染必须在加载广告加载成功之后 |
2006 | 广告加载失败 | 广告数据异常,广告描述信息全为空 |
2007 | 广告加载失败 | 视频类广告视频地址为空 |
2008 | 广告加载失败 | 图片类广告图片地址为空 |
2009 | 广告加载失败 | 图片地址和视频地址为空 |
2010 | 广告加载失败 | 图片资源地址为空 |
3000 | 广告素材下载失败 | 需要重新请求广告 |
3001 | 广告渲染失败 | 需要重新请求广告 |
3008 | 请求原生模版广告出现异常 | 请确认当前广告位配置是否为原生模版广告,并检查sdkAdDetail或h5Template字段内容 |
4000 | 初始化时出现异常 | 开发者重点检查下发或者设置的应用ID或者代码位ID,保证应用ID与代码位ID匹配,且传入的正确。保证在广告请求之前SDK初始化完成,且应用ID设置正确。 |
4001 | 请求横版开屏失败 | 检查是否为横屏应用 |
5000 | sdk初始化后配置的context为空 | 可检测sdk初始化后context参数是有否配置 |
9000 | 传入的Context为空 | 检查Context组件是否为空 |
9001 | 传入的Container为空 | 检查Container组件是否为空 |
9002 | 传入的Activity为空 | 检查Activity组件是否为空 |
300001 | 广告位不存在 | 请确认广告位是否是开启状态 |
300002 | 广告位在米盟SSP被暂停 | 开发者关闭了广告位 |
300003 | upId不存在 | |
300004 | 广告位被加入黑名单 | 通常是因为有作弊嫌疑,请联系米盟解决 |
300005 | 应用在米盟SSP被暂停 | 开发者暂停了应用下所有广告位 |
300006 | 应用被加入黑名单 | 通常是因为有作弊嫌疑,请联系米盟解决 |
300007 | 应用不存在 | 确认广告位的应用信息是否正确 |
300009 | 应用未上架 | |
100401 | 被联盟投放限制过滤 | 根据开发者在SSP后台设置的屏蔽策略屏蔽广告 |
100402 | 请求包名与注册包名不一致 | 请求包名与注册包名不一致将不返回广告 |
101101 | 广告位内部解析错误 内部错误, | 请联系米盟解决 |
101102 | 内部错误 | 请联系米盟解决 |
101103 | 内部错误 | 请联系米盟解决 |
101104 | 内部错误 | 请联系米盟解决 |
300215 | 频控限制 | 更换调试设备解决 |
300216 | 请联系米盟解决 | 如果在开发测试阶段,可尝试更换测试设备解决;如无法解决,请联系米盟 |
300217 | 请联系米盟解决 | 请联系米盟解决 |
300218 | 请联系米盟解决 | 请联系米盟解决 |
300220 | 请联系米盟解决 | 请联系米盟解决 |
300221 | 请联系米盟解决 | 请联系米盟解决 |
300222 | 请联系米盟解决 | 请联系米盟解决 |
300223 | 请联系米盟解决 | 请联系米盟解决 |
300224 | 请联系米盟解决 | 请联系米盟解决 |
300225 | 请联系米盟解决 | 请联系米盟解决 |
300226 | 请联系米盟解决 | 请联系米盟解决 |
300227 | 请联系米盟解决 | 请联系米盟解决 |
300228 | 请联系米盟解决 | 请联系米盟解决 |
300255 | 请联系米盟解决 | 请联系米盟解决 |
300418 | 请求限流 | 请联系米盟解决 |
300419 | 流量异常、无广告填充 | 当前流量存在异常,无法填充广告,请自查 |
300601 | 请求过于频繁,触发平台填充限制 | 建议减少无效的重复请求或者适当减少瀑布流层级(建议同时请求的广告位ID在5个以内) |
300441 | 当前SDK版本过低,请及时升级 | 建议尽快升级至5.2.9及以上版本 |
300701 | 流量异常 | 当前流量存在异常,无法填充广告,请自查 |
300702 | 流量异常 | 当前流量存在异常,无法填充广告,请自查 |
300702 | 流量异常 | 当前流量存在异常,无法填充广告,请自查) |
七、一键诊断工具
为了方便开发者可以快速定位广告接入中碰到的问题,您可以尝试使用sdk提供的快速测试工具
步骤如下:
- 初始化打开debug开关
- 重启App, 开始广告加载流程
- 通过adb发生广播:adb shell am broadcast -a com.xiaomi.ad.mimo.diagnosis
- logcat过滤“Mimo-Diagnosis"查看即可看到分析报告