Skip to content

穿山甲(iOS)

本文档介绍 iOS 端接入穿山甲(CSJ)广告平台的对接事项:引入适配器、工程配置、平台参数与注意事项。

概述

项目说明
适配器UjuCsjAdapter 1.0.0(platformId=1)
穿山甲 SDKAds-CN-Beta 7.8.0.0(subspec: CSJMediation),由开发者自行引入
依赖UjuAdCore ~> 3.4.2
支持广告类型开屏、激励视频、插屏、横幅、原生(模板渲染)

适配器遵循穿山甲官方接入规范对接,展示、点击等监测数据由穿山甲 SDK 自动上报,无需开发者额外处理。

一、前置条件

  1. 已按 iOS 初始化文档 完成优聚智汇 SDK 初始化。
  2. 穿山甲平台注册并创建媒体与应用,获取穿山甲 App ID代码位 ID
  3. 在优聚智汇开发者平台「广告平台配置」中开通穿山甲,填写穿山甲 App ID;在广告位瀑布流中配置穿山甲广告源(代码位 ID)。

二、引入适配器

1. Podfile

ruby
source 'https://gitee.com/ujuad/iossdk.git'
source 'https://cdn.cocoapods.org/'

pod 'UjuAdCore', '~> 3.4.2'
pod 'UjuCsjAdapter', '1.0.0'
# 穿山甲 SDK 由开发者自行引入(版本必须与适配器要求一致)
pod 'Ads-CN-Beta', '7.8.0.0', :subspecs => ['CSJMediation']
# 引入使用到的 ADN SDK,开发者请按需引入

Ads-CN-Beta 的版本必须使用适配器声明的版本(7.8.0.0),版本不一致可能出现符号缺失或统计异常。CSJAdSDK.bundle 资源由该 pod 自动携带。

2. Info.plist 适配器注册

xml
<key>uju_adapter_csj</key>
<string>UjuCsjAdapter.CsjAdapterFactory</string>

SDK 初始化时自动扫描 uju_adapter_* 前缀 key 并反射注册适配器,无需调用任何额外代码。穿山甲 SDK 的初始化也由优聚智汇 SDK 在策略下发后自动完成(使用后台配置的穿山甲 App ID)。

三、工程配置(穿山甲 SDK 要求)

1. ATS 例外

部分广告素材为 HTTP,需允许任意加载:

xml
<key>NSAppTransportSecurity</key>
<dict>
    <key>NSAllowsArbitraryLoads</key>
    <true/>
</dict>

2. ATT 授权(iOS 14.5+)

xml
<key>NSUserTrackingUsageDescription</key>
<string>该标识符将用于向您投放个性化广告</string>

建议在初始化前调用 ATTrackingManager.requestTrackingAuthorization 请求授权;用户拒绝授权时 IDFA 清零,可能降低广告收益。

3. SKAdNetwork

在 Info.plist 的 SKAdNetworkItems 中添加穿山甲 SKAdNetwork ID:

xml
<key>SKAdNetworkItems</key>
<array>
    <dict>
        <key>SKAdNetworkIdentifier</key>
        <string>238da6jt44.skadnetwork</string>
    </dict>
    <dict>
        <key>SKAdNetworkIdentifier</key>
        <string>x2jnk7ly8j.skadnetwork</string>
    </dict>
    <dict>
        <key>SKAdNetworkIdentifier</key>
        <string>22mmun2rn5.skadnetwork</string>
    </dict>
</array>

4. Other Linker Flags

Build Settings → Other Linker Flags 添加 -ObjCpod 'UjuCsjAdapter'user_target_xcconfig 已自动配置 -force_load / SWIFT_INCLUDE_PATHS 等必要参数,无需手动处理。

四、验证

真机运行后,在控制台过滤以下日志确认链路:

环节日志关键字
适配器注册反射注册 UjuCsjAdapter.CsjAdapterFactory 成功(platformId=1)
穿山甲初始化穿山甲 SDK 初始化成功
广告加载CsjSplash onLoadAd / splashAdLoadSuccess
竞价胜出竞价胜出(ADN): platformId=1
展示splashAdDidShow 等展示回调

穿山甲平台的展示、点击报表一般在广告实际展示后几分钟内可见(偶有小时级延迟)。请注意:仅完成"加载"未调用展示的请求,平台不计展示量。

五、注意事项(对接穿山甲官方文档要点)

  1. rootViewController 必须有效:穿山甲所有跳转均采用 present 方式,展示广告时优聚智汇 SDK 会传入当前页面控制器,请确保从可见的 UIViewController 发起 show,且该控制器未 present 其他控制器,否则会出现 presentedViewController already exists 导致跳转失败。
  2. 广告代理不可中途更改:穿山甲开屏文档明确"不支持中途更改代理,中途更改代理会导致接收不到广告相关回调"。适配器内部在加载阶段完成 delegate 绑定,业务方无需也不应持有并修改穿山甲广告对象的代理。
  3. 信息流必须设置 rootViewController:模板信息流广告视图必须关联有效控制器,否则点击跳转失败、dislike 回调不进(适配器内部已处理)。
  4. 同一广告对象只计一次有效展示:重复展示会被穿山甲系统过滤。请勿缓存已展示的 UjuAdObject 重复调用 show,需要再次展示时重新 load
  5. 激励视频服务器回调:如需服务端奖励验证,请在穿山甲平台填写奖励回调 URL,并确认用户 ID(userId)为非空字符串。
  6. 横幅展示需要容器:横幅广告渲染到 show(_:container:) 传入的容器视图,请确保容器已布局(非零尺寸)后再展示。

六、常见问题

Q1:初始化报错 Invalid SDK Framework(错误码 98765),提示替换 CSJAdSDK.bundle?

宿主 App 内的 CSJAdSDK.bundleBUAdSDK 版本不一致或 bundle 缺失。手动集成时请确认 CSJAdSDK.bundle 已加入 Copy Bundle Resources,且与引入的 Ads-CN-Beta 版本一致;使用 CocoaPods 引入 Ads-CN-Beta 则自动匹配。

Q2:穿山甲平台没有展示、点击数据?

  1. 确认已完整执行 加载 → 展示 流程(仅加载不计展示);
  2. 确认展示回调已触发(见「四、验证」日志);
  3. 检查 rootViewController 是否有效(点击跳转失败会导致点击数据缺失);
  4. 平台报表存在延迟,可在几分钟至一小时后复查。

Q3:加载返回 noFill / 无填充?

穿山甲测试代码位有 QPS 与频控限制;请确认代码位状态开启、包名与穿山甲平台配置一致,并参考穿山甲错误码文档排查。