💡Tips
- TaKu React Native SDK 同时支持 Android 与 iOS 平台,兼容 Paper(旧架构) 与 新架构(TurboModule + Fabric)。版本要求:
react-native >= 0.68。- 全局配置方法(日志、渠道、个性化广告、隐私合规等)建议在
ATSDK.init()之前调用。- SDK 通过 RN autolinking 自动接入原生模块,绝大多数场景无需手动改原生工程;iOS 仍需执行
pod install。- 接入前建议先跑通工程内置的
Demo。
将源码拷入工程,在宿主 package.json 用 link: / file: 引用,并配置 react-native.config.js autolink,可以从这里下载Demo
SDK 通过 podspec 声明 iOS 端原生依赖(AnyThink iOS SDK 及各广告网络适配器),autolinking 会自动引用,无需手动修改 Podfile 中的 SDK 依赖项。在工程的 ios/ 目录执行:
cd ios
pod install --repo-update
如非首次操作,遇到依赖解析问题可先删除
Podfile.lock后重试。
参考 SDK 下载中心 生成的配置,向 Info.plist 添加以下键:
(1)SKAdNetworkItems——按所选广告网络添加对应 SKAdNetwork ID。
(2)NSUserTrackingUsageDescription——iOS 14.5 起,访问 IDFA 需用户授权:
<key>NSUserTrackingUsageDescription</key>
<string>此处修改为您希望用户看到的权限请求描述,可本地化</string>
(3)NSAppTransportSecurity:
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>
(4)若勾选了 AdMob 平台,添加 GADApplicationIdentifier:
<key>GADApplicationIdentifier</key>
<string>ca-app-pub-xxxxxxxxxxxxxxxx~yyyyyyyyyy</string>
⚠️ 从 iOS 14.5 起,只有在获得用户明确授权(App Tracking Transparency)后,应用才可访问 IDFA。
ATSDK.init()在 iOS 14+ 内部会自动请求 ATT 授权,RN 层无需单独调用。如需自定义授权时机,请使用三方库(如react-native-tracking-transparency)。如需适配 GDPR,请参考海外隐私配置。
| 项 | 要求 |
|---|---|
minSdkVersion |
21(SDK 最低支持) |
compileSdkVersion |
36 |
targetSdkVersion |
36 |
💡 SDK 本身要求
minSdkVersion >= 21。官方 Demo 中minSdkVersion 24系部分广告网络(ADN)适配器的最低要求,非 SDK 强制。请按实际接入的广告网络调整。
autolinking 会自动接入原生模块与各广告网络适配器依赖,通常无需手动修改 build.gradle。
若使用了 AdMob,必须在 AndroidManifest.xml 中添加:
<manifest>
<application>
<meta-data
android:name="com.google.android.gms.ads.APPLICATION_ID"
android:value="ca-app-pub-xxxxxxxxxxxxxxxx~yyyyyyyyyy" />
</application>
</manifest>
如开启代码混淆,在 proguard-rules.pro 中保留 SDK 桥接与原生类(按所接入广告网络补充各自的 keep 规则)。
在加载任何广告之前,需要先完成初始化。SDK 提供两个核心方法:
| 方法 | 说明 |
|---|---|
ATSDK.init(appId, appKey) |
初始化 SDK;内部会建立事件分发通道(ATAdEvents),使各广告回调能分发到 JS |
ATSDK.start() |
启动 SDK(拉取策略等);须在 init 之后调用 |
推荐在用户同意隐私协议后、加载广告前尽早初始化。完整顺序(不可打乱):日志 → 全局监听 → 集成检测 → 个性化开关 → init → start:
import { ATSDK, ATAdEvents } from '@anythink/react-native-sdk';
export function initSdk(personalized: boolean): void {
// 1. 日志(早于 init;开发阶段开启,上线前关闭)
ATSDK.setNetworkLogDebug(true);
// 2. 全局事件监听(订阅各广告回调通道)
ATAdEvents.init();
// 3. 集成检测(验证原生依赖是否正确接入)
ATSDK.integrationChecking();
// 4. 个性化广告开关(PERSONALIZED=允许,NONPERSONALIZED=限制)
ATSDK.setPersonalizedAdStatus(
personalized ? ATSDK.PERSONALIZED : ATSDK.NONPERSONALIZED
);
// 5. init + start
ATSDK.init('your app id', 'your app key');
ATSDK.start();
console.log('SDK 初始化完成,版本:', ATSDK.getSDKVersionName());
}
💡
ATSDK.init内部已自动调用ATAdEvents.init(),但在更早的启动阶段显式调用一次可确保全局监听(如统一日志面板)不漏接早期事件。重复调用是幂等的。
init 之前调用)| 方法 | 说明 |
|---|---|
ATSDK.setNetworkLogDebug(boolean) |
开启 / 关闭网络调试日志(同时控制 RN 层与原生层) |
ATSDK.setChannel(string) |
设置渠道名,用于数据分析 |
ATSDK.setChannelSource(number) |
设置渠道来源 |
ATSDK.initCustomMap(Record<string, unknown>) |
设置全局自定义参数(用于流量分组) |
ATSDK.initPlacementCustomMap(placementId, map) |
设置某广告位的自定义参数 |
ATSDK.setPersonalizedAdStatus(number) |
设置个性化广告开关(PERSONALIZED / NONPERSONALIZED) |
ATSDK.integrationChecking() |
触发集成自检 |
| 方法 | 返回值 | 说明 |
|---|---|---|
ATSDK.start() |
void |
启动 SDK(须在 init 之后) |
ATSDK.getSDKVersionName() |
string |
获取 SDK 版本号 |
ATSDK.getArea() |
Promise<string> |
获取当前地区 |
ATSDK.isCnSDK() |
Promise<boolean> |
是否为国内版 SDK |
ATSDK.isNetworkLogDebug() |
Promise<boolean> |
当前是否开启网络调试日志 |
ATSDK.showDebuggerUI(debugKey) |
void |
打开 Taku 调试面板,详见测试广告 |
| 常量 | 值 | 说明 |
|---|---|---|
ATSDK.PERSONALIZED |
0 |
允许个性化广告 |
ATSDK.NONPERSONALIZED |
1 |
限制为非个性化广告 |
ATSDK.UNKNOWN |
2 |
未知 / 未设置 |