此文档为游戏媒体接入广告的参考文档,应用开发者请勿使用!
| SDK版本 | v2.7.0 |
| aar文件MD5值 | 9bc5b46548dd5310ae4f2f19e250401c |
| 包名 | com.xiaomi.ad.mediation |
一、更新记录
| 日期 | 版本号 | 更新内容 |
| 2026年3月30日 | 2.7.0 | 1、激励视频样式增加提前领奖励提醒能力 2、增加气泡交互效果 3、应用内开屏广告增加icon预算 4、激励广告样式button文案优化 5、广告api重构,加载广告的入参及个别方法名有调整 6、新增了依赖项,用于引入SDK必需的新插件 |
| 2025年11月3日 | 2.6.0 | 1.优化了部分广告样式的交互体验 2.更新了作为预算源的三方SDK 3.更新了接入文档中配置和依赖的相关内容 |
| 2025年9月10日 | 2.5.0 | 1. 新增动效能力,支持万向滑等交互; 2. 新增小游戏试玩广告,丰富预算类型; 3. 新增应用内竖版开屏广告样式; 4. 模板广告新增支持回调广告主信息。 |
| 2025年8月4日 | 2.4.1 | 1.新增激励广告样式,触达更多预算类型; 2.新增插屏16:9/9:16样式,精准适配预算需求; 3.支持广告负反馈收集能力; 4.更新部分预算源的SDK; 5.修复原生模版样式优选展示异常问题。 |
| 2025年3月27日 | 2.3.2 | 1.修复2.3.0版本因权限冲突导致的兼容性问题; 2.修复banner已知问题。 |
| 2025年1月9日 | 2.3.0 | 1.更新部分预算源的SDK; 2.横幅(窄版)丰富预算源; 3.原生广告支持模版优选; 4.已知问题修复。 注意:若已接入2.3.0版本需在 AndroidManifest.xml 中添加 remove 标签移除com.xiaomi.ad.mediation.mediation.PERMISSION_DO_SOMETHING权限,否则会导致游戏安装失败,示例见:四、接入步骤-第一步。 |
| 2024年10月24日 | 2.2.2 | 1.隐私适配优化; 2.更新部分预算源的SDK; 3.已知问题修复。 |
| 2024年10月10日 | 2.2.1 | 1.更新部分预算源的SDK; 2.已知问题修复。 |
| 2024年9月3日 | 2.2.0 | 1.更新部分预算源的SDK; 2.全屏视频插屏(横版)、激励视频-横版、应用内横版开屏丰富预算源; 3.优化横幅(banner)广告自动刷新时的曝光回调; 4优化SDK初始化成功回调; 5.已知问题修复。 |
| 2024年7月10日 | 2.1.0 | 1.丰富原生模板预算源; 2.已知问题修复。 |
| 2024年5月6日 | 2.0.0 | 1.丰富预算源; 2.聚合策略能力优化; 3.已知问题修复。 |
| 2023年12月19日 | 1.9.2 | 1.视频广告支持“边下边播”能力 ; 2.模版类广告扩展预算 ; 3.提供“一键诊断”工具 ; 4.适配米盟广告SDK(应用)v5.3.0。需在build.gradle添加 packageingOptions 配置(详见接入文档)。 |
| 2023年11月03日 | 1.9.1 | 更新了米盟SDK(如AGP版本较低(<3.6.0)请在build.gradle添加 packageingOptions 配置,详见接入文档)。 |
| 2023年09月25日 | 1.9.0 | 更新了优量汇SDK(需在AndroidManifest.xml增加优量汇配置,详见接入文档)增加onetrack依赖(需在build.gradle中增加配置,详见接入文档第三步新增依赖)。 |
| 2023年09月04日 | 1.8.9 | 更新了穿山甲SDK(需在AndroidManifest.xml增加穿山甲配置,详见接入文档)移除了MIMOAdSdkConfig中的setStaging方法。 |
| 2023年08月15日 | 1.8.8 | 新增:MMFeedAd 增加六要素 -- getIntroductionUrl() 方法(获取应用介绍)。 |
二、功能目标
米盟聚合广告SDK集成米盟等多家广告SDK功能,便利开发者集成,提供各种广告形式给客户端,提高广告填充率。
三、zip包说明
开发者在ssp后台下载新版本聚合SDK时,会得到包含下列文件的zip包,请参照下列指引使用zip包(根目录)中的文件:
1、mimo-mediation-sample-release.apk:广告demo,可以用于查看各类型广告展示效果。
2、mimo_sdk.aar:正式广告SDK,上线前请接入此SDK,接入前必须先接入联运SDK。
3、MediationSDK-open-client:广告demo工程,可用于测试广告或用于参考如何接入、使用广告SDK;其中广告SDK放在工程的libs目录下,该SDK仅限用于上线前测试时使用,且该SDK不需要接入联运SDK就可以调试广告。
注意:开发者上线前,集成时请接入zip包中根目录下的mimo_sdk.aar 包
四、接入步骤
聚合SDK 2.7.0版本对接入文档中的配置和依赖相关内容进行了更新,请仔细阅读,按照文档要求和示例完成接入。
第一步:配置AndroidManifest.xml SDK需要的权限列表
//必要权限配置
<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" /><!-- 权限会用在下载类广告安装应用时使用 -->
<permission
android:name="${applicationId}.openadsdk.permission.TT_PANGOLIN"
android:protectionLevel="signature" />
<uses-permission android:name="${applicationId}.openadsdk.permission.TT_PANGOLIN" /><!--穿山甲必要权限,解决安全风险漏洞,发送和注册广播事件需要调用带有传递权限的接口-->
//以下2个权限为非必要权限,可不申请
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />注:2.3.0版本需在 AndroidManifest.xml 中添加 remove 标签移除com.xiaomi.ad.mediation.mediation.PERMISSION_DO_SOMETHING权限,否则会导致游戏安装失败,具体如下:
//2.3.0版本必须要去除该自定义权限
<permission
android:name="com.xiaomi.ad.mediation.mediation.PERMISSION_DO_SOMETHING"
tools:node="remove" />第二步:SDK需要的provider和网络配置声明
1、添加米盟 provider
在 res/xml/下添加如下1个配置文件:mimo_file_paths.xml, 注:不要修改文件名称,可参考demo。
<?xml version="1.0" encoding="utf-8"?>
<paths>
<external-path path="mimoDownload" name="files_root" />
<external-path path="." name="external_storage_root" />
</paths>在AndroidManifest.xml添加如下provider节点,可以参考demo
<manifest>
<application>
<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/mimo_file_paths" />
</provider>
</application>
</manifest>2、添加穿山甲provider
在 res/xml/下添加如下1个配置文件:file_paths.xml, 注:不要修改文件名称,可参考demo。
<?xml version="1.0" encoding="utf-8"?>
<paths>
<external-path name="tt_external_root" path="." />
<external-path name="tt_external_download" path="Download" />
<external-files-path name="tt_external_files_download" path="Download" />
<files-path name="tt_internal_file_download" path="Download" />
<cache-path name="tt_internal_cache_download" path="Download" />
<!--为了适配所有路径可以设置 path = "." -->
</paths>在AndroidManifest.xml添加如下provider节点,可以参考demo(1.9.1版本需移除以下配置,否则可能崩溃)
<manifest>
<application>
<provider
android:name="com.bytedance.sdk.openadsdk.TTFileProvider"
android:authorities="${applicationId}.TTFileProvider"
android:exported="false"
android:grantUriPermissions="true">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/file_paths" />
</provider>
<provider
android:name="com.bytedance.sdk.openadsdk.multipro.TTMultiProvider"
android:authorities="${applicationId}.TTMultiProvider"
android:exported="false" />
</application>
</manifest>3、添加优量汇provider
在 res/xml/下添加如下1个配置文件:gdt_file_path.xml, 注:不要修改文件名称,可参考demo
<?xml version="1.0" encoding="utf-8"?>
<paths>
<!-- 这个下载路径也不可以修改,必须为GDTDOWNLOAD -->
<external-cache-path
name="gdt_sdk_download_path1"
path="com_qq_e_download" />
<cache-path
name="gdt_sdk_download_path2"
path="com_qq_e_download" />
</paths>在AndroidManifest.xml添加如下provider节点,可以参考demo(1.9.1版本需移除以下配置,否则可能崩溃)
<manifest>
<application>
<provider
android:name="com.qq.e.comm.GDTFileProvider"
android:authorities="${applicationId}.gdt.fileprovider"
android:exported="false"
android:grantUriPermissions="true">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/gdt_file_path" />
</provider>
</application>
</manifest>4、添加HTTP支持(不添加可能导致广告资源下载失败)
在 res/xml/下添加如下1个配置文件:network_security_config.xml,可参考demo
<?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中application标签添加android:networkSecurityConfig、android:usesCleartextTraffic属性
如下:(如不配置可能导致一些http资源下载失败)
<application
android:name=".MMApplication"
android:allowBackup="false"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme"
android:networkSecurityConfig="@xml/network_security_config"
android:usesCleartextTraffic="true"
tools:ignore="GoogleAppIndexingWarning"
tools:replace="android:allowBackup">
</application>第三步:build.gradle配置
ndk过滤:
ndk { // 设置支持的 SO 库构架,注意这里要根据你的实际情况来设置
abiFilters armeabi-v7a , arm64-v8a
}Java8配置:
compileOptions { sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}关闭so压缩(1.9.1版本及以上可选)
如果运行后出现如下崩溃,请在build.gradle添加 packageingOptions 配置:
java.lang.UnsatisfiedLinkError: dlopen failed: empty/missing DT_HASH/DT_GNU_HASH in
"/data/app/~~d-MvjvQe56StSJP3MLJEag==/com.xiaomi.ad.mediation.demo.mi-uPkaSzKDLWRqoKvlXCNxgQ==/lib/arm64/libijiami_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.mimo.sdk.utils.TaskRunner.runOnMainThread(TaskRunner.java:1)
at com.miui.zeus.mimo.sdk.MimoSdk.init(MimoSdk.java:2)
at com.xiaomi.ad.mediation.sdk.f00.a(InitSdkHolder.java:29)
at com.xiaomi.ad.mediation.mimonew.MiMoNewSdk.init(MiMoNewSdk.java:16)1.9.2版本及以上
android {
packagingOptions {
doNotStrip "*/*/libmimo_1011.so"
doNotStrip "*/*/libzeusLib.so"
}
}1.9.1版本及以下
android {
packagingOptions {
doNotStrip "*/*/libijiami_1011.so"
doNotStrip "*/*/libzeusLib.so"
}
}依赖:
/*使用本地 AAR 方式集成 SDK,需要在模块的 build.gradle 中添加扁平目录仓库,
让 Gradle 可以从指定文件夹加载本地 AAR/JAR 包*/
repositories {
flatDir {
dirs 'libs' // 本地 AAR/JAR 存放目录
}
}
dependencies {
/* 引用新米盟sdk mimo_sdk*/
implementation(name: 'mimo_sdk', ext: 'aar')
//注意:以下6个库必须要引入***
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'
implementation 'com.squareup.okhttp3:okhttp:3.12.1'
}新增依赖(1.9.0版本及以上)
在根目录的build.gradle文件中增加:
allprojects {
repositories {
google()
jcenter()
/* onetrack 远程仓库依赖 */
maven {
url "https://repos.xiaomi.com/maven"
credentials {
username 'mi-gamesdk'
password 'AKCp8mYeLuhuaGj6bK1XK7t2w4CsPuGwg6GpQdZ9cat7K59y5sD7Tx3dHjJcFrBGj3TQ4vi7g'
}
}
}
}1、添加onetrack版本依赖
dependencies {
/* 依赖onetrack*/
implementation "com.xiaomi.gamecenter.sdk:onetrack-sdk:2.1.2"
}注:如果有依赖联运SDK,onetrack版本需要保持一致,最低不要小于2.0.4版本
2、在根目录的build.gradle文件中增加:
buildscript {
repositories {
maven {
url "https://repos.xiaomi.com/maven"
credentials {
username 'mi-gamesdk'
password 'AKCp8mYeLuhuaGj6bK1XK7t2w4CsPuGwg6GpQdZ9cat7K59y5sD7Tx3dHjJcFrBGj3TQ4vi7g'
}
}
}
dependencies {
/**
* 请查看您项目使用的AGP版本:
* 如果您的项目使用的AGP版本小于8.0,请使用:classpath 'com.xiaomi.ad.mediation.plugin.gradle7:mimo-process:1.0.0'
* 如果您的项目使用的AGP版本大于等于8.0,请使用:classpath 'com.xiaomi.ad.mediation.plugin.gradle:mimo-process:1.0.0'
*/
classpath 'com.xiaomi.ad.mediation.plugin.gradle7:mimo-process:1.0.0'
}
}
allprojects {
repositories {
google()
jcenter()
/* onetrack 远程仓库依赖 */
maven {
url "https://repos.xiaomi.com/maven"
credentials {
username 'mi-gamesdk'
password 'AKCp8mYeLuhuaGj6bK1XK7t2w4CsPuGwg6GpQdZ9cat7K59y5sD7Tx3dHjJcFrBGj3TQ4vi7g'
}
}
}
}3、使用插件:sync同步后,请在“com.android.application”模块的build.gradle中使用mimo-process插件:
apply plugin: 'com.android.application'
// 使用“mimo-process”插件
apply plugin: 'mimo-process'注意:
1、添加依赖后,请先使用sync同步;再apply plugin: 'mimo-process';
2、使用mimo-process插件请务必在“com.android.application”模块使用,否则编译会报错;
3、SDK接入完成后,编译并启动应用,过滤logcat中日志“tag:AdReporter”,如果应用能正常启动,且日志中出现“AdReporter#init success”,则表示mimo-process插件接入成功。
AdReporter I AdReporter#init success第四步:初始化SDK
/**
*
* @param Context 上下文
* @param AppId 米盟appid
* @param AppName 应用名称
* @param MIMOAdSdkConfig 米盟sdk环境配置,线上: setDebugLog(fasle) setStaging(false)
* @param IMediationConfigInitListener 初始化结果回调,onSuccesson表示成功(只有成功才能后续请求广告)Failed表示失败
*/
MiMoNewSdk.init(getApplicationContext(), appId, appName,
new MIMOAdSdkConfig.Builder()
.setDebug(true) // debug 为true , 关闭debug:false
.build(), new IMediationConfigInitListener() {
@Override
public void onSuccess() {
MLog.d(TAG, "mediation config init success");
}
@Override
public void onFailed(int errorCode) {
MLog.d(TAG, "mediation config init failed");
}
});注:2.2.0以下版本初始化完成后如果立即请求广告,需要延迟至少500ms
注:1.8.9及以上已删除 setStaging 方法。请确保在有网络时初始化聚合SDK
第五步:不同广告类型输入
注意:聚合SDK 2.7.0版本对广告api进行了优化重构,加载广告的入参和部分方法名有调整,请仔细阅读示例代码并参照接入。
Banner集成
1、请求Banner广告
api重构,移除了入参:adConfig.imageWidth、adConfig.imageHeight
/**
* @param activity banner广告的Activity
* @param mContainer banner广告的container
* @param upid 广告位id
*/
public void loadAd(Activity activity, ViewGroup container, String upId) {
container.removeAllViews();//清空容器view,供sdk填充广告MMAdConfig adConfig = new MMAdConfig();
adConfig.supportDeeplink = true; // 期望的广告是否支持deeplink
/**
* 设置的容器宽高不能超过屏幕,设置的view宽高不能超过容器
* 推荐设置: 320*50dp, 如果有遮挡问题 可以尝试 360*54 300*45 等比例,可参照demo
* view宽高比:6.4:1(不可以大于该比例),用于控制广告大小,单位dp,建议和容器宽高值保持一致
*/
adConfig.viewWidth = 320;
adConfig.viewHeight = 50;
adConfig.setBannerContainer(container);// banner广告的container 建议 宽横向充满, 高度自适应或按照平台勾选的比例设置容器宽高
adConfig.setBannerActivity(activity); // banner广告所在的Activity
mAdBanner = new MMAdBanner(activity, upid);
mAdBanner.onCreate(); //必须调用 用于统计和广告位创建
mAdBanner.load(adConfig, new MMAdBanner.BannerAdListener() {
@Override
public void onBannerAdLoaded(List<MMBannerAd> list) {
if (list != null && list.size() > 0) {
mBannerAd = list.get(0);
}
}
@Override
public void onBannerAdLoadError(MMAdError error) {
//加载失败
}
});
}2、展示广告
private void showAd() {
if (mBannerAd == null) {
return;
}
mBannerAd.show(new MMBannerAd.AdBannerActionListener() {
@Override
public void onAdShow() {
//广告展示
}
@Override
public void onAdClicked() {
//广告被点击
}
@Override
public void onAdDismissed() {
//广告消失
}
@Override
public void onAdRenderFail(int code, String msg) {
//广告渲染失败
}
});
}3、销毁Banner广告
在不再需要广告时,销毁广告
注意:240以下版本,如果在click回调直接销毁,需至少延迟200ms销毁
@Override
public void onDestroy() {
if (mBannerAd != null) {
mBannerAd.destroy();
}
}激励视频集成
1、 请求激励视频广告
api重构,移除了入参:adConfig.imageWidth、adConfig.imageHeight、adConfig.viewWidth、 adConfig.viewHeight、adConfig.rewardCount
public void load(Activity activity, String upId) {
MMAdConfig adConfig = new MMAdConfig();
adConfig.supportDeeplink = true;
adConfig.setRewardVideoActivity(activity);
MMAdRewardVideo rewardVideo = new MMAdRewardVideo(activity, upId);
rewardVideo.onCreate(); //必须调用,用于统计
rewardVideo.load(adConfig, new MMAdRewardVideo.RewardVideoAdListener() {
@Override
public void onRewardVideoAdLoaded(MMRewardVideoAd mmRewardVideoAd) {
if (mmRewardVideoAd != null) {
rewardVideoAd = mmRewardVideoAd;
} else {
Log.e(TAG, "广告请求成功,但无填充");
}
}
@Override
public void onRewardVideoAdLoadError(MMAdError mmAdError) {
Log.e(TAG, "广告加载失败" + mmAdError.toString());
}
});
}2、显示激励视频广告
在请求广告成功后,可以显示激励视频广告。
⚠️注意,激励视频样式新增小游戏试玩广告预算,若要进行接入,需先联系商务或运营,获取接入建议并开通权限,再进行代码接入。
public void showAd(Activity activity){
if (rewardVideoAd == null){
return;
}
rewardVideoAd.setInteractionListener(new MMRewardVideoAd.RewardVideoAdInteractionListener() {
@Override
public void onAdShown(MMRewardVideoAd mmRewardVideoAd) {
//广告展示
}
@Override
public void onAdClicked(MMRewardVideoAd mmRewardVideoAd) {
//广告已点击
}
@Override
public void onAdError(MMRewardVideoAd mmRewardVideoAd, MMAdError mmAdError) {
//广告展示出现错误
}
@Override
public void onAdVideoComplete(MMRewardVideoAd mmRewardVideoAd) {
//广告视频播放完成
}
@Override
public void onAdClosed(MMRewardVideoAd mmRewardVideoAd) {
//广告关闭
}
@Override
public void onAdReward(MMRewardVideoAd mmRewardVideoAd, MMAdReward mmAdReward) {
//广告奖励回调
}
@Override
public void onAdVideoSkipped(MMRewardVideoAd mmRewardVideoAd) {
//广告跳过
}
});
rewardVideoAd.showAd(activity);
}注意:Demo代码仅供参考,集成时请注意生命周期安全处理。
激励广告集成
激励广告集成和激励视频集成的调用方式保持一致,仅需替换广告位id。新增的激励广告样式,最低支持版本为聚合SDK 2.4.1。
插屏集成
1、请求广告
api重构,移除了入参:adConfig.imageWidth、adConfig.imageHeight、adConfig.viewWidth、 adConfig.viewHeight;移除了参数:isHorizontal
/**
* @param activity 当前Activity的上下文
* @param upId 广告位id
*/
public void loadAd(Activity activity, String upId) {
MMAdConfig adConfig = new MMAdConfig();
adConfig.supportDeeplink = true;
adConfig.setInsertActivity(activity);
MMAdFullScreenInterstitial interstitial = new MMAdFullScreenInterstitial(activity, upId);
interstitial.onCreate(); //必须调用
interstitial.load(adConfig, new MMAdFullScreenInterstitial.FullScreenInterstitialAdListener() {
@Override
public void onFullScreenInterstitialAdLoaded(MMFullScreenInterstitialAd mmFullScreenInterstitialAd) {
if (mmFullScreenInterstitialAd != null) {
fullScreenInterstitialAd = mmFullScreenInterstitialAd;
} else {
Log.e(TAG, "加载广告失败,无广告填充");
}
}
@Override
public void onFullScreenInterstitialAdLoadError(MMAdError mmAdError) {
Log.e(TAG, "加载广告失败, " + mmAdError.toString());
}
});
}2、展示广告
private void showAd(Activity activity){
if (fullScreenInterstitialAd == null) {
return;
}
fullScreenInterstitialAd.setInteractionListener(new MMFullScreenInterstitialAd.FullScreenInterstitialAdInteractionListener() {
@Override
public void onAdShown(MMFullScreenInterstitialAd mmFullScreenInterstitialAd) {
//广告展示
}
@Override
public void onAdClicked(MMFullScreenInterstitialAd mmFullScreenInterstitialAd) {
//广告被点击
}
@Override
public void onAdVideoComplete(MMFullScreenInterstitialAd mmFullScreenInterstitialAd) {
//视频播放完成
}
@Override
public void onAdClosed(MMFullScreenInterstitialAd mmFullScreenInterstitialAd) {
//广告关闭
}
@Override
public void onAdVideoSkipped(MMFullScreenInterstitialAd mmFullScreenInterstitialAd) {
//广告跳过
}
@Override
public void onAdRenderFail(MMFullScreenInterstitialAd mmFullScreenInterstitialAd, int code, String message) {
//广告渲染失败
}
});
fullScreenInterstitialAd.showAd(activity);
}注意:Demo代码仅供参考,集成时请注意生命周期安全处理。
3、销毁广告
在合适的时机销毁广告
@Override
public void onDestroy() {
super.onDestroy();
if (fullScreenInterstitialAd != null) {
fullScreenInterstitialAd.onDestroy();
}
}开屏集成
聚合SDK支持两种类型的开屏广告:系统开屏(仅米盟预算、仅竖版)、应用内开屏(横版+竖版)
系统开屏集成:无需代码接入,在ssp后台创建对应广告位并启用即可。
应用内开屏集成:应用内横版开屏和应用内竖版开屏,两种样式的接入方式一致,请在ssp后台创建对应样式的广告位后,参照下面的示例代码进行代码接入。
注意:
- 应用内竖版开屏为新增样式,需提前联系商务或运营开通权限后,方可创建广告位并接入。
- 应用内开屏与系统开屏不可同时启用,二者只能选择其一。
- 开屏广告为全屏展示形态,部分设备在展示过程中可能触发 Activity 生命周期变化,建议在 Activity 中接入并避免依赖 Fragment 状态。
1、请求并展示开屏广告(旧api,不推荐使用)
api重构,方法mAdSplash.load改为mAdSplash.loadAndShow,原先已接入开屏广告的开发者,升级聚合SDK 2.7.0及以上版本时,若仍按原先方法接入,需注意改写方法名。
移除了入参:adConfig.imageWidth、adConfig.imageHeight
/**
* 请求并立即展示开屏广告(不推荐)
*
* 注意:
* - 270 版本之前使用 load()
* - 270 版本及之后,该能力对应 loadAndShow()
* - 该方式后续将废弃,不建议继续接入
*/
public void load(Activity activity, ViewGroup container, String upId) {
MMAdConfig adConfig = new MMAdConfig();
adConfig.supportDeeplink = true;
adConfig.setSplashActivity(activity);
adConfig.setSplashContainer(container);
mAdSplash = new MMAdSplash(activity, upId);
mAdSplash.onCreate();//必须调用
mAdSplash.loadAndShow(adConfig, new MMAdSplash.SplashAdInteractionListener() {
@Override
public void onAdSkip() {
//点击跳过,仅优量汇广告会触发
}
@Override
public void onError(MMAdError error) {
//本次请求展示出现异常
}
@Override
public void onAdShow() {
//广告展示
}
@Override
public void onAdClicked() {
//广告点击
}
@Overrid
epublic void onAdDismissed() {
//广告消失
}
});
}注意:该方法后续将废弃,不推荐继续使用,请尽快迁移至请求+展示分离的方式。
2、请求开屏广告(推荐)
广告加载成功后,仅表示广告已准备就绪,不会立即展示,需在合适的时机调用展示方法。
api重构,移除了入参:adConfig.imageWidth、adConfig.imageHeight
public void loadSplashAd(Activity activity, ViewGroup container, String adId, int timeout) {
MMAdConfig config = new MMAdConfig();
config.setSplashActivity(activity);
config.setSplashContainer(container);
config.supportDeeplink = true;
// 设置开屏广告超时时间,仅穿山甲、优量汇横版开屏广告有效
config.splashAdTimeOut = timeout;
mAdSplash = new MMAdSplash(activity, adId);
mAdSplash.onCreate(); // 必须调用
mAdSplash.load(config, new MMAdSplash.SplashAdLoadListener() {
@Override
public void onSplashAdLoaded(List<MMSplashAd> ads) {
if (ads != null && !ads.isEmpty()) {
mCachedAd = ads.get(0); // 缓存广告,供后续展示
}
}
@Override
public void onSplashAdLoadError(MMAdError error) {
// 加载失败,可直接进入主页面
}
});
}3、展示开屏广告(推荐)
/**
* 展示开屏广告
*
* 注意:展示时使用的 Activity 和 ViewGroup
* 必须与请求广告时保持一致
*/
public void showSplashAd() {
if (mAdSplash== null) {
return;
}
mAdSplash.showAd(new MMSplashAd.SplashAdInteractionListener() {
@Override
public void onAdShow() {
// 广告展示
}
@Override
public void onAdClicked() {
// 广告点击
}
@Override
public void onAdDismissed() {
// 广告关闭,进入主页面
}
@Override
public void onError(MMAdError error) {
// 展示异常,进入主页面
}
});
mAdSplash= null; // 避免重复展示
}开屏广告仅支持单次展示,展示完成后请及时释放引用。
原生模板集成
1、请求模板广告
api重构,移除了入参:adConfig.imageWidth、adConfig.imageHeight;新增入参adConfig.viewWidth、 adConfig.viewHeight
/**
*
* @param context 上下文
* @param container 模板广告的容器
* @param upId 广告位id
* 建议设置容器宽度x:375dp<x<屏幕宽度,高度自适应,以匹配更丰富的预算
* 由于部分广告源为透明底色,请自行设置广告容器底色背景,保证广告展示清晰
*/
public void load(Context context, ViewGroup container, String upId) {
MMAdConfig adConfig = new MMAdConfig();
adConfig.viewWidth= 1080; //期望广告宽度
adConfig.viewHeight= 1920; //期望广告高度
adConfig.setTemplateContainer(container);
mAdTemplate = new MMAdTemplate(context, upId);
mAdTemplate.onCreate(); //必须调用
mAdTemplate.load(adConfig, new MMAdTemplate.TemplateAdListener() {
@Override
public void onTemplateAdLoaded(List<MMTemplateAd> list) {
if (list != null && list.size() > 0) {
templateAd =list.get(0);
} else {
Log.e(TAG, "加载广告失败,无广告填充");
}
}
@Override
public void onTemplateAdLoadError(MMAdError error) {
Log.e(TAG, "加载广告失败, " + error.toString());
}
});
}2、展示模板广告
在请求广告成功后,可以显示模板广告
api重构,移除了部分冗余的回调方法。
public void showAd(){
if (templateAd == null){
return;
}
templateAd.showAd(new MMTemplateAd.TemplateAdInteractionListener() {
@Override
public void onError(MMAdError mmAdError) {
//广告展示出现异常
}
@Override
public void onAdShow() {
//广告已展示
}
@Override
public void onAdClicked() {
//广告被点击
}
@Override
public void onAdDismissed() {
//广告关闭
}
});
}个性化推荐广告开关设置
1、打开个性化推荐广告开关
MiMoNewSdk.setPersonalizedAdEnabled(true);2、关闭个性化推荐广告开关
MiMoNewSdk.setPersonalizedAdEnabled(false);混淆配置
# keep mediation sdk
-keep class com.xiaomi.ad.mediation.** { *; }
# keep mimo sdk
-keepclasscom.miui.zeus.** { *; }广告主信息获取
广告加载成功后,可在 onAdLoaded 回调中通过 getMediaExtraInfo() 获取广告主相关信息。
⚠️注意,若要使用该能力,需先联系商务或运营,进行权限开通之后,再进行代码接入,若未开通权限,getMediaExtraInfo() 可能返回 null。
//⽀持的广告类型(包括插屏、banner、激励视频、原生模板)
mAdBanner.load(adConfig, new MMAdBanner.BannerAdListener() {
@Override
public void onBannerAdLoaded(List<MMBannerAd> list) {
if (list == null || list.isEmpty()) {
return;
}
MMBannerAd bannerAd = list.get(0);
Map<String, Object> extraInfo = bannerAd.getMediaExtraInfo();
if (extraInfo == null) {
// 未获取到广告主信息
return;
}
String appName = String.valueOf(extraInfo.get("appName"));
String packageName = String.valueOf(extraInfo.get("packageName"));
String buttonName = String.valueOf(extraInfo.get("buttonName"));
Log.d("AdInfo", "appName=" + appName
+ ", packageName=" + packageName
+ ", buttonName=" + buttonName);
}
@Override
public void onBannerAdLoadError(MMAdError error) {
// 广告加载失败
}
});错误码列表
注:以下说明中仅包含客户端错误码说明及对应调优建议,请开发者前往小米移动广告联盟平台-填充率诊断模块查看服务端错误码说明及对应调优建议(填充率诊断功能操作指南)
开发者请先根据常见错误码定位问题,如以下内容无法涵盖开发者疑问,可以通过工单系统咨询
| code | 含义 | 备注 |
| -100 | 没有请求到广告 | 检查后台配置是否正确 |
| -200 | 请求超时 | 检查网络 |
| -300 | 请求广告错误 | 建议过滤errorMessage排查 |
| -400 | 传入的appId和广告位id不一致,导致无法找到广告位id信息 | - |
| -500 | 没有传入TagId广告位信息 | 请传入TagId进行请求 |
| -600 | 没有设置图片尺寸 | 需要设置尺寸,参照demo |
| -700 | 没有设置该广告形式的Adapter,请参考初始化相关文档 | - |
| -800 | 通用错误 | 米盟广告SDK不支持此广告类型 |
| -900 | SDK未初始化完成就请求了广告位 | - |
| -1000 | 创建第三方DSP Loader失败 | - |
| -2000 | 显示广告失败 | 广告渲染异常 |
| -2100 | 显示的广告已过期 | - |
| -2200 | 要显示的广告已经显示过 | - |
| -9000 | SDK初始化未完成,提前加载广告 | 请在SDK初始化完成后再请求广告 |
| 3 | 解析响应的数据时出现异常 | 核查广告位是否已开启,开启后预计生效时长约为15分钟 |
| 5 | 返回广告的数据为空 | - |
| 6 | 创建连接时出现异常 | - |
| 101 | 返回广告数据中的广告信息为空 | - |
| -1300 | 获取到的容器为空 | - |
| -1400 | 获取到的activity为空 | - |
五、一键诊断工具
为了方便开发者可以快速定位广告接入中碰到的问题,您可以尝试使用sdk提供的快速测试工具
步骤如下:
1、初始化打开debug开关
2、重启App, 开始广告加载流程
3、通过adb发生广播:adb shell am broadcast -a com.xiaomi.ad.mimo.diagnosis
4、logcat过滤“Mimo-Diagnosis"查看即可看到分析报告