Cordova, Ionic, PhoneGap SDK

    SDK 安装

    包安装

    plugin add

    1
    cordova plugin add airbridge-cordova-sdk

    require

    对于 Ionic Project,请在 Project 所需部分的 .ts 文件添加以下代码:

    Ionic
    12345
    import ...
    ...
    declare let Airbridge: any;
    
    ...

    Project 设置

    Android

    MainApplication.java

    请在 Android Application class 初始化 Airbridge SDK。

    1. 请创建 Application class。请添加 platforms/android/app/src/main/java/[PACKAGE NAME]/MainApplication.java 文件。

    如果已创建 Application class,请进行步骤 3。

    12345678
    import android.app.Application
    
    class AndroidApplication: Application() {
    
        override fun onCreate() {
            super.onCreate()
        }
    }

    2. 请在 AndroidManifest.xml 设置已创建的 Application class。

    AndroidManifest.xml
    123
     <application
            android:name=".AndroidApplication"
            ...>

    3. 请在 Application class 添加以下初始化代码。YOUR_APP_NAME 是 App 名称,YOUR_APP_SDK_TOKEN 是 App SDK Token。这些值可在 Airbridge 面板的 [设置]>[Token] 获取。

    12345678910111213
    package [PACKAGE NAME];
    
    import android.app.Application;
    
    import co.ab180.airbridge.cordova.AirbridgeCO;
    
    public class AndroidApplication extends Application {
        @Override
        public void onCreate() {
            super.onCreate();
            AirbridgeCO.init(this, "YOUR_APP_NAME", "YOUR_APP_TOKEN");
        }
    }

    iOS

    AppDelegate.m

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

    1
    #import "AirbridgeCO.h"

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

    1234
    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
        [AirbridgeCO 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 格式进行设置。

    123456789101112
    {
        "sessionTimeoutSeconds": 300,
        "autoStartTrackingEnabled": true,
        "userInfoHashEnabled": true,
        "trackAirbridgeLinkOnly": false,
        "facebookDeferredAppLinkEnabled": false,
        "locationCollectionEnabled": false,
        "trackingAuthorizeTimeoutSeconds": 30,
        "sdkSignatureSecretID": "YOUR_SDK_SIGNATURE_SECRET_ID",
        "sdkSignatureSecret": "YOUR_SDK_SIGNATURE_SECRET",
        "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。

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

    深度链接设置

    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

    请在 platforms/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>

    请将 YOUR_APP_NAME 替换为 App 名称,并将 YOUR_SCHEME 替换为在 Airbridge 面板中注册的 URI Scheme。

    MainActivity.java

    请在 platforms/android/app/src/main/java/[PACKAGE NAME]/MainActivity.java 文件中插入以下代码:

    123456789101112
    @Override
    protected void onResume() {
        super.onResume();
    
        AirbridgeCO.processDeeplinkData(getIntent());
    }
    
    @Override
    public void 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);
    
        [AirbridgeCO.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);
    
        [AirbridgeCO.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);
    
        [AirbridgeCO.deeplink handleUserActivity:userActivity];
    
        return YES;
    }

    检查深度链接设置

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

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

    用户设置

    用户标识符设置

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

    名称

    说明

    限制

    id

    用户 ID

    -

    email

    用户 Email

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

    phone

    用户电话号码

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

    attributes

    用户属性

    - 最多可设置 100 个。
    - key 是 NSString 类型,最多为 128 个字符。
    - key 必须符合正则表达式 ^[a-z_][a-z0-9_]*$ - value 类型可以为 NSString 或 NSNumber,且如果是 NSString,则最多为 1024 个字符。

    alias

    可以代表用户的其他 ID

    - 最多可设置 10 个。
    - key 是 NSString 类型,最多为 128 个字符。
    - key 必须符合正则表达式 ^[a-z_][a-z0-9_]*$ - value 是 NSString 类型,最多为 1024 个字符。

    示例代码

    1234567891011
    Airbridge.state.setUser({
        ID: 'test1',
        email: 'test1@ab180.co',
    });
    Airbridge.state.setUser({
        email: 'test2@ab180.co',
        phone: '222-2222-2222',
    });
    Airbridge.state.updateUser({
        ID: 'test3',
    });

    上述代码的运行方式如下:

    User = { ID: 'test1', email: '[test1@ab180.co](mailto:test1@ab180.co)' }
    => User = { email: '[test1@ab180.co](mailto:test1@ab180.co)', phone: '222-2222-2222' }
    => User = { ID: 'test3', email: '[test1@ab180.co](mailto:test1@ab180.co)', phone: '222-2222-2222' }

    检查用户设置

    请按照以下步骤确保您设置的的用户信息通过 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 option 可以使用 actionlabelvaluesemanticAttributescustomAttributes

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

    用户事件发送

    您可使用 SDK 发送用户事件。event option 可以使用 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. 发送的事件。

    高级设置


    请参阅以下指南:

    SDK 签名 (SDK Signature) 设置

    您可通过 SDK 签名防止 SDK 伪造(SDK Spoofing)。SDK 签名从 airbridge-cordova-sdk v.2.2.0 开始可用。

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

    1234
    {
        "sdkSignatureSecretID": "YOUR_SDK_SIGNATURE_SECRET_ID",
        "sdkSignatureSecret": "YOUR_SDK_SIGNATURE_SECRET"
    }

    为了设置 SDK 签名,需要 SDK 签名凭证。请参阅 本指南 获取 SDK 签名凭证。

    Braze 集成

    您可以使用 SDK to SDK 方式将 Airbridge 的归因数据发送至 Braze。

    iOS

    请修改 ios/[Project 名称]/AppDelegate.m

    12345678910111213141516171819202122232425262728293031323334353637
    #import <AirBridge/AirBridge.h>
    ...
    
    @interface AppDelegate () <ABTrackingDelegate>
    
    @end
    
    @implementation AppDelegate
    
    ...
    
    - (void)airbridgeUserAttributed:(ABAttribution *)attribution {
        /* convert airbridge-attribution to braze-attribution */
        ABKAttributionData *abkAttributionData = [[ABKAttributionData alloc] initWithNetwork:attribution.source
                                                                                    campaign:attribution.campaign
                                                                                     adGroup:attribution.adgroup
                                                                                    creative:attribution.adcreative];
    
    
        /* add attribution-data to user */
        [[[Appboy sharedInstance] user] setAttributionData:abkAttributionData];
    
        [[[Appboy sharedInstance] user] setCustomAttributeWithKey:@"airbridge_medium"
                                                   andStringValue:attribution.medium];
        [[[Appboy sharedInstance] user] setCustomAttributeWithKey:@"airbridge_ad_content"
                                                   andStringValue:attribution.adcontent];
        [[[Appboy sharedInstance] user] setCustomAttributeWithKey:@"airbridge_search_keyword"
                                                   andStringValue:attribution.searchKeyword];
    
    
        /* send event to Braze */
        [[Appboy sharedInstance] flushDataAndProcessRequestQueue];
    }
    
    ...
    
    @end

    Android

    请修改 android/app/src/main/java/[PACKAGE NAME]/MainApplication.java

    12345678910111213141516171819
    import io.airbridge.AirBridge;
    ...
    
    @Override
    public void onCreate() {
        super.onCreate();
    
        ...
        /* Braze init */
        registerActivityLifecycleCallbacks(new AppboyLifecycleCallbackListener(...));
        ...
    
        /* Airbridge-Cordova-SDK init */
        AirbridgeCO.init(this, "YOUR_APP_NAME", "YOUR_APP_SDK_TOKEN");
    
    
        /* Braze integration with Airbridge-Android-SDK */
        AirBridge.turnOnIntegration(new AppBoyIntegrator());
    }

    Airbridge 和 Braze 的集成代码应编写在 Braze init 下。

    卸载追踪设置

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

    • Airbridge Android SDK 2.6.0 及以上版本

    • Airbridge iOS SDK 1.28.2 及以上版本

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

    推送 Token 发送

    1
    Airbridge.registerPushToken(token);

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

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

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

    故障排除


    1.X.X → 2.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;

    有关更多信息,请参阅 Cordova 2.X.X 迁移指南

    Bitcode 编译错误

    在使用 Cordova Ionic PhoneGap SDK 2.0.1 及以上版本进行 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)

    Cordova Ionic PhoneGap SDK 2.0.1 版本起,Airbridge iOS SDK 升级至 1.28.0 版本,且 Airbridge iOS SDK 从 1.28.0 版本起停止支持 Bitcode。如遇到上述错误,请参阅 Bitcode 编译错误指南

    1.1.X → 1.2.X 更新

    uninstall 旧版本的 SDK。

    install 新版本的 SDK。

    Android

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

    12
    -     AirbridgeCO.getDeeplink().fetch(getIntent())
    +     AirbridgeCO.processDeeplinkData(getIntent())

    iOS

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

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

    设置

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

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

    示例

    123456789
    {
        "sessionTimeoutSeconds": 300,
        "autoStartTrackingEnabled": true,
        "userInfoHashEnabled": true,
        "trackAirbridgeLinkOnly": false,
        "facebookDeferredAppLinkEnabled": false,
        "locationCollectionEnabled": false
        "trackingAuthorizeTimeoutSeconds": 0
    }

    名称

    类型

    默认值

    说明

    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。

    install 新版本的 SDK。

    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.cordova.AirbridgeCO;
    . 
    . public class MainActivity extends ReactActivity {
    +     @Override
    +     protected void onResume() {
    +         super.onResume();
    + 
    +         AirbridgeCO.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
    . {
    -     [AirbridgeCO.instance handleURLSchemeDeeplink:url
    -                                withSourceBundle:options[UIApplicationOpenURLOptionsSourceApplicationKey]];
    +     [AirbridgeCO.deeplink handleURLSchemeDeeplink:url
    +                                withSourceBundle:options[UIApplicationOpenURLOptionsSourceApplicationKey]];
    . 
    .     return YES;
    . }
    . 
    . - (BOOL)application:(UIApplication*)application
    .             openURL:(NSURL*)url
    .   sourceApplication:(NSString*)sourceApplication 
    .          annotation:(id)annotation
    . {
    -     [AirbridgeCO.instance handleURLSchemeDeeplink:url
    -                                withSourceBundle:sourceApplication];
    +     [AirbridgeCO.deeplink handleURLSchemeDeeplink:url
    +                                withSourceBundle:sourceApplication];
    . 
    .     return YES;
    . }

    如 target iOS 8.x 或以下版本,请额外修改以下代码:

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

    迁移指南


    更新 SDK 时,请考虑以下内容:

    2.6.0

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

    2.5.0

    对于 2023-09-04 或以后创建的 Airbridge App,深度链接回调提供的深度链接 URL 中不再添加 airbridge_referrer

    更新 iOS App 时,SKAN 转化值将以最后计算的值为准,不会进行额外计算。

    • 2.5.0 以下版本计算 SKAN 转化值的时间最多为 24 小时。

    • 对于新安装,这不会成为问题。

    deeplink.page 已被弃用。从 2.5.0 版本开始,请使用 abr.ge 作为深度链接域名进行代码编写。

    • 为了保持向后兼容性,deeplink.page 仍然受支持并可正常运行。

    2.4.0

    trackingAuthorizeTimeout 的默认值更改为 30 秒。

    Was this page helpful?

    Have any questions or suggestions?