注意
React Native SDK 2.7.3 以下版本存在已知问题。建议使用 2.7.3 及以上版本。
请使用 npm 安装 airbridge-react-native-sdk
。
npm install --save airbridge-react-native-sdk
请执行以下命令:
cd ios
pod install
react-native link airbridge-react-native-sdk
请在 Project 的 index.js
中添加以下代码,以获取 SDK 对象:
import Airbridge from 'airbridge-react-native-sdk';
请在 android/app/src/main/java/.../MainApplication
文件的 onCreate
函数添加以下代码:
import co.ab180.airbridge.reactnative.AirbridgeRN
//...
override fun onCreate() {
super.onCreate()
...
AirbridgeRN.init(this, "YOUR_APP_NAME", "YOUR_APP_TOKEN")
...
}
import co.ab180.airbridge.reactnative.AirbridgeRN;
//...
@Override
public void onCreate() {
super.onCreate();
...
AirbridgeRN.init(this, "YOUR_APP_NAME", "YOUR_APP_TOKEN");
...
}
YOUR_APP_NAME
和 YOUR_APP_SDK_TOKEN
可在 Airbridge 面板的 [设置]>[Token] 获取。
请在 ios/[Project 名称]/AppDelegate.m
文件的 import
部分添加以下代码:
#import <AirbridgeRN/AirbridgeRN.h>
import AirbridgeRN
请在 ios/[Project 名称]/AppDelegate.m
文件的 application:didFinishLaunchingWithOptions:
函数添加以下代码:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
[AirbridgeRN getInstance:@"YOUR_APP_TOKEN" appName:@"YOUR_APP_NAME" withLaunchOptions:launchOptions];
...
}
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
AirbridgeRN.getInstance("YOUR_APP_TOKEN", appName:"YOUR_APP_NAME", withLaunchOptions:launchOptions)
}
YOUR_APP_NAME
和 YOUR_APP_SDK_TOKEN
可在 Airbridge 面板的 [设置]>[Token] 获取。
请在 Project 文件夹中创建 airbridge.json
文件。
请以 JSON 格式进行设置。如果使用 React Native 0.59.X 及以下版本,还需要进行以下设置:
请导航至 [Xcode]>[Project File]>[Build Phases]>[Copy Bundle Resources]。
请点击 +
按钮添加 airbridge.json
文件。
{
"sessionTimeoutSeconds": 300,
"autoStartTrackingEnabled": true,
"userInfoHashEnabled": true,
"trackAirbridgeLinkOnly": false,
"facebookDeferredAppLinkEnabled": false,
"metaInstallReferrer": "YOUR_META_APP_ID",
"sdkSignatureSecretID": "YOUR_SDK_SIGNATURE_SECRET_ID",
"sdkSignatureSecret": "YOUR_SDK_SIGNATURE_SECRET",
"locationCollectionEnabled": false,
"trackingAuthorizeTimeoutSeconds": 30,
"logLevel": "warning"
}
注意
trackingAuthorizeTimeoutSeconds
的默认值为 30 秒。在实际应用时,请根据 App 的用户体验(UX)和 ATT 弹窗设置来调整该值。有关更多信息,请参阅本指南的 “Tracking Authorize Timeout 设置(仅限 iOS)” 部分。
名称 | 类型 | 默认值 | 说明 |
---|---|---|---|
sessionTimeoutSeconds | Number | 300 | 即使用户重新启用 App,如果是在设定的会话期间内,也会被视为同一会话,不会重新发送 App 启用事件。 |
autoStartTrackingEnabled | Boolean | true | 如果设置为 |
userInfoHashEnabled | Boolean | true | 如果设置为 |
trackAirbridgeLinkOnly | Boolean | false | 如果设置为 |
facebookDeferredAppLinkEnabled | Boolean | false | 当设置为 |
metaInstallReferrer | String | null | (仅限 Android)设置 Meta Install Referrer 收集功能。 此功能从 |
locationCollectionEnabled | Boolean | false | (仅限 Android)如果设置为 使用此功能需要在 |
trackingAuthorizeTimeoutSeconds | Number | 30 | (仅限 iOS)如果设置 |
sdkSignatureSecretID | String | null | 启用 SDK 伪造(SDK Spoofing)防止功能。必须同时应用已发放的 Secret 和 Secret ID。 |
sdkSignatureSecret | String | null | 启用 SDK 伪造(SDK Spoofing)防止功能。必须同时应用已发放的 Secret 和 Secret ID。 |
logLevel | String | warning | 设置 Airbridge log 输出级别。
|
请查看安装并启用 App 时,安装(Install)事件是否收集到。
从 SDK 发生的事件可在 Airbridge 面板的 [原始数据]>[App 实时记录] 查看。实时记录最多可能会有 5 分钟的延迟。
请导航至 Airbridge 面板的 [原始数据]>[App 实时记录]。
请在搜索栏中输入已安装并启用 App 的设备的 GAID(Android)或 IDFA(iOS)。
请参阅以下指南在 Airbridge 面板进行深度链接设置:
请注册深度链接或延迟深度链接(Deferred Deep Link)发生时调用的函数。
Airbridge.deeplink.setDeeplinkListener((deeplink) => {
// `딥링크` 또는 `지연된 딥링크` 가 발생했을 때, 작동할 코드
// deeplink = YOUR_SCHEME://...
console.log(deeplink);
});
打开 App 的所有深度链接将传递至 DeeplinkCallback
。其中,Airbridge 深度链接将以在 Airbridge 面板中注册的 iOS URI Scheme 格式 YOUR_SCHEME://...
传递。
请在 android/app/src/main/AndroidManifest.xml
文件的 MainActivity 区域添加 android:launchMode
和 intent-filter
语句,如下所示:
<activity android:name=".MainActivity"
android:launchMode="singleTask"
...>
<intent-filter android:autoVerify="true">
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:scheme="http" android:host="YOUR_APP_NAME.deeplink.page" />
<data android:scheme="https" android:host="YOUR_APP_NAME.deeplink.page" />
</intent-filter>
<intent-filter android:autoVerify="true">
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:scheme="http" android:host="YOUR_APP_NAME.airbridge.io" />
<data android:scheme="https" android:host="YOUR_APP_NAME.airbridge.io" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:scheme="YOUR_SCHEME" />
</intent-filter>
...
<activity/>
请将 YOUR_APP_NAME
替换为 App 名称,并将 YOUR_SCHEME
替换为在 Airbridge 面板中注册的 URI Scheme。
请在 android/app/src/main/java/.../MainActivity
文件添加以下代码:
override fun onResume() {
super.onResume()
AirbridgeRN.processDeeplinkData(intent)
}
override fun onNewIntent(intent: Intent?) {
super.onNewIntent(intent)
setIntent(intent)
}
@Override
protected void onResume() {
super.onResume();
AirbridgeRN.processDeeplinkData(getIntent());
}
@Override
public void onNewIntent(Intent intent) {
super.onNewIntent(intent);
setIntent(intent);
}
请导航至 [Xcode]>[Project File]>[Info]>[URL Types]。
请在 Identifier 和 URL Schemes 输入在 Airbridge 面板注册的 URI Scheme。
注意
输入 URI Scheme 时请省略
://
。
请导航至 [Xcode]>[Project File]>[Signing & Capabilities]>[Associated Domains]。
请点击 +
按钮添加 applinks:YOUR_APP_NAME.airbridge.io
。
请点击 +
按钮添加 applinks:YOUR_APP_NAME.deeplink.page
。
YOUR_APP_NAME
可在 Airbridge 面板的 [设置] >[Token] 获取。
请打开 ios/[Project 名称]/AppDelegate.m
文件。
请添加以下代码:
- (BOOL)application:(UIApplication *)application
openURL:(NSURL *)url
options:(NSDictionary<UIApplicationOpenURLOptionsKey, id>*)options
{
NSLog(@"openURL : %@", url);
[AirbridgeRN.deeplink handleURLSchemeDeeplink:url];
return YES;
}
func application(_ app: UIApplication,
open url: URL,
options: [UIApplication.OpenURLOptionsKey : Any] = [:]) -> Bool
{
NSLog(@"openURL : %@", url)
AirbridgeRN.deeplink()?.handleURLSchemeDeeplink(url)
return true
}
如 target iOS 8.x 及以下版本,请额外添加以下代码:
- (BOOL)application:(UIApplication*)application
openURL:(NSURL*)url
sourceApplication:(NSString*)sourceApplication
annotation:(id)annotation
{
NSLog(@"openURL : %@", url);
[AirbridgeRN.deeplink handleURLSchemeDeeplink:url];
return YES;
}
func application(_ application: UIApplication,
open url: URL,
sourceApplication: String?,
annotation: Any) -> Bool
{
NSLog(@"openURL : %@", url)
AirbridgeRN.deeplink()?.handleURLSchemeDeeplink(url);
return true;
}
请打开 ios/[Project 名称]/AppDelegate.m
文件。
请添加以下代码:
- (BOOL)application:(UIApplication*)application
continueUserActivity:(NSUserActivity*)userActivity
restorationHandler:(void (^)(NSArray* _Nullable))restorationHandler
{
NSLog(@"continueUserActivity : %@", userActivity.webpageURL);
[AirbridgeRN.deeplink handleUserActivity:userActivity];
return YES;
}
func application(_ application: UIApplication,
continue userActivity: NSUserActivity,
restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void) -> Bool
{
AirbridgeRN.deeplink()?.handle(userActivity)
return true
}
1. 请点击在 Airbridge 面板注册的 YOUR_SCHEME://...
格式的 iOS URI Scheme。
2. 请检查是否打开了正确的 App 页面、并且在 Airbridge 面板的 [原始数据]>[App 实时记录] 存在深度链接事件。
您可在 SDK 中设置用户标识符信息,使以后收集的所有事件包含用户标识符信息。
名称 | 说明 | 限制 |
---|---|---|
ID | 用户 ID | - |
用户邮箱 | 将自动进行 SHA256 哈希处理(可选停用) | |
phone | 用户电话号码 | 将自动进行 SHA256 哈希处理(可选停用) |
attributes | 用户属性 | - 最多可设置 100 个。 |
alias | 可以代表用户的其他 ID | - 最多可设置 10 个。 |
Airbridge.state.setUser({
ID: 'persondoe1',
email: 'persondoe1@example.com',
});
Airbridge.state.setUser({
email: 'persondoe2@example.com',
phone: '+14151231234',
});
Airbridge.state.updateUser({
ID: 'persondoe3',
});
上述代码的运行方式如下:
User = { ID: 'persondoe1', email: '[persondoe1@example.com](mailto:persondoe1@example.com)' }
=> User = { email: '[persondoe1@example.com](mailto:persondoe1@example.com)', phone: '+14151231234' }
=> User = { ID: 'persondoe3', email: '[persondoe1@example.com](mailto:persondoe1@example.com)', phone: '+14151231234' }
您可以为提高 MTA(Multi-touch Attribution, 多触点归因)分析的准确性、内部数据分析以及第三方解决方案集成等目的设置附加用户属性。
Airbridge.state.updateUser({
attributes: {
age_group: "30",
gender: "Female"
}
});
请按照以下步骤确保您设置的的用户信息通过 SDK 正确发送。
配置用户信息。
使用 SDK 发送事件。
前往 Airbridge 面板 [原始数据]>[App 实时记录] 点击事件。
检查 user
块下的用户信息是否正确。
您可在 SDK 中设置设备标识符信息,使以后收集的所有事件包含设备标识符信息。设置后,无论 App 是否关闭,设备标识符信息将保留,除非手动删除。
Airbridge.setDeviceAlias("ADD_YOUR_KEY", "AND_YOUR_VALUE");
Airbridge.removeDeviceAlias("DELETE_THIS_KEY");
Airbridge.clearDeviceAlias();
方法 | 说明 |
---|---|
setDeviceAlias(key: string, value: string) | 将键值对添加到设备标识符中。 |
removeDeviceAlias(key: string) | 删除相应于 key 的设备标识符。如果没有相应的设备标识符,则不执行任何操作。 |
clearDeviceAlias() | 删除所有设备标识符。 |
当发生重要的用户行为时,您可以将该应用内事件发送至 Airbridge 分析。
虽然事件参数是可选的,但建议添加更多参数,以便提供更准确的统计数据。
event options
可以使用 action
、label
、value
、semanticAttributes
、customAttributes
。
/**
* Send event to server.
* @param {string} category event name
* @param {EventOption} [option={}] event options
*/
trackEvent(category: string, option?: EventOption): void;
您可使用 SDK 发送用户事件。用户事件支持 action
、label
、value
、semanticAttributes
、customAttributes
。
发送注册事件时,请使用 setUser
输入用户标识符信息,然后发送 AirbridgeCategory.SIGN_UP
事件。
Airbridge.state.setUser({
ID: 'test',
email: 'test@ab180.co',
phone: '000-0000-0000',
});
Airbridge.trackEvent(AirbridgeCategory.SIGN_UP);
发送登录事件时,如果用户标识符信息尚未输入,请使用 setUser
输入用户标识符信息,然后发送 AirbridgeCategory.SIGN_IN
。
Airbridge.state.setUser({
ID: 'test',
email: 'test@ab180.co',
phone: '000-0000-0000',
});
Airbridge.trackEvent(AirbridgeCategory.SIGN_IN);
发送退出登录事件时,请发送 AirbridgeCategory.SIGN_OUT
事件,然后重置用户标识符信息。
Airbridge.trackEvent(AirbridgeCategory.SIGN_OUT);
Airbridge.state.setUser({});
您可使用 SDK 发送电商事件。电商事件支持 action
、label
、value
、semanticAttributes
、customAttributes
。
在电商事件中,您可使用 semanticAttributes
发送产品信息。除了预定义的 key 外,还可以使用自定义 key。
Airbridge.trackEvent(AirbridgeCategory.HOME_VIEW);
Airbridge.trackEvent(AirbridgeCategory.SEARCH_RESULT_VIEW, {
semanticAttributes: {
[AirbridgeAttributes.QUERY]: 'product'
[AirbridgeAttributes.PRODUCTS]: [
{
[AirbridgeProduct.PRODUCT_ID]: 'coke_zero',
[AirbridgeProduct.NAME]: 'Coke Zero',
[AirbridgeProduct.PRICE]: 1.99,
[AirbridgeProduct.CURRENCY]: 'USD',
[AirbridgeProduct.POSITION]: 1,
[AirbridgeProduct.QUANTITY]: 1,
},
{
[AirbridgeProduct.PRODUCT_ID]: 'burger_cheese_double',
[AirbridgeProduct.NAME]: 'Double Cheeseburger',
[AirbridgeProduct.PRICE]: 3.99,
[AirbridgeProduct.CURRENCY]: 'USD',
[AirbridgeProduct.POSITION]: 2,
[AirbridgeProduct.QUANTITY]: 1,
},
]
}
});
Airbridge.trackEvent(AirbridgeCategory.PRODUCT_LIST_VIEW, {
semanticAttributes: {
[AirbridgeAttributes.PRODUCT_LIST_ID]: 'ID-1234567890'
[AirbridgeAttributes.PRODUCTS]: [
{
[AirbridgeProduct.PRODUCT_ID]: 'coke_zero',
[AirbridgeProduct.NAME]: 'Coke Zero',
[AirbridgeProduct.PRICE]: 1.99,
[AirbridgeProduct.CURRENCY]: 'USD',
[AirbridgeProduct.POSITION]: 1,
[AirbridgeProduct.QUANTITY]: 1,
},
{
[AirbridgeProduct.PRODUCT_ID]: 'burger_cheese_double',
[AirbridgeProduct.NAME]: 'Double Cheeseburger',
[AirbridgeProduct.PRICE]: 3.99,
[AirbridgeProduct.CURRENCY]: 'USD',
[AirbridgeProduct.POSITION]: 2,
[AirbridgeProduct.QUANTITY]: 1,
},
]
}
});
Airbridge.trackEvent(AirbridgeCategory.PRODUCT_DETAILS_VIEW, {
semanticAttributes: {
[AirbridgeAttributes.PRODUCTS]: [
{
[AirbridgeProduct.PRODUCT_ID]: 'coke_zero',
[AirbridgeProduct.NAME]: 'Coke Zero',
[AirbridgeProduct.PRICE]: 1.99,
[AirbridgeProduct.CURRENCY]: 'USD',
[AirbridgeProduct.POSITION]: 1,
[AirbridgeProduct.QUANTITY]: 1,
},
]
}
});
Airbridge.trackEvent(AirbridgeCategory.ADD_TO_CART, {
value: 5.98,
semanticAttributes: {
[AirbridgeAttributes.CART_ID]: 'ID-1234567890',
[AirbridgeAttributes.CURRENCY]: 'USD',
[AirbridgeAttributes.PRODUCTS]: [
{
[AirbridgeProduct.PRODUCT_ID]: 'coke_zero',
[AirbridgeProduct.NAME]: 'Coke Zero',
[AirbridgeProduct.PRICE]: 1.99,
[AirbridgeProduct.CURRENCY]: 'USD',
[AirbridgeProduct.POSITION]: 1,
[AirbridgeProduct.QUANTITY]: 1,
},
{
[AirbridgeProduct.PRODUCT_ID]: 'burger_cheese_double',
[AirbridgeProduct.NAME]: 'Double Cheeseburger',
[AirbridgeProduct.PRICE]: 3.99,
[AirbridgeProduct.CURRENCY]: 'USD',
[AirbridgeProduct.POSITION]: 2,
[AirbridgeProduct.QUANTITY]: 1,
},
]
}
});
Airbridge.trackEvent(AirbridgeCategory.ORDER_COMPLETED, {
value: 5.98,
semanticAttributes: {
[AirbridgeAttributes.TRANSACTION_ID]: 'transactionID-purchase',
[AirbridgeAttributes.CURRENCY]: 'USD',
[AirbridgeAttributes.IN_APP_PURCHASED]: true,
[AirbridgeAttributes.PRODUCTS]: [
{
[AirbridgeProduct.PRODUCT_ID]: 'coke_zero',
[AirbridgeProduct.NAME]: 'Coke Zero',
[AirbridgeProduct.PRICE]: 1.99,
[AirbridgeProduct.CURRENCY]: 'USD',
[AirbridgeProduct.POSITION]: 1,
[AirbridgeProduct.QUANTITY]: 1,
},
{
[AirbridgeProduct.PRODUCT_ID]: 'burger_cheese_double',
[AirbridgeProduct.NAME]: 'Double Cheeseburger',
[AirbridgeProduct.PRICE]: 3.99,
[AirbridgeProduct.CURRENCY]: 'USD',
[AirbridgeProduct.POSITION]: 2,
[AirbridgeProduct.QUANTITY]: 1,
},
]
}
});
1. 请通过 SDK 发送事件。
2. 请在 Airbridge 面板的 [原始数据]>[App 实时记录] 查看是否存在在步骤 1. 发送的事件。
MIR 收集设置在 airbridge-react-native-sdk
2.6.0 及以上版本可用。请在 airbridge.json
添加以下代码设置 MIR 收集。
完成设置后,需要在 Airbridge 面板输入 Install Referrer Decryption Key,以查看解密后的 MIR。有关输入 Install Referrer Decryption Key 的方法,请参阅 本指南。
{
"metaInstallReferrer": "YOUR_META_APP_ID"
}
如果由于隐私法等原因无法收集广告 ID(Advertising ID),您可以使用移除了广告 ID 收集功能的 Restricted SDK。airbridge-react-native-sdk-restricted
从 2.5.3 版本开始支持。
请使用 npm 安装 airbridge-react-native-sdk-restricted
。
npm install --save airbridge-react-native-sdk-restricted
请执行以下命令:
cd ios
pod install
react-native link airbridge-react-native-sdk-restricted
请在 Project 的 index.js
中添加以下代码,以获取 SDK 对象:
import Airbridge from 'airbridge-react-native-sdk-restricted';
您可通过 SDK 签名防止 SDK 伪造(SDK Spoofing)。SDK 签名从 airbridge_react_native_sdk
2.3.0 版本开始可用。
请以 JSON 格式将以下设置输入 Project 文件夹的 airbridge.json
文件:
{
"sdkSignatureSecretID": "YOUR_SDK_SIGNATURE_SECRET_ID",
"sdkSignatureSecret": "YOUR_SDK_SIGNATURE_SECRET"
}
为了设置 SDK 签名,需要 SDK 签名凭证。请参阅 本指南 获取 SDK 签名凭证。
您可以设置 airbridge.json 文件的 sessionTimeoutSeconds
字段,以在设定的会话期间内,即使用户重新启用 App,也可判断为同一个会话,而不重新发送 App 启用事件。
会话过期时间的单位为毫秒(Millisecond),取值范围为从 0 到 604800000(7 天)。
会话过期时间的默认值为 1000 * 60 * 5
(5 分钟)。
如果出于内部数据分析等目的需要发送未经哈希处理的用户标识符信息,可以设置 airbridge.json 文件的 userInfoHashEnabled
字段,以停止对 User Email 和 User Phone 信息的哈希处理。
注意
由于此选项将敏感个人信息提供给第三方,因此必须事先采取额外的内部安全措施。
您可以通过设置 airbridge.json 文件的 facebookDeferredAppLinkEnabled
字段,以使用 Airbridge SDK 收取 Facebook 的 Deferred App Link。
当 facebookDeferredAppLinkEnabled
设置为 YES
、且已安装 Facebook SDK 时,SDK 将收取 Facebook Deferred App Link。
该功能需要先行设置 Facebook SDK,请参阅 Facebook 文档 设置 Facebook SDK。
如果由于 App 内的多个深度链接操作,导致难以通过 Airbridge 一目了然地查看再互动(Re-engagement)绩效,您可以通过设置 airbridge.json 文件的 trackAirbridgeLinkOnly
字段,过滤并仅查看由 Airbridge 深度链接产生的绩效。
开启此功能后,仅当通过符合以下条件的深度链接打开 App 时,才会监测深度链接绩效。
通过 Airbridge 面板中注册的深度链接打开 App 时
通过 airbridge.io
深度链接打开 App 时
通过 deeplink.page
深度链接打开 App 时
当 airbridge_referrer
query 信息存在时
此功能在根据隐私法(例:GDPR、CCPA)收集和传输数据时需要征得用户同意的情况下非常有用。
您可通过设置 airbridge.json 文件的 autoStartTrackingEnabled
字段,明确地开始收集和传输数据。
如果关闭此功能,则需要明确调用以下函数才能正确进行数据收集:
Airbridge.state.startTracking();
如果使用 AppTrackingTransparency.framework 显示询问用户是否允许追踪的弹窗,即使用户选择允许,由于安装事件会在选择之前发送,因此无法在安装事件中收集 IDFA。
您可以通过在之前添加的 airbridge.json 文件中为 trackingAuthorizeTimeoutSeconds
设置 timeout
,让 SDK 在发送安装事件之前等待用户在 timeout
内完成选择。
您可以通过在 airbridge.json 文件中设置 locationCollectionEnabled
字段,收集用户的位置信息。
此功能仅在 Android 上可用,且 AndroidManifest.xml
中必须包含以下权限设置:
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
注意
位置信息必须以合法目的和方式收集,使用此功能请谨慎。
为了打开 Airbridge 追踪链接,通常需要通过浏览器。但 Airbridge SDK 提供一项功能, 使追踪链接可以无需经过浏览器直接打开。
Airbridge.placement.click('https://abr.ge/~~~', 'ablog://main', 'https://airbridge.io');
Airbridge.placement.impression('https://abr.ge/~~~');
追踪链接被点击时调用,然后将点击计入点击统计,并将用户跳转到预先设置的 App、Web、或后备目的地。
追踪链接被展示在用户界面(UI)时调用,然后将展示计入展示统计。
注意
使用品牌域名时,无法使用包含自定义链接短 ID 的追踪链接。
示例 1、http://deeplink.ab180.co/custom → 不可用
示例 2、http://deeplink.ab180.co/a3b1c2 → 可用
示例 3、https://abr.ge/a3b1c2 → 可用
await Airbridge.state.deviceUUID()
有关卸载追踪设置,请参阅 本指南。
卸载追踪在 Airbridge React Native SDK 2.1.0 及以上版本可用。
Airbridge Android SDK 2.6.0 及以上版本
Airbridge iOS SDK 1.28.2 及以上版本
请将已获取的推送 Token 通过 registerPushToken
方法发送至 Airbridge。
Airbridge.registerPushToken(token);
如果传递的远程数据中 airbridge-uninstall-tracking
的值为 true
,请使 App 忽略该静默推送通知。
仅通过安装 Web SDK 无法追踪 App 安装、App 启用、深度链接调用等其他事件。您可通过以下设置在 Hybrid App 调用应用内事件:
let webInterface = Airbridge.createWebInterface(
'YOUR_WEB_TOKEN',
(command) => {
return `...`;
}
)
您可通过 Airbridge.createWebInterface
控制 Web Interface。请参阅 React Native Hybrid App 集成指南。
通过 Braze SDK 发送的推送通知打开深度链接时,可能发生无法收集 “Deeplink open(深度链接打开)”,然而收集 “Open(打开)” 的问题。原因如下:
Airbridge SDK 通过 Activity
的 action
和 intent
的 dataString
值判断深度链接打开和打开。然而,通过 Braze SDK 发送的推送通知打开深度链接时,App 会通过 Braze SDK 中定义的 NotificationTrampolineActivity
打开,但 Airbridge SDK 在该 Activity
的 action
和 intent
无法获取 dataString
值,导致无法判断事件。
该问题可以通过 Airbridge React Native SDK 版本 2.7.1 中新增的以下 interface
解决:
请在 android/app/src/main/java/.../MainApplication
文件的 onCreate
函数中添加以下代码:
import co.ab180.airbridge.reactnative.AirbridgeRN
import co.ab180.airbridge.reactnative.AirbridgeLifecycleIntegration
//...
@Override
public void onCreate() {
super.onCreate()
...
AirbridgeRN.init(this, "YOUR_APP_NAME", "YOUR_APP_TOKEN")
AirbridgeRN.setLifecycleIntegration {
if (it.javaClass.name.equals("com.braze.push.NotificationTrampolineActivity")) {
it.intent?.extras?.getString("uri")
} else {
null
}
}
...
}
import co.ab180.airbridge.reactnative.AirbridgeRN;
import co.ab180.airbridge.reactnative.AirbridgeLifecycleIntegration;
//...
@Override
public void onCreate() {
super.onCreate();
...
AirbridgeRN.init(this, "YOUR_APP_NAME", "YOUR_APP_TOKEN");
AirbridgeRN.setLifecycleIntegration(new AirbridgeLifecycleIntegration() {
@Override
public String getDataString(Activity activity) {
if (activity.getClass().getName().equals("com.braze.push.NotificationTrampolineActivity")
&& activity.getIntent() != null
&& activity.getIntent().getExtras() != null) {
return activity.getIntent().getExtras().getString("uri");
}
return null;
}
});
...
}
在使用 React Native SDK 1.5.0 及以上版本进行 iOS 构建时,由于不支持 Bitcode,可能会出现如下错误:
ld: XCFrameworkIntermediates/AirBridge/AirBridge.framework/AirBridge(AirBridge-arm64-master.o)' does not contain bitcode. You must rebuild it with bitcode enabled (Xcode setting ENABLE_BITCODE)
从 React Native SDK 1.5.0 版本起,Airbridge iOS SDK 升级至 1.28.0 版本,且 Airbridge iOS SDK 从 1.28.0 版本起停止支持 Bitcode。如遇到上述错误,请参阅 Bitcode 编译错误指南。
更新 SDK 时,请考虑以下内容:
对于 2023-09-04 或以后创建的 Airbridge App,2.7.3~2.5.1 版本中存在的深度链接回调提供的深度链接 URL 被解码 2 次的问题得到解决。
对于 2023-09-04 或以后创建的 Airbridge App,深度链接回调提供的深度链接 URL 中不再添加 airbridge_referrer
。
更新 iOS App 时,SKAN 转化值将以最后计算的值为准,不会进行额外计算。
2.5.1 以下版本计算 SKAN 转化值的时间最多为 24 小时。
对于新安装,这不会成为问题。
deeplink.page
已被弃用。从 2.5.1 版本开始,请使用 abr.ge
作为深度链接域名进行代码编写。
为了保持向后兼容性,deeplink.page
仍然受支持并可正常运行。
trackingAuthorizeTimeout
的默认值更改为 30 秒。
原有的 1.X.X 版本中的事件发送 API 已被删除,并被以下 API 所取代:
/**
* Send event to server.
* @param {string} category event name
* @param {EventOption} [option={}] event options
*/
trackEvent(category: string, option?: EventOption): void;
有关更多信息,请参阅 React Native 2.X.X 迁移指南。
请替换 package.json
中的 Airbridge React Native SDK 版本。
...
"airbridge-react-native-sdk": "1.2.1",
...
请执行以下命令:
npm install
cd ios
pod install
npm install
react-native link airbridge-react-native-sdk
请在 android/app/src/main/java/.../MainActivity
文件中修改以下代码:
- AirbridgeRN.deeplink()?.handleURLSchemeDeeplink(url, withSourceBundle: sourceApplication)
+ AirbridgeRN.deeplink()?.handleURLSchemeDeeplink(url)
请在 ios/[Project 名称]/AppDelegate
文件中修改以下代码:
- AirbridgeRN.deeplink()?.handleURLSchemeDeeplink(url, withSourceBundle: sourceApplication)
+ AirbridgeRN.deeplink()?.handleURLSchemeDeeplink(url)
请在 Project 文件夹中创建 airbridge.json
文件。
请以 JSON 格式添加配置值。
示例
{
"sessionTimeoutSeconds": 300,
"autoStartTrackingEnabled": true,
"userInfoHashEnabled": true,
"trackAirbridgeLinkOnly": false,
"facebookDeferredAppLinkEnabled": false,
"locationCollectionEnabled": false
}
名称 | 类型 | 默认值 | 说明 |
---|---|---|---|
sessionTimeoutSeconds | Number | 300 | 即使用户重新启用 App,如果是在设定的会话期间内,也会被视为同一会话,不会重新发送 App 启用事件。 |
autoStartTrackingEnabled | Boolean | true | 如果设置为 |
userInfoHashEnabled | Boolean | true | 如果设置为 |
trackAirbridgeLinkOnly | Boolean | false | 如果设置为 |
facebookDeferredAppLinkEnabled | Boolean | false | 当设置为 |
locationCollectionEnabled | Boolean | false | (仅限 Android)如果设置为 使用此功能需要在 |
请 uninstall
旧版本的 SDK。
npm uninstall react-native-airbridge-bridge
请 install
新版本的 SDK。
npm install --save airbridge-react-native-sdk
请执行以下命令:
cd ios
pod install
react-native link airbridge-react-native-sdk
DeeplinkListener
请删除 getInitialDeeplink
函数,仅使用 setDeeplinkListener
函数。
- Airbridge.deeplink.getInitialDeeplink().then((deeplink) => {
-
- });
.
. Airbridge.deeplink.setDeeplinkListner((deeplink) => {
.
. });
AndroidManifest.xml
请在 android/app/src/main/AndroidManifest.xml
文件的 MainActivity
区域中插入以下 intent-filter
语句:
+ <intent-filter android:autoVerify="true">
+ <action android:name="android.intent.action.VIEW" />
+
+ <category android:name="android.intent.category.DEFAULT" />
+ <category android:name="android.intent.category.BROWSABLE" />
+
+ <data android:scheme="http" android:host="YOUR_APP_NAME.deeplink.page" />
+ <data android:scheme="https" android:host="YOUR_APP_NAME.deeplink.page" />
+ </intent-filter>
. <intent-filter android:autoVerify="true">
. <action android:name="android.intent.action.VIEW" />
.
. <category android:name="android.intent.category.DEFAULT" />
. <category android:name="android.intent.category.BROWSABLE" />
.
. <data android:scheme="http" android:host="YOUR_APP_NAME.airbridge.io" />
. <data android:scheme="https" android:host="YOUR_APP_NAME.airbridge.io" />
. </intent-filter>
. <intent-filter>
. <action android:name="android.intent.action.VIEW" />
.
. <category android:name="android.intent.category.DEFAULT" />
. <category android:name="android.intent.category.BROWSABLE" />
.
. <data android:scheme="EXAMPLE_SCHEME" />
. </intent-filter>
MainActivity.java
请修改 android/app/src/main/java/.../MainActivity.java
。
. import co.ab180.airbridge.reactnative.AirbridgeRN;
.
. public class MainActivity extends ReactActivity {
+ @Override
+ protected void onResume() {
+ super.onResume();
+
+ AirbridgeRN.getDeeplink().fetch(getIntent());
+ }
+
. @Override
. public void onNewIntent(Intent intent) {
. super.onNewIntent(intent);
. setIntent(intent);
. }
. }
Xcode
Universal Link
请导航至 [Xcode]>[Project File]>[Signing & Capabilities]>[Associated Domains]。
请点击 +
按钮并添加 applinks:YOUR_APP_NAME.deeplink.page
。
YOUR_APP_NAME
可在 Airbridge 面板的 [设置] >[Token] 获取。
AppDelegate.m
请修改 ios/.../AppDelegate.m
。
. - (BOOL)application:(UIApplication *)application
. openURL:(NSURL *)url
. options:(NSDictionary<UIApplicationOpenURLOptionsKey, id>*)options
. {
- [AirbridgeRN.instance handleURLSchemeDeeplink:url
- withSourceBundle:options[UIApplicationOpenURLOptionsSourceApplicationKey]];
+ [AirbridgeRN.deeplink handleURLSchemeDeeplink:url
+ withSourceBundle:options[UIApplicationOpenURLOptionsSourceApplicationKey]];
.
. return YES;
. }
.
. - (BOOL)application:(UIApplication*)application
. openURL:(NSURL*)url
. sourceApplication:(NSString*)sourceApplication
. annotation:(id)annotation
. {
- [AirbridgeRN.instance handleURLSchemeDeeplink:url
- withSourceBundle:sourceApplication];
+ [AirbridgeRN.deeplink handleURLSchemeDeeplink:url
+ withSourceBundle:sourceApplication];
.
. return YES;
. }
如 target iOS 8.x 或以下版本,请额外修改以下代码:
. - (BOOL)application:(UIApplication*)application
. continueUserActivity:(NSUserActivity*)userActivity
. restorationHandler:(void (^)(NSArray* _Nullable))restorationHandler
. {
- [AirbridgeRN.instance handleUniversalDeeplink:userActivity.webpageURL];
+ [AirbridgeRN.deeplink handleUniversalLink:userActivity.webpageURL];
.
. return YES;
. }
请 unlink
旧版本的 SDK。
react-native unlink react-native-airbridge-bridge
如果 react-native unlink react-native-airbridge-bridge
出错:
1. 请修改 android/app/src/main/java/.../MainApplication.java
。
- import com.reactlibrary.AirbridgeBridgePackage;
. @Override
. protected List<ReactPackage> getPackages() {
. return Arrays.<ReactPackage>asList(
+ new MainReactPackage()
- new MainReactPackage(),
- new AirbridgeBridgePackage()
. );
. }
2. 请修改 ios/xxx.xcodeproj。
3. 请删除 Libraries 中的 AirbridgeBridge.xcodeproj。
请 uninstall
旧版本的 SDK。
npm uninstall react-native-airbridge-bridge
请 install
新版本的 SDK。
npm install --save airbridge-react-native-sdk
请 link
新版本的 SDK。
react-native link airbridge-react-native-sdk
请将 index.js
中的 require
改为 import
。
- const Airbridge = require('react-native-airbridge-bridge');
+ import Airbridge from 'airbridge-react-native-sdk';
请修改 android/app/build.gradle。
. dependencies {
. ...
- implementation 'io.airbridge:sdk-android:1.5.+'
- implementation 'com.android.installreferrer:installreferrer:1.0'
. ...
. }
请修改 android/app/src/main/AndroidManifest.xml
。
permission
- <uses-permission android:name="android.permission.INTERNET" />
- <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
MainActivity
. <activity android:name=".MainActivity"
...
+ android:launchMode="singleTask">
请修改 android/app/src/main/java/.../MainApplication.java
。
- import io.airbridge.*;
. @Override
. public void onCreate() {
. super.onCreate();
- AirBridge.init(this, "[앱 이름]", "[앱 토큰]");
+ AirbridgeRN.init(this, "[앱 이름]", "[앱 토큰]");
. ...
. }
请修改 android/app/src/main/java/.../MainActivity.java
。
+ import co.ab180.airbridge.reactnative.AirbridgeRN;
+ public class MainActivity extends ReactActivity {
+ @Override
+ public void onNewIntent(Intent intent) {
+ super.onNewIntent(intent);
+ setIntent(intent);
+ }
+ }
请修改 ios/Podfile
。
target '[Project Name]' do
- pod 'AirBridge', '1.6.2'
end
请在 terminal 执行以下命令:
pod install
请修改 ios/.../AppDelegate.m
。
- #import <AirBridge/AirBridge.h>
+ #import <AirbridgeRN/AirbridgeRN.h>
. - (BOOL)application:(UIApplication *)application
. didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
. {
- [AirBridge getInstance:@"YOUR_APP_SDK_TOKEN(앱 토큰)" appName:@"YOUR_APP_NAME(앱 이름)" withLaunchOptions:launchOptions];
+ [AirbridgeRN getInstance:@"YOUR_APP_SDK_TOKEN(앱 토큰)" appName:@"YOUR_APP_NAME(앱 이름)" withLaunchOptions:launchOptions];
. ...
. }
. - (BOOL)application:(UIApplication *)application
. openURL:(NSURL *)url
. options:(NSDictionary<UIApplicationOpenURLOptionsKey,id> *)options
. {
- [[AirBridge instance] handleURL:url];
+ [AirbridgeRN.instance handleURLSchemeDeeplink:url withSourceBundle:options[UIApplicationOpenURLOptionsSourceApplicationKey]];.
.
. return YES;
. }
. - (BOOL)application:(UIApplication *)application
. openURL:(NSURL *)url
. sourceApplication:(NSString *)sourceApplication
. annotation:(id)annotation
. {
- [[AirBridge instance] handleURL:url];
+ [AirbridgeRN.instance handleURLSchemeDeeplink:url withSourceBundle:options[UIApplicationOpenURLOptionsSourceApplicationKey]];
.
. return YES;
. }
如 target iOS 8.x 或以下版本,请额外修改以下代码:
. - (BOOL)application:(UIApplication *)application
. continueUserActivity:(NSUserActivity *)userActivity
. restorationHandler:(void (^)(NSArray * _Nullable))restorationHandler
. {
- [[AirBridge instance] handleURL:url];
+ [AirbridgeRN.instance handleUniversalDeeplink:userActivity.webpageURL];
.
. return YES;
. }
Was this page helpful?