搜索
推广与变现
游戏联运
广告联盟
应用联运
推广与变现/广告联盟/操作指南/广告接入/米盟广告SDK接入文档(应用)
米盟广告SDK接入文档(应用)更新时间: 2024-10-17 11:26:00

更新记录

日期版本号更新内容
2024年10月11日5.3.31. 激励视频场景,支持图片素材,丰富预算类型
2. 激励视频场景,支持打开广告浏览指定时长获取奖励机制
3. 优化激励视频场景挽留弹窗样式
4. 横竖版广告素材适配
5. 新增数据打点及其他体验问题优化
2024年6月19日5.3.21.优化模版广告下载交互能力
2.已知问题修复
2024年5月7日5.3.11. 丰富视频类素材预算
2. Deeplink延迟能力完善
3. 已知问题修复
2023年12月7日5.3.01、视频广告支持“边下边播”能力
2、模版类广告扩展预算
3、提供“一键诊断”工具
4、修复已知问题
2023年10月30日5.2.91、插屏增加大促活动样式
2、激励视频扩展预算
3、原生模版增加"悬浮球"样式
4、原生模版支持视频素材
5、修复已知问题
2023年9月15日5.2.81、增加广告下载状态回调
2、新增客户端竞价能力
3、全屏视频类广告视频点击区域优化
4、原生模版广告样式和点击下载逻辑优化
5、Banner广告新增样式1种,并优化定时刷新逻辑
6、修复已知问题
2023年8月15日5.2.71、删除废弃了切换环境的接口: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'
}
}
}
}

步骤二:添加依赖
在主modulebuild.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需要重新请求广告
1001sdk未进行初始化保证在广告请求之前SDK初始化完成
1002sdk初始化失败开发者重点检查下发或者设置的应用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请求横版开屏失败检查是否为横屏应用
5000sdk初始化后配置的context为空可检测sdk初始化后context参数是有否配置
9000传入的Context为空检查Context组件是否为空
9001传入的Container为空检查Container组件是否为空
9002传入的Activity为空检查Activity组件是否为空
300001广告位不存在请确认广告位是否是开启状态
300002广告位在米盟SSP被暂停开发者关闭了广告位
300003upId不存在
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提供的快速测试工具

步骤如下:

  1. 初始化打开debug开关
  2. 重启App, 开始广告加载流程
  3. 通过adb发生广播:adb shell am broadcast -a com.xiaomi.ad.mimo.diagnosis
  4. logcat过滤“Mimo-Diagnosis"查看即可看到分析报告

上一篇:
下一篇: