主题
快速开始
文档版本 v1.2.0
本页对应 SDK 1.2.0,与离线包 docs/ 目录里的同一份文档内容一致。其他版本见文档中心。
跑通第一个广告的最短路径。每一步的完整说明在《引入依赖》《初始化》及各广告位文档里, 这一页只留必需动作。
接入前需要拿到的东西
| 项 | 从哪来 | 能进 APK |
|---|---|---|
| AppID | 平台运营,后台「应用管理」创建应用时生成 | 能 |
| App 密钥 | 平台运营,后台「应用管理 → 接入」抽屉 | 需要进 |
| 广告位标识列表 | 平台运营,后台「广告位管理」,形如 splash_main / reward_main / banner_main | 能,写在业务代码里 |
各广告平台的应用 ID 与广告位 ID 不需要接入方提供,由配置服务下发,SDK 侧没有本地写入口。 运营改价格、调顺序、开关广告位、甚至停用一整家广告平台,接入方都不用发版。
申请 Banner 广告位时必须说清尺寸规格
运营要按这个规格在广告平台后台建广告位。尺寸不符直接报 40006 广告位ID不合法, 错误信息看不出是尺寸问题。
激励奖励有现金价值时还需要 AppSecret,它只用于接入方服务器验签,见《服务端对接》。
引入依赖
根 settings.gradle 加两个仓库,都是公开只读、无需账号:
groovy
dependencyResolutionManagement {
repositories {
google()
mavenCentral()
maven { url 'https://admin.maemi.cn/maven/' } // AdMix
maven { url 'https://artifact.bytedance.com/repository/pangle' } // 穿山甲官方仓库
}
}App 模块 build.gradle 一行:
groovy
dependencies {
implementation "com.admix:sdk:1.2.0" // 聚合核心 + 穿山甲 + 优量汇
}
android {
defaultConfig {
minSdk 25
ndk { abiFilters 'arm64-v8a', 'armeabi-v7a' } // 建议:显著减小包体积
}
}两家广告平台的 SDK 由适配器自动带入,不要再单独引入。只接一家、离线包方式、 以及广告 SDK 的版本锁定见《引入依赖》。
处理清单合并冲突
两家广告 SDK 的清单都写了 <application> 属性且互相不一致,不处理会编译失败。 在宿主 AndroidManifest.xml 上显式写出值并 tools:replace:
xml
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools">
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.QUERY_ALL_PACKAGES" tools:node="remove" />
<uses-permission android:name="com.android.permission.GET_INSTALLED_APPS" tools:node="remove" />
<application
android:allowBackup="false"
android:label="@string/app_name"
tools:replace="android:allowBackup,android:label">
...
</application>
</manifest>两行 tools:node="remove" 的来源与作用见《合规与隐私》「申请的权限及用途」。
两步初始化
init() 只读本地配置,不联网、不采集、一家广告 SDK 都不初始化,可在 Application 里调用。 start() 才联网拉配置并按需初始化广告 SDK,必须在用户同意隐私政策之后。
java
// MyApplication.java —— 凭证建议从 BuildConfig 注入,不要硬编码进源码提交到仓库
public class MyApplication extends Application {
@Override public void onCreate() {
super.onCreate();
AdMix.init(this, BuildConfig.ADMIX_APP_ID, BuildConfig.ADMIX_APP_KEY,
new AdMixConfig.Builder()
.debug(BuildConfig.DEBUG) // 上线包必须 false
.limitPersonalAds(userClosedPersonalAds) // 用户关了个性化推荐就传 true
.build());
}
}java
// 用户点「同意」之后,不是在 Application 里
AdMix.start(new AdMix.InitListener() {
@Override public void onSuccess() { /* 可以请求广告了 */ }
@Override public void onFail(AdError e) { /* 本次会话按无广告降级,不要请求广告 */ }
});顺序颠倒会被应用商店驳回
用户同意隐私政策之前调用 start() 属于违规采集个人信息。同意结果必须持久化, 点「不同意」时 App 仍须可用。判据与验证步骤见《合规与隐私》「自行验证「同意之前不联网」」。
请求第一个广告
激励视频是最短的一条:
java
RewardAd rewardAd = new RewardAd("reward_main"); // 换成运营给的广告位标识
rewardAd.load(activity, new RewardAdListener() {
@Override public void onAdLoaded(String adnType) { rewardAd.show(activity); }
@Override public void onAdLoadFailed(AdError error) { }
@Override public void onAdShow() { }
@Override public void onAdClick() { }
@Override public void onAdClose() { }
@Override public void onReward() { /* 发放奖励 */ }
@Override public void onVideoComplete() { }
});
// Activity onDestroy 中
rewardAd.destroy();开屏与 Banner 的写法、以及各自特有的必做项(开屏的兜底放行、Banner 的销毁)见 《开屏广告》《激励视频广告》《Banner 广告》。初始化的 Kotlin 写法见《初始化》。
确认跑通
bash
adb logcat -s "AdMix:V"三行日志按顺序出现即为正常:
text
adapter 就绪: csj (ADN SDK 7.7.1.6) ← 每个引入的适配器一行,且应为 I 级
拉取远端配置 … adapters=[csj,gdt] ← 上报给平台的能力清单
远端配置加载完成,ADN: [csj, gdt] 广告位数量: 3
最终胜出: csj ecpm=*** ← 一轮调度决出中标方完整的十条接入自检清单见《常见问题》「Android 接入自检清单」,逐条通过后再提交测试。
下一步
| 目的 | 看这份 |
|---|---|
| 只接一家广告平台 / 内网构建 / 广告 SDK 版本冲突 | 《引入依赖》 |
| 接开屏(兜底放行是必备项) | 《开屏广告》 |
| 接 Banner | 《Banner 广告》 |
| 降低加载耗时 | 《预加载与缓存》 |
| 奖励可提现 / 抵扣 / 抽奖 | 《服务端对接》 |
| 上架应用商店 | 《合规与隐私》 |
| 遇到报错 | 《错误码参考》《常见问题》 |