React Native SDK

NPM Version

SDK 安装


注意

React Native SDK 2.7.3 以下版本存在已知问题。建议使用 2.7.3 及以上版本。

包安装

npm

请使用 npm 安装 airbridge-react-native-sdk

1
npm install --save airbridge-react-native-sdk

请执行以下命令:

12
cd ios
pod install

Project 设置

import

请在 Project 的 index.js 中添加以下代码,以获取 SDK 对象:

1
import Airbridge from 'airbridge-react-native-sdk';

Android

MainApplication

请在 android/app/src/main/java/.../MainApplication 文件的 onCreate 函数添加以下代码:

12345678910
import co.ab180.airbridge.reactnative.AirbridgeRN

//...

override fun onCreate() {
    super.onCreate()
    ...
    AirbridgeRN.init(this, "YOUR_APP_NAME", "YOUR_APP_TOKEN")
    ...
}

YOUR_APP_NAME 和 YOUR_APP_SDK_TOKEN 可在 Airbridge 面板的 [设置]>[Token] 获取。

iOS

AppDelegate.m

请在 ios/[Project 名称]/AppDelegate.m 文件的 import 部分添加以下代码:

1
#import <AirbridgeRN/AirbridgeRN.h>

请在 ios/[Project 名称]/AppDelegate.m 文件的 application:didFinishLaunchingWithOptions: 函数添加以下代码:

1234
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    [AirbridgeRN getInstance:@"YOUR_APP_TOKEN" appName:@"YOUR_APP_NAME" withLaunchOptions:launchOptions];
    ...
}

YOUR_APP_NAME 和 YOUR_APP_SDK_TOKEN 可在 Airbridge 面板的 [设置]>[Token] 获取。

通用设置

airbridge.json

  1. 请在 Project 文件夹中创建 airbridge.json 文件。

  2. 请以 JSON 格式进行设置。如果使用 React Native 0.59.X 及以下版本,还需要进行以下设置:

    1. 请导航至 [Xcode]>[Project File]>[Build Phases]>[Copy Bundle Resources]。

    2. 请点击 + 按钮添加 airbridge.json 文件。

示例
12345678910111213
{
    "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

如果设置为 false,则在调用 Airbridge.state.startTracking() 之前不会发送任何事件。

userInfoHashEnabled

Boolean

true

如果设置为 false,则在发送事件时不会对 User Email 和 User Phone 进行 SHA256 哈希处理。

trackAirbridgeLinkOnly

Boolean

false

如果设置为 true,则只有通过 Airbridge 深度链接打开 App 时才会发送深度链接事件。

facebookDeferredAppLinkEnabled

Boolean

false

当设置为 true、且已安装 Facebook SDK 时,将收取 Facebook Deferred AppLink。

metaInstallReferrer

String

null

(仅限 Android)设置 Meta Install Referrer 收集功能。
可以使用 facebookInstallReferrer 代替 metaInstallReferrer 键。如果同时设置了两个键,将优先应用 metaInstallReferrer

此功能从 airbridge-react-native-sdk 2.6.0 版本起可用。

locationCollectionEnabled

Boolean

false

(仅限 Android)如果设置为 true,可以收集设备的位置信息。

使用此功能需要在 AndroidManifest.xml 添加 2 个权限: android.permission.ACCESS_FINE_LOCATION android.permission.ACCESS_COARSE_LOCATION

trackingAuthorizeTimeoutSeconds

Number

30

(仅限 iOS)如果设置 timeout,SDK 将在 timeout 时间内延迟发送安装事件,等待用户在 ATT 弹窗中允许追踪。

sdkSignatureSecretID

String

null

启用 SDK 伪造(SDK Spoofing)防止功能。必须同时应用已发放的 Secret 和 Secret ID。

sdkSignatureSecret

String

null

启用 SDK 伪造(SDK Spoofing)防止功能。必须同时应用已发放的 Secret 和 Secret ID。

logLevel

String

warning

设置 Airbridge log 输出级别。 logLevel: "debug" | "info" | "warning" | "error" | "fault"

检查 SDK 安装

请查看安装并启用 App 时,安装(Install)事件是否收集到。

在 Airbridge 面板检查

从 SDK 发生的事件可在 Airbridge 面板的 [原始数据]>[App 实时记录] 查看。实时记录最多可能会有 5 分钟的延迟。

  1. 请导航至 Airbridge 面板的 [原始数据]>[App 实时记录]。

  2. 请在搜索栏中输入已安装并启用 App 的设备的 GAID(Android)或 IDFA(iOS)。

深度链接(Deep Link)设置

Airbridge 面板设置

请参阅以下指南在 Airbridge 面板进行深度链接设置:

Project 设置

Javascript

setDeeplinkListener

请注册深度链接或延迟深度链接(Deferred Deep Link)发生时调用的函数。

123456
Airbridge.deeplink.setDeeplinkListener((deeplink) => {
    // `딥링크` 또는 `지연된 딥링크` 가 발생했을 때, 작동할 코드
    // deeplink = YOUR_SCHEME://...

    console.log(deeplink);
});

打开 App 的所有深度链接将传递至 DeeplinkCallback。其中,Airbridge 深度链接将以在 Airbridge 面板中注册的 iOS URI Scheme 格式 YOUR_SCHEME://... 传递。

Android

AndroidManifest.xml

请在 android/app/src/main/AndroidManifest.xml 文件的 MainActivity 区域添加 android:launchMode 和 intent-filter 语句,如下所示:

12345678910111213141516171819202122232425262728293031
<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。

MainActivity

请在 android/app/src/main/java/.../MainActivity 文件添加以下代码:

12345678910
override fun onResume() {
    super.onResume()

    AirbridgeRN.processDeeplinkData(intent)
}

override fun onNewIntent(intent: Intent?) {
    super.onNewIntent(intent)
    setIntent(intent)
}

iOS

Scheme

  1. 请导航至 [Xcode]>[Project File]>[Info]>[URL Types]。

  2. 请在 Identifier 和 URL Schemes 输入在 Airbridge 面板注册的 URI Scheme。

注意

输入 URI Scheme 时请省略 ://

  1. 请导航至 [Xcode]>[Project File]>[Signing & Capabilities]>[Associated Domains]。

  2. 请点击 + 按钮添加 applinks:YOUR_APP_NAME.airbridge.io

  3. 请点击 + 按钮添加 applinks:YOUR_APP_NAME.deeplink.page

YOUR_APP_NAME 可在 Airbridge 面板的 [设置] >[Token] 获取。

AppDelegate.m

Scheme

  1. 请打开 ios/[Project 名称]/AppDelegate.m 文件。

  2. 请添加以下代码:

    12345678910
    - (BOOL)application:(UIApplication *)application
                openURL:(NSURL *)url
                options:(NSDictionary<UIApplicationOpenURLOptionsKey, id>*)options
    {
        NSLog(@"openURL : %@", url);
    
        [AirbridgeRN.deeplink handleURLSchemeDeeplink:url];
    
        return YES;
    }

  3. 如 target iOS 8.x 及以下版本,请额外添加以下代码:

    1234567891011
    - (BOOL)application:(UIApplication*)application
                openURL:(NSURL*)url
      sourceApplication:(NSString*)sourceApplication 
             annotation:(id)annotation
    {
        NSLog(@"openURL : %@", url);
    
        [AirbridgeRN.deeplink handleURLSchemeDeeplink:url];
    
        return YES;
    }

  1. 请打开 ios/[Project 名称]/AppDelegate.m 文件。

  2. 请添加以下代码:

    12345678910
    -  (BOOL)application:(UIApplication*)application
    continueUserActivity:(NSUserActivity*)userActivity
      restorationHandler:(void (^)(NSArray* _Nullable))restorationHandler
    {
        NSLog(@"continueUserActivity : %@", userActivity.webpageURL);
    
        [AirbridgeRN.deeplink handleUserActivity:userActivity];
    
        return YES;
    }

检查深度链接设置

1. 请点击在 Airbridge 面板注册的 YOUR_SCHEME://... 格式的 iOS URI Scheme。

2. 请检查是否打开了正确的 App 页面、并且在 Airbridge 面板的 [原始数据]>[App 实时记录] 存在深度链接事件。

用户设置

用户标识符设置

您可在 SDK 中设置用户标识符信息,使以后收集的所有事件包含用户标识符信息。

名称

说明

限制

ID

用户 ID

-

email

用户邮箱

将自动进行 SHA256 哈希处理(可选停用)

phone

用户电话号码

将自动进行 SHA256 哈希处理(可选停用)

attributes

用户属性

- 最多可设置 100 个。
- key 是 NSString 类型,最多为 128 个字符。
- key 必须符合正则表达式 ^ {
"h-0": "*$
- value 类型可以为 NSString 或 NSNumber,且如果是 NSString,则最多为 1024 个字符。

alias

可以代表用户的其他 ID

- 最多可设置 10 个。
- key 是 NSString 类型,最多为 128 个字符。
- key 必须符合正则表达式 ^ {
"h-0": "*$
- value 是 NSString 类型,最多为 1024 个字符。

示例代码

12345678910111213
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, 多触点归因)分析的准确性、内部数据分析以及第三方解决方案集成等目的设置附加用户属性。

123456
Airbridge.state.updateUser({
    attributes: {
      age_group: "30",
      gender: "Female"
    }
});

检查用户设置

请按照以下步骤确保您设置的的用户信息通过 SDK 正确发送。

  1. 配置用户信息。

  2. 使用 SDK 发送事件。

  3. 前往 Airbridge 面板 [原始数据]>[App 实时记录] 点击事件。

  4. 检查 user 块下的用户信息是否正确。

设备设置

设备标识符设置

您可在 SDK 中设置设备标识符信息,使以后收集的所有事件包含设备标识符信息。设置后,无论 App 是否关闭,设备标识符信息将保留,除非手动删除。

123
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 可以使用 actionlabelvaluesemanticAttributescustomAttributes

123456
/**
 * Send event to server.
 * @param {string} category event name
 * @param {EventOption} [option={}] event options
 */
trackEvent(category: string, option?: EventOption): void;

用户事件发送

您可使用 SDK 发送用户事件。用户事件支持 actionlabelvaluesemanticAttributescustomAttributes

注册(Sign-up)

发送注册事件时,请使用 setUser 输入用户标识符信息,然后发送 AirbridgeCategory.SIGN_UP 事件。

123456
Airbridge.state.setUser({
    ID: 'test',
    email: 'test@ab180.co',
    phone: '000-0000-0000',
});
Airbridge.trackEvent(AirbridgeCategory.SIGN_UP);

登录(Sign-in)

发送登录事件时,如果用户标识符信息尚未输入,请使用 setUser 输入用户标识符信息,然后发送 AirbridgeCategory.SIGN_IN

123456
Airbridge.state.setUser({
    ID: 'test',
    email: 'test@ab180.co',
    phone: '000-0000-0000',
});
Airbridge.trackEvent(AirbridgeCategory.SIGN_IN);

退出登录(Sign-out)

发送退出登录事件时,请发送 AirbridgeCategory.SIGN_OUT 事件,然后重置用户标识符信息。

12
Airbridge.trackEvent(AirbridgeCategory.SIGN_OUT);
Airbridge.state.setUser({});

电商事件发送

您可使用 SDK 发送电商事件。电商事件支持 actionlabelvaluesemanticAttributescustomAttributes

在电商事件中,您可使用 semanticAttributes 发送产品信息。除了预定义的 key 外,还可以使用自定义 key。

查看首页(View Home Screen)

1
Airbridge.trackEvent(AirbridgeCategory.HOME_VIEW);

查看搜索结果(View Search Result)

1234567891011121314151617181920212223
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,
            },
        ]
    }
});

查看产品列表(View Product List)

1234567891011121314151617181920212223
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,
            },
        ]
    }
});

查看产品详情(View Product Detail)

1234567891011121314
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,
            },
        ]
    }
});

加入购物车(Add to Cart)

12345678910111213141516171819202122232425
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,
            },
        ]
    }
});

完成订单(Order Complete)

1234567891011121314151617181920212223242526
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. 发送的事件。

高级设置

Meta Install Referrer(MIR)收集设置

MIR 收集设置在 airbridge-react-native-sdk 2.6.0 及以上版本可用。请在 airbridge.json 添加以下代码设置 MIR 收集。

完成设置后,需要在 Airbridge 面板输入 Install Referrer Decryption Key,以查看解密后的 MIR。有关输入 Install Referrer Decryption Key 的方法,请参阅 本指南

123
{
    "metaInstallReferrer": "YOUR_META_APP_ID"
}

Restricted SDK

如果由于隐私法等原因无法收集广告 ID(Advertising ID),您可以使用移除了广告 ID 收集功能的 Restricted SDK。airbridge-react-native-sdk-restricted 从 2.5.3 版本开始支持。

包安装

npm

请使用 npm 安装 airbridge-react-native-sdk-restricted

1
npm install --save airbridge-react-native-sdk-restricted

请执行以下命令:

12
cd ios
pod install

Project 设置

import

请在 Project 的 index.js 中添加以下代码,以获取 SDK 对象:

1
import Airbridge from 'airbridge-react-native-sdk-restricted';

SDK 签名(SDK Signature)设置

您可通过 SDK 签名防止 SDK 伪造(SDK Spoofing)。SDK 签名从 airbridge_react_native_sdk 2.3.0 版本开始可用。

请以 JSON 格式将以下设置输入 Project 文件夹的 airbridge.json 文件:

1234
{
    "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 分钟)。

停止用户标识符信息 SHA256 哈希处理设置

如果出于内部数据分析等目的需要发送未经哈希处理的用户标识符信息,可以设置 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 信息存在时

隐私保护设置

此功能在根据隐私法(例:GDPRCCPA)收集和传输数据时需要征得用户同意的情况下非常有用。

您可通过设置 airbridge.json 文件的 autoStartTrackingEnabled 字段,明确地开始收集和传输数据。

如果关闭此功能,则需要明确调用以下函数才能正确进行数据收集:

  • Airbridge.state.startTracking();

Tracking Authorize Timeout 设置(仅限 iOS)

如果使用 AppTrackingTransparency.framework 显示询问用户是否允许追踪的弹窗,即使用户选择允许,由于安装事件会在选择之前发送,因此无法在安装事件中收集 IDFA。

您可以通过在之前添加的 airbridge.json 文件中为 trackingAuthorizeTimeoutSeconds 设置 timeout,让 SDK 在发送安装事件之前等待用户在 timeout 内完成选择。

位置信息收集 (仅限 Android)

您可以通过在 airbridge.json 文件中设置 locationCollectionEnabled 字段,收集用户的位置信息。

此功能仅在 Android 上可用,且 AndroidManifest.xml 中必须包含以下权限设置:

12
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />

注意

位置信息必须以合法目的和方式收集,使用此功能请谨慎。

在 App 中使用追踪链接

为了打开 Airbridge 追踪链接,通常需要通过浏览器。但 Airbridge SDK 提供一项功能, 使追踪链接可以无需经过浏览器直接打开。

12
Airbridge.placement.click('https://abr.ge/~~~', 'ablog://main', 'https://airbridge.io');
Airbridge.placement.impression('https://abr.ge/~~~');

click

追踪链接被点击时调用,然后将点击计入点击统计,并将用户跳转到预先设置的 App、Web、或后备目的地。

impression

追踪链接被展示在用户界面(UI)时调用,然后将展示计入展示统计。

注意

使用品牌域名时,无法使用包含自定义链接短 ID 的追踪链接。

deviceUUID 获取

1
await Airbridge.state.deviceUUID()

卸载追踪设置

有关卸载追踪设置,请参阅 本指南

卸载追踪在 Airbridge React Native SDK 2.1.0 及以上版本可用。

  • Airbridge Android SDK 2.6.0 及以上版本

  • Airbridge iOS SDK 1.28.2 及以上版本

推送 Token 发送

请将已获取的推送 Token 通过 registerPushToken 方法发送至 Airbridge。

1
Airbridge.registerPushToken(token);

忽略用于卸载追踪的静默推送通知

如果传递的远程数据中 airbridge-uninstall-tracking 的值为 true,请使 App 忽略该静默推送通知。

Hybrid App 设置

仅通过安装 Web SDK 无法追踪 App 安装、App 启用、深度链接调用等其他事件。您可通过以下设置在 Hybrid App 调用应用内事件:

123456
let webInterface = Airbridge.createWebInterface(
        'YOUR_WEB_TOKEN',
        (command) => { 
            return `...`;
        }
    )

您可通过 Airbridge.createWebInterface 控制 Web Interface。请参阅 React Native Hybrid App 集成指南

故障排除

Braze 推送通知

通过 Braze SDK 发送的推送通知打开深度链接时,可能发生无法收集 “Deeplink open(深度链接打开)”,然而收集 “Open(打开)” 的问题。原因如下:

Airbridge SDK 通过 ActivityactionintentdataString 值判断深度链接打开和打开。然而,通过 Braze SDK 发送的推送通知打开深度链接时,App 会通过 Braze SDK 中定义的 NotificationTrampolineActivity 打开,但 Airbridge SDK 在该 Activityactionintent 无法获取 dataString 值,导致无法判断事件。

该问题可以通过 Airbridge React Native SDK 版本 2.7.1 中新增的以下 interface 解决:

MainApplication

请在 android/app/src/main/java/.../MainApplication 文件的 onCreate 函数中添加以下代码:

12345678910111213141516171819
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
        }
    }
    ...
}

Bitcode 编译错误

在使用 React Native SDK 1.5.0 及以上版本进行 iOS 构建时,由于不支持 Bitcode,可能会出现如下错误:

1
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 时,请考虑以下内容:

2.8.0

对于 2023-09-04 或以后创建的 Airbridge App,2.7.3~2.5.1 版本中存在的深度链接回调提供的深度链接 URL 被解码 2 次的问题得到解决。

2.5.1

对于 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 仍然受支持并可正常运行。

2.5.0

trackingAuthorizeTimeout 的默认值更改为 30 秒。

1.X.X → 2.X.X 更新

原有的 1.X.X 版本中的事件发送 API 已被删除,并被以下 API 所取代:

123456
/**
 * 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 迁移指南

1.1.X → 1.2.X 更新

npm

请替换 package.json 中的 Airbridge React Native SDK 版本。

123
...
    "airbridge-react-native-sdk": "1.2.1",
...

请执行以下命令:

123
npm install
cd ios
pod install

Android

请在 android/app/src/main/java/.../MainActivity 文件中修改以下代码:

12
-     AirbridgeRN.deeplink()?.handleURLSchemeDeeplink(url, withSourceBundle: sourceApplication)
+     AirbridgeRN.deeplink()?.handleURLSchemeDeeplink(url)

iOS

请在 ios/[Project 名称]/AppDelegate 文件中修改以下代码:

12
-     AirbridgeRN.deeplink()?.handleURLSchemeDeeplink(url, withSourceBundle: sourceApplication)
+     AirbridgeRN.deeplink()?.handleURLSchemeDeeplink(url)

设置
  1. 请在 Project 文件夹中创建 airbridge.json 文件。

  2. 请以 JSON 格式添加配置值。

示例

12345678
{
    "sessionTimeoutSeconds": 300,
    "autoStartTrackingEnabled": true,
    "userInfoHashEnabled": true,
    "trackAirbridgeLinkOnly": false,
    "facebookDeferredAppLinkEnabled": false,
    "locationCollectionEnabled": false
}

名称

类型

默认值

说明

sessionTimeoutSeconds

Number

300

即使用户重新启用 App,如果是在设定的会话期间内,也会被视为同一会话,不会重新发送 App 启用事件。

autoStartTrackingEnabled

Boolean

true

如果设置为 false,则在调用 Airbridge.state.startTracking() 之前不会发送任何事件。

userInfoHashEnabled

Boolean

true

如果设置为 false,则在发送事件时不会对 User Email 和 User Phone 进行 SHA256 哈希处理。

trackAirbridgeLinkOnly

Boolean

false

如果设置为 true,则只有通过 Airbridge 深度链接打开 App 时才会发送深度链接事件。

facebookDeferredAppLinkEnabled

Boolean

false

当设置为 true、且已安装 Facebook SDK 时,SDK 将收取 Facebook Deferred AppLink。

locationCollectionEnabled

Boolean

false

(仅限 Android)如果设置为 true,可以收集设备的位置信息。

使用此功能需要在 AndroidManifest.xml 添加 2 个权限: android.permission.ACCESS_FINE_LOCATION android.permission.ACCESS_COARSE_LOCATION

1.0.X → 1.1.X 更新

Install

uninstall 旧版本的 SDK。

1
npm uninstall react-native-airbridge-bridge

install 新版本的 SDK。

1
npm install --save airbridge-react-native-sdk

请执行以下命令:

12
cd ios
pod install

Javascript

DeeplinkListener

请删除 getInitialDeeplink 函数,仅使用 setDeeplinkListener 函数。

1234567
- Airbridge.deeplink.getInitialDeeplink().then((deeplink) => {
-
- });
. 
. Airbridge.deeplink.setDeeplinkListner((deeplink) => {
. 
. });

Android

AndroidManifest.xml

请在 android/app/src/main/AndroidManifest.xml 文件的 MainActivity 区域中插入以下 intent-filter 语句:

1234567891011121314151617181920212223242526
+ <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

12345678910111213141516
. 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);
.     }
. }

iOS

Xcode

Universal Link

  1. 请导航至 [Xcode]>[Project File]>[Signing & Capabilities]>[Associated Domains]。

  2. 请点击 + 按钮并添加 applinks:YOUR_APP_NAME.deeplink.page

YOUR_APP_NAME 可在 Airbridge 面板的 [设置] >[Token] 获取。

AppDelegate.m

请修改 ios/.../AppDelegate.m

123456789101112131415161718192021222324
. - (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 或以下版本,请额外修改以下代码:

123456789
. -  (BOOL)application:(UIApplication*)application
. continueUserActivity:(NSUserActivity*)userActivity
.   restorationHandler:(void (^)(NSArray* _Nullable))restorationHandler
. {
-     [AirbridgeRN.instance handleUniversalDeeplink:userActivity.webpageURL];
+     [AirbridgeRN.deeplink handleUniversalLink:userActivity.webpageURL];
. 
.     return YES;
. }

0.2.X → 1.0.X 更新

terminal

unlink 旧版本的 SDK。

1
react-native unlink react-native-airbridge-bridge

如果 react-native unlink react-native-airbridge-bridge 出错:

1. 请修改 android/app/src/main/java/.../MainApplication.java

1
- import com.reactlibrary.AirbridgeBridgePackage;
12345678
. @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。

1
npm uninstall react-native-airbridge-bridge

install 新版本的 SDK。

1
npm install --save airbridge-react-native-sdk

link 新版本的 SDK。

1
react-native link airbridge-react-native-sdk

index.js

请将 index.js 中的 require 改为 import

12
- const Airbridge = require('react-native-airbridge-bridge');
+ import Airbridge from 'airbridge-react-native-sdk';

Build.gradle

请修改 android/app/build.gradle。

123456
. dependencies {
.     ...
-     implementation 'io.airbridge:sdk-android:1.5.+'
-     implementation 'com.android.installreferrer:installreferrer:1.0'
.     ...
. }

AndroidManifest.xml

请修改 android/app/src/main/AndroidManifest.xml

permission

12
-     <uses-permission android:name="android.permission.INTERNET" />
-     <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

MainActivity

123
.     <activity android:name=".MainActivity"
          ...
+         android:launchMode="singleTask">

MainApplication.java

请修改 android/app/src/main/java/.../MainApplication.java

1
- import io.airbridge.*;
1234567
. @Override
. public void onCreate() {
.     super.onCreate();
-     AirBridge.init(this, "[앱 이름]", "[앱 토큰]");
+     AirbridgeRN.init(this, "[앱 이름]", "[앱 토큰]");
.     ...
. }

MainActivity.java

请修改 android/app/src/main/java/.../MainActivity.java

123456789
+ import co.ab180.airbridge.reactnative.AirbridgeRN;

+ public class MainActivity extends ReactActivity {
+   @Override
+   public void onNewIntent(Intent intent) {
+       super.onNewIntent(intent);
+       setIntent(intent);
+   }
+ }

Podfile

请修改 ios/Podfile

123
target '[Project Name]' do
-   pod 'AirBridge', '1.6.2'
end

请在 terminal 执行以下命令:

1
pod install

AppDelegate.m

请修改 ios/.../AppDelegate.m

12
- #import <AirBridge/AirBridge.h>
+ #import <AirbridgeRN/AirbridgeRN.h>
1234567
.           - (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];
.     ...
. }
123456789
. - (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;
. }
12345678910
. - (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 或以下版本,请额外修改以下代码:

123456789
.   - (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?

Have any questions or suggestions?