主题
快速开始
文档版本 v1.0.0
本页对应 iOS SDK 1.0.0,与离线包 docs/ 目录里的同一份文档内容一致。其他版本见文档中心。
跑通第一个广告的最短路径。每一步的完整说明在《引入依赖》《初始化》及各广告位文档里, 这一页只留必需动作。
接入前需要拿到的东西
| 项 | 从哪来 | 能进安装包 |
|---|---|---|
| AppID | 平台运营,后台「应用管理」创建应用时生成 | 能 |
| App 密钥 | 平台运营,后台「应用管理 → 接入」抽屉 | 需要进 |
| 广告位标识列表 | 平台运营,后台「广告位管理」,形如 splash_main / reward_main / banner_main | 能,写在业务代码里 |
各广告平台的应用 ID 与广告位 ID 不需要接入方提供,由配置服务下发,SDK 侧没有本地写入口。 运营改价格、调顺序、开关广告位、甚至停用一整家广告平台,接入方都不用发版。
申请 Banner 广告位时必须说清尺寸规格
运营要按这个规格在广告平台后台建广告位。尺寸不符直接报 40006 广告位ID不合法, 错误信息看不出是尺寸问题。
激励奖励有现金价值时还需要 AppSecret,它只用于接入方服务器验签,见《服务端对接》。
引入依赖
Podfile 里加 AdMix 的源,以及一行依赖:
ruby
source 'https://cdn.cocoapods.org/'
source 'https://admin.maemi.cn/cocoapods/'
platform :ios, '12.0'
target 'YourApp' do
pod 'AdMix', '1.0.0' # 聚合核心 + 穿山甲 + 优量汇
endbash
pod install两家广告平台的 SDK 由 CocoaPods 从官方源自动拉取,不要再单独引入。 只接一家、手工集成,以及广告 SDK 的版本锁定见《引入依赖》。
配置 Info.plist
xml
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>
<key>NSUserTrackingUsageDescription</key>
<string>用于向你展示更相关的广告</string>两家广告平台的部分素材仍走明文 http,不放开时素材被系统拦截,广告位出现空白。 只配域名例外时的表现与跟踪授权的弹出时机见《引入依赖》「网络安全配置」与《初始化》「跟踪授权」。
两步初始化
setup 只读本地配置,不联网、不采集、一家广告 SDK 都不初始化,可在 App 启动时调用。 start 才联网拉配置并按需初始化广告 SDK,必须在用户同意隐私政策之后。
swift
// AppDelegate —— 凭证建议从构建配置注入,不要硬编码进源码提交到仓库
func application(_ application: UIApplication,
didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
let options = AdMixConfig()
options.debug = false // 调试包可以打开,上线包必须 false
options.limitPersonalAds = userClosedPersonalAds
AdMix.setup(appId: "AppID", appKey: "App密钥", options: options)
return true
}swift
// 用户点「同意」之后,不是在 didFinishLaunching 里
AdMix.start { error in
if error == nil { /* 可以请求广告了 */ }
else { /* 本次会话按无广告降级,不要请求广告 */ }
}顺序颠倒会被 App Store 驳回
用户同意隐私政策之前调用 start 属于违规采集个人信息。同意结果必须持久化, 点「不同意」时 App 仍须可用。判据见《合规与隐私》「延迟初始化」。
请求第一个广告
激励视频是最短的一条:
swift
final class RewardViewController: UIViewController, AdMixRewardAdDelegate {
private var rewardAd: AdMixRewardAd?
func playReward() {
let ad = AdMixRewardAd(unitId: "reward_main") // 换成运营给的广告位标识
ad.delegate = self
rewardAd = ad
ad.load()
}
func rewardAdDidLoad(_ ad: AdMixRewardAd, adnType: String) {
ad.show(from: self)
}
func rewardAd(_ ad: AdMixRewardAd, didFailWithError error: Error) { }
func rewardAdDidReward(_ ad: AdMixRewardAd) { /* 发放奖励 */ }
deinit { rewardAd?.destroy() }
}开屏与 Banner 的写法、以及各自特有的必做项(开屏的兜底放行、Banner 的销毁)见 《开屏广告》《激励视频广告》《Banner 广告》。Objective-C 写法见《初始化》。
确认跑通
SDK 日志走系统统一日志(subsystem com.admix.sdk),在 Xcode 控制台过滤 AdMix 即可。 以下几行按顺序出现即为正常:
text
适配器自检: 发现 [csj,gdt] ← 实际链接进 App 的广告平台
拉取远端配置 … adapters=[csj,gdt] … ← 上报给平台的能力清单
远端配置加载完成,ADN: … 广告位数量: 3 …
开始加载 reward_main 竞价位=1 瀑布层=1
最终胜出: csj ecpm=*** ← 一轮调度决出中标方完整的接入自检清单见《常见问题》「iOS 接入自检清单」,逐条通过后再提交测试。
下一步
| 目的 | 看这份 |
|---|---|
| 只接一家广告平台 / 手工集成 / 广告 SDK 版本冲突 | 《引入依赖》 |
| 接开屏(兜底放行是必备项) | 《开屏广告》 |
| 接 Banner | 《Banner 广告》 |
| 降低加载耗时 | 《预加载与缓存》 |
| 奖励可提现 / 抵扣 / 抽奖 | 《服务端对接》 |
| 上架 App Store | 《合规与隐私》 |
| 遇到报错 | 《错误码参考》《常见问题》 |