先决条件
在安装 Singular React Native SDK 之前,请完成以下前提步骤,以确保集成过程顺利进行。
所需先决条件:
- 完成规划步骤:按照集成 Singular SDK 中的指南进行操作:规划和先决条件》中的指南。这些步骤对于任何 Singular SDK 集成都是强制性的。
- React Native 版本:验证您的 React Native 版本(建议使用 0.59 以上版本进行自动链接)。
- Expo 用户:如果使用 Expo,请确保您熟悉定制原生代码,因为 SDK 需要原生模块。
安装
安装 SDK 软件包
使用 npm 将 Singular React Native SDK 添加到项目中。该 SDK 为 iOS 和 Android 的原生 Singular SDK 提供 JavaScript 绑定。
通过 NPM 安装
- 打开终端:导航至项目根目录。
-
安装软件包:运行以下命令将 SDK 添加到项目中:
npm install singular-react-native --save
链接本地模块
如何链接 SDK 取决于您的 React Native 版本以及是否使用 Expo。
- React Native 0.60+:SDK 自动链接,无需额外步骤。
-
React Native 0.59 或更旧版本:手动链接原生桥接代码:
react-native link singular-react-native -
Expo 项目:安装 SDK 后,将其添加到插件配置中:
{ "expo": { "plugins": ["singular-react-native"] } }然后使用世博会的定制原生代码指南重建应用程序。
平台配置
iOS 配置
完成 iOS 特定设置,启用 CocoaPods 依赖项,确保 SDK 功能正常。
注意:如果使用 Expo 构建,iOS 配置将自动处理。跳过此部分。
安装 CocoaPods 依赖项
从项目根目录运行以下命令,安装所需的 iOS 依赖项:
cd ios && pod install
安卓配置
配置 Android 构建文件,添加 Singular Maven 资源库、所需权限和依赖项。
注:如果使用 Expo 构建,则会自动处理 Android 配置。跳过此部分。
添加 Maven 资源库
在项目的build.gradle 文件中添加 Singular Maven 仓库,以启用 SDK 依赖关系解析。
allprojects {
repositories {
maven { url 'https://maven.singular.net/' }
}
}
添加所需的权限
在AndroidManifest.xml 文件的<manifest> 标记下添加这些权限,以启用 SDK 核心功能。
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="BIND_GET_INSTALL_REFERRER_SERVICE" />
<uses-permission android:name="com.android.vending.CHECK_LICENSE" />
<uses-permission android:name="com.google.android.gms.permission.AD_ID" />
重要提示:如果您集成了儿童 SDK,请排除com.google.android.gms.permission.AD_ID 权限。标准应用程序的 GAID 收集需要此权限,但针对 13 岁以下儿童的应用程序必须省略此权限。
三星 Galaxy 商店支持
要启用来自 Samsung Galaxy Store 的安装推荐人跟踪功能,请在AndroidManifest.xml 中添加以下内容:
<queries>
<package android:name="com.sec.android.app.samsungapps" />
</queries>
传递依赖关系
如果您在 Gradle 配置中禁用了 Singular SDK 的传递依赖关系,请手动添加这些必要的依赖关系:
dependencies {
// Required for install referrer tracking
implementation("com.android.installreferrer:installreferrer:2.2")
// Required for App Set ID
implementation("com.google.android.gms:play-services-appset:16.0.0")
}
ProGuard 配置
在构建发行版 APK 时,ProGuard(或 R8)可能会剥离或混淆 SDK 类。添加这些保留规则以保留 Singular 功能。
为何重要?在 React Native Android 发行版中,ProGuard 默认已启用。如果没有适当的保留规则,SDK 可能无法在生产中正常运行。
-
找到 ProGuard 文件:导航至项目中的
android/app/proguard-rules.pro。 -
添加保持规则:在文件中添加以下规则:
# Preserve Singular SDK classes -keep class com.singular.sdk.** { *; } # Preserve Android Install Referrer library -keep public class com.android.installreferrer.** { *; } # Uncomment if using Singular revenue tracking with Google Play Billing Library #-keep public class com.android.billingclient.** { *; }
SDK 集成
隐私合规性:实施 Singular SDK 时,遵守运营地区的隐私法,包括 GDPR、CCPA、COPPA 等。请参阅SDK 选择加入和选择退出实践。
兼容性说明:Singular React Native SDK v4.0+ 支持传统的 Bridge 和 TurboModule 架构。对于大多数开发人员来说,无需迁移或重构:升级 React Native 和/或 SDK,新旧代码都能按预期运行。要直接利用 TurboModule API,请参阅下面的新初始化示例。
导入 SDK 类
在主应用程序文件(通常为App.tsx 或App.js )顶部导入 Singular SDK 类。
// Direct TurboModule API initialization (React Native 0.76+)
// Import Native API and EventEmitter
import NativeSingular from 'singular-react-native/jsNativeSingular';
import { NativeEventEmitter } from 'react-native';
import Singular, { SingularConfig } from 'singular-react-native';
初始化 SDK
基本初始化
- 获取证书:登录Singular 账户,导航至 "开发工具" > "SDK 集成" > "SDK 密钥",找到 SDK 密钥和秘钥。
-
创建配置:使用凭据实例化
SingularConfig对象,或 TurboModule API 的纯对象。 - 添加配置:可选择链式配置方法(传统方法)或直接在配置对象中添加属性(TurboModule)。
-
初始化 SDK:调用
Singular.init()或NativeSingular.init()启动 SDK。
初始化示例
在应用程序的入口点初始化 SDK,通常是在useEffect 钩子中初始化,以确保在应用程序启动时运行一次。
// TurboModule direct API (React Native 0.76+ New Architecture)
import React, { useEffect } from 'react';
import NativeSingular from 'singular-react-native/jsNativeSingular';
export default function App() {
useEffect(() => {
const config: SingularConfig = {
apikey: 'YOUR_SDK_KEY',
secret: 'YOUR_SDK_SECRET',
enableLogging: true,
logLevel: 3,
};
NativeSingular.init(config);
}, []);
return (
// Your app components
);
}
import React, { useEffect } from 'react';
import Singular, { SingularConfig } from 'singular-react-native';
export default function App() {
useEffect(() => {
const config = new SingularConfig('YOUR_SDK_KEY', 'YOUR_SDK_SECRET')
.withLoggingEnabled()
.withLogLevel(3);
Singular.init(config);
}, []);
return (
// Your app components
);
}
直接使用 TurboModule API:
使用NativeSingular TurboModule API 时,配置简化为普通 JavaScript 对象和直接事件发射器设置。仅建议使用新架构(React Native 0.76 以上)的应用程序使用此方法。所有其他应用程序应继续使用封装器(SingularConfig/Singular.init),以获得最大兼容性。
高级配置示例
在调用init() 之前,通过链式配置方法在初始化过程中配置多个 SDK 功能。
// TurboModule direct API (React Native 0.76+ New Architecture)
import React, { useEffect } from 'react';
import NativeSingular from 'singular-react-native/jsNativeSingular';
import { NativeEventEmitter } from 'react-native';
export default function App() {
useEffect(() => {
const config: SingularConfig = {
apikey: 'YOUR_SDK_KEY',
secret: 'YOUR_SDK_SECRET',
customUserId: 'user_123456',
limitDataSharing: false,
waitForTrackingAuthorizationWithTimeoutInterval: 300
};
NativeSingular.init(config);
// Register event listener
const emitter = new NativeEventEmitter(NativeSingular);
emitter.addListener('SingularLinkHandler', (params) => {
console.log('Singular: Deep link:', params.deeplink);
console.log('Singular: Passthrough:', params.passthrough);
console.log('Singular: Is deferred:', params.isDeferred);
console.log('Singular: urlParameters:', params.urlParameters);
});
}, []);
return (
// Your app components
);
}
import React, { useEffect } from 'react';
import { Singular, SingularConfig } from 'singular-react-native';
export default function App() {
useEffect(() => {
const config = new SingularConfig(
'YOUR_SDK_KEY',
'YOUR_SDK_SECRET'
)
// User identification
.withCustomUserId('user_123456')
// Privacy settings
.withLimitDataSharing(false)
// Deep linking
.withSingularLink((params: SingularLinkParams) => {
console.log('Singular: Deep link:', params.deeplink);
console.log('Singular: Passthrough:', params.passthrough);
console.log('Singular: Is deferred:', params.isDeferred);
console.log('Singular: urlParameters:', params.urlParameters);
})
// iOS-specific
.withWaitForTrackingAuthorizationWithTimeoutInterval(300)
// Debugging
.withLoggingEnabled()
.withLogLevel(3);
Singular.init(config);
}, []);
return (
// Your app components
);
}
配置参考:有关可用配置选项的完整列表,请参阅《React Native SDK 配置参考》。
关键:请勿使用 Singular Reporting API Key。只能使用 SDK 集成页面上的 SDK 特定凭据。使用错误的凭据会导致数据无法到达 Singular。