RudderStack 是一个开源的客户数据平台(CDP) 可帮助企业收集、统一客户数据并将其路由到各种目的地。它提供了一个集中式平台来管理客户数据管道,使组织能够轻松地从网站、移动应用、服务器和云服务等各种来源收集数据。
Singular SDK 作为 Rudderstack 的插件提供,被称为 "Device-Mode" 目的地 。以下说明介绍了如何在 Rudderstack 中添加 Singular 目的地。
请注意,此集成由 Rudderstack 构建和维护。如果在实施过程中出现问题,请咨询 Rudderstack。
| 适用对象 | 工程团队 |
| 前提条件 | 本文假设您已经在应用中集成了 Rudderstack iOS、Android、React Native 或 Cordova SDK。 有关 device-mode 和移动 SDK 的更多详情,请参阅 Rudderstack 文档。 |
要使用此集成,您必须使用 Rudderstack 的移动 SDK,适用于:iOS(原生 Obj-C 或 Swift)、Android(Java 或 Kotlin)、React Native 或 Cordova。 此集成与任何其他框架均不兼容!
- 基础安装归因
- SkAdNetwork 支持
- Apple Search Ads 归因
- 自定义应用内事件跟踪
- 收入跟踪
- 自定义用户 ID
- META Install Referrer 归因
- 深度链接
- Limited Data Sharing 支持
如果您需要支持其他 框架 ,或希望使用 Singular SDK 提供的"完整功能",则必须独立于 Rudderstack 实施 Singular SDK。请在 此处 查看 SDK 选项和框架。
快速开始
- 从您的 RudderStack 控制台 添加来源。然后,从目的地列表中选择 Singular 。
- 为您的目的地指定一个名称,然后点击 Continue 。
连接设置
要成功将 Singular 配置为目的地,您需要配置以下设置:
- API Key: 在此处输入您的 Singular "SDK Key" 。这是必填字段。
-
Secret:
输入您的 Singular secret。这是必填字段,是与 RudderStack iOS 和 Android SDK 进行设备模式集成所必需的。
获取您的 Singular "SDK KEY" ,它位于 Singular 控制台的 "Developer Tools > SDK Integration > SDK Keys" 下。
注意: 对于 "Cloud-Mode" 集成,您将 只需输入 API Key(SDK Key)值 。
将 "Secret" 留空。 - Session Event Name: 此设置仅适用于通过云模式发送事件。
-
Use device mode to send events:
使用 Android 或 iOS 平台时,您可以启用此设置以通过设备模式发送事件。然后,按照 Singular Device Mode 指南中的步骤将 Singular 添加到您的项目中。
通过设备模式发送事件时,RudderStack 还允许您指定哪些事件应被丢弃或允许通过。有关更多信息,请参阅 Client-side Event Filtering 指南。
添加设备模式集成
在 RudderStack 中将 Singular 设置为目的地后,根据您的集成平台,按照以下步骤将其添加到您的项目中。
要将 Singular 添加到您的 React Native 应用,请按照以下步骤操作:
-
通过运行以下命令将 RudderStack-Singular 模块添加到您的应用中:
bash
npm install @rudderstack/rudder-integration-singular-react-native // OR // yarn add @rudderstack/rudder-integration-singular-react-native -
打开您的项目级 android/build.gradle 文件并添加以下代码片段:
groovy
repositories { maven { url "https://maven.singular.net/" } } -
导入上述模块并将其添加到您的 SDK 初始化中:
typescript
import rudderClient from "@rudderstack/rudder-sdk-react-native" import singular from "@rudderstack/rudder-integration-singular-react-native" const config = { dataPlaneUrl: <data_plane_url>, trackAppLifecycleEvents: true, withFactories: [singular], } rudderClient.setup(<write_key>, config)
要将 Singular 添加到您的 Cordova 应用,请按照以下步骤操作:
-
导航到应用程序的根文件夹并运行以下命令:
bash
cordova plugin add rudder-integration-singular-cordova -
在应用主页的 onDeviceReady() 函数中添加以下代码以初始化 SDK:
javascript
RudderClient.initialize(<write_key>, { dataPlaneUrl: <data_plane_url>, factories: [RudderSingularFactory] })重要提示: 请确保对 `initialize` 调用使用 `await` 关键字。
要将 Singular 添加到您的 iOS 应用,请按照以下步骤操作:
-
在您的 Podfile 中,添加以下依赖项:
ruby
pod 'Singular-SDK', '11.0.4' pod 'Rudder-Singular', '1.0.0' -
在添加依赖项并执行 pod install 命令后,将以下导入语句添加到您的 AppDelegate.m 文件中:
Obj-C
//Objective-C
#import <rudder> #import <ruddersingularfactory.h> -
初始化您的 RSClient :
Obj-C
//Objective-C
RSConfigBuilder *configBuilder = [[RSConfigBuilder alloc] init]; [configBuilder withDataPlaneUrl:<data_plane_url>]; [configBuilder withFactory:[RudderSingularFactory instance]]; RSClient *rudderClient = [RSClient getInstance:<write_key> config:[configBuilder build]];
此设备模式集成支持 Singular v11.0.4 及以上版本。
按照以下步骤将 Singular 添加到您的 iOS 项目中:
-
通过在您的 Podfile 中添加以下行来安装 RudderSingular (可通过 CocoaPods 获取):
pod 'RudderSingular', '~> 1.0.0' -
在添加依赖项并执行 pod install 命令后,根据您首选的平台,将导入语句添加到您的 AppDelegate 文件中:
Swift
import RudderSingularObj-C
@import RudderSingular; -
在您的 AppDelegate 文件中更新 didFinishLaunchingWithOptions 方法:
重要提示:
- 设置 manualSkanConversionManagement = true 将要求您手动更新自己的 Conversion Value。这将不允许 Singular 的 SKAN 模型代您更新 CV 值。将此项设置为 "false" 以启用"托管"模式。
- 仅当您的应用使用 iOS App Tracking Transparency(ATT)提示时,才应设置 waitForTrackingAuthorizationWithTimeoutInterval 。如果您显示 ATT,则应将其设置为 300。
Swift
let config: RSConfig = RSConfig(writeKey: WRITE_KEY) .dataPlaneURL(DATA_PLANE_URL) RSClient.sharedInstance().configure(with: config) let rudderSingularConfig = RudderSingularConfig() .skAdNetworkEnabled(true) .manualSkanConversionManagement(true) .conversionValueUpdatedCallback({ value in print("Your SKAN handler \(value)") }) .waitForTrackingAuthorizationWithTimeoutInterval(300) RSClient.sharedInstance().addDestination(RudderSingularDestination(rudderSingularConfig: rudderSingularConfig))Obj-C
RSConfig *config = [[RSConfig alloc] initWithWriteKey:WRITE_KEY]; [config dataPlaneURL:DATA_PLANE_URL]; [[RSClient sharedInstance] configureWith:config]; RudderSingularConfig *rudderSingularConfig = [[RudderSingularConfig alloc] init]; [rudderSingularConfig skAdNetworkEnabled:YES]; [rudderSingularConfig manualSkanConversionManagement:YES]; [rudderSingularConfig conversionValueUpdatedCallback:^(NSInteger value) { printf("Your SKAN handler %ld", value); }]; [rudderSingularConfig waitForTrackingAuthorizationWithTimeoutInterval:300]; [[RSClient sharedInstance] addDestination:[[RudderSingularDestination alloc] initWithRudderSingularConfig:rudderSingularConfig]];
要将 Singular 添加到您的 Android 应用,请按照以下步骤操作:
-
打开您的 app/build.gradle (模块: app )文件,并在 dependencies 部分下添加以下内容:
groovy
implementation 'com.rudderstack.android.sdk:core:[1.0,2.0)' implementation 'com.rudderstack.android.integration:singular:1.0.0' implementation 'com.google.code.gson:gson:2.8.6' -
将 Singular Maven 插件添加到您的构建脚本中。为此,请将以下代码片段添加到根 build.gradle 的 Gradle Scripts 部分:
groovy
buildscript { repositories { google() mavenCentral() maven { url 'https://maven.singular.net/' } } dependencies { classpath 'com.android.tools.build:gradle:7.1.2' classpath 'org.jetbrains.kotlin:kotlin-gradle-plugin:1.6.10' } } allprojects { repositories { google() mavenCentral() maven { url 'https://maven.singular.net/' } } } -
将以下权限(如果尚未存在)添加到您的 AndroidManifest.xml 中:
<uses-permission android:name="android.permission.INTERNET"></uses-permission> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission> -
最后,在您的 Application 类的 onCreate() 方法中初始化 RudderStack SDK:
// initialize Rudder SDK val rudderClient = RudderClient.getInstance( this, WRITE_KEY, RudderConfig.Builder() .withDataPlaneUrl(DATA_PLANE_URL) .withFactory(SingularIntegrationFactory.FACTORY) .build() )
Identify
对于设备模式集成,Singular SDK 使用 RudderStack 的 identify 方法将用户 ID 映射到其自定义用户 ID。RudderStack 使用 Singular 的 setCustomUserId API 将已识别的用户 ID 转发给 Singular。
以下是 Android 和 iOS SDK 的 identify 调用示例:
[[RSClient getInstance] identify:@"1hKOmRA4el9Zt1WSfVJIVo4GRlm"];
RudderClient.getInstance()?.identify("1hKOmRA4el9Zt1WSfVJIVo4GRlm")
Track
track 调用可让您捕获任何用户操作及其关联属性。每个用户操作都被视为一个事件。
跟踪自定义事件
自定义 track 调用可让您跟踪应用中发生的自定义事件。RudderStack 将这些调用发送给 Singular,在那里它们被作为自定义安装后事件进行处理,并在相关报告中提供。
以下是 Android 和 iOS SDK 的自定义 track 调用示例:
[[RSClient getInstance] track:@"Product Reviewed" properties:@{
@"product_id" : @"345676543",
@"review_id" : @"123454387"
}];
RudderClient.getInstance()
?.track(
"Product Reviewed",
RudderProperty()
.putValue("product_id", "345676543")
.putValue("review_id", "123454387")
)
跟踪收入
Singular 支持跟踪收入事件。每当发送包含 revenue 属性的事件时(包括零值),它都会执行收入跟踪。您还可以选择将 currency 字段作为 ISO 代码 传递。
默认货币设置为 USD。
以下是 revenue track 调用示例:
[[RSClient getInstance] track:@"Order Completed" properties:@{
@"revenue" : @1251,
@"currency" : @"INR"
}];
RudderClient.getInstance()
?.track(
"Order Completed",
RudderProperty().putValue("revenue", 1251).putValue("currency", "INR")
)
Screen
screen 方法允许您记录用户何时看到移动屏幕,以及任何关联的可选属性。此调用类似于 Web 应用的 page 调用,但专用于您的移动设备。
以下是 Android 和 iOS SDK 的 screen 调用示例:
[[RSClient sharedInstance] screen:@"Home" properties:@{
@"category" : @"launcher"
}];
RudderClient.getInstance()
?.screen(
"Home",
RudderProperty().putValue("category", "launcher")
)
在上面的代码片段中,RudderStack 会捕获与所查看屏幕相关的所有信息,以及有关该屏幕的任何附加信息。
RudderStack 将 screen 事件作为自定义事件发送给 Singular。
Reset
reset 方法会重置当前用户的身份并创建一个新的匿名会话。应在用户注销时调用它。
RudderStack 调用 Singular 的 unsetCustomUserId 方法来重置用户的身份。
以下是 Android 和 iOS SDK 的 reset 调用示例:
[[RSClient getInstance] reset];
RudderClient.getInstance()?.reset();
实施 SKAdNetwork(SKAN)支持
在初始化 iOS SDK 之前添加以下代码,以将 SKAdNetwork 集成的控制权交给 Singular:
重要提示:
- 设置 manualSkanConversionManagement = true 将要求您手动更新自己的 Conversion Value。这将不允许 Singular 的 SKAN 模型代您更新 CV 值。将此项设置为 "false" 以启用"托管"模式。
- 仅当您的应用使用 iOS App Tracking Transparency(ATT)提示时,才应设置 waitForTrackingAuthorizationWithTimeoutInterval 。如果您显示 ATT,则应将其设置为 300。
Obj-C
[RudderSingularIntegration setSKANOptions:YES
isManualSkanConversionManagementMode:NO
withWaitForTrackingAuthorizationWithTimeoutInterval:@300
withConversionValueUpdatedHandler:^(NSInteger conversionValue){
// Receive a callback whenever the Conversion Value is updated
NSLog(@"SKAN handler %ld",conversionValue);
}];