Flutter SDK

Pub Version

SDK 安装


airbrdige_flutter_sdk pub.dev

包安装

pubspec 设置

请在 pubspec.yaml 文件的 dependencies 块中添加以下行:

123
dependencies:
  # Get the latest version from https://pub.dev/packages/airbridge_flutter_sdk/versions
  airbridge_flutter_sdk: HERE_LATEST_VERSION

请在该 Project 的最上层文件位置打开 Terminal,然后执行以下命令。

Airbridge Flutter SDK 仅在 Flutter 1.20.0 及以上、Dart 2.12.0 及以上版本中运行。

Shell
1
flutter pub get

Project 设置

添加 SDK 配置文件

请在 pubspec.yaml 文件的 flutter/assets 块中添加以下行:

123
flutter:
  assets:
    - assets/airbridge.json

iOS 设置

请在该 Project 的 ios 模块中的 AppDelegate 类文件中添加以下代码:

12345678
import airbridge_flutter_sdk

override func application(
    _ application: UIApplication,
    didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?
  ) -> Bool {
    AirbridgeFlutter.initSDK(appName: "YOUR_APP_NAME", appToken: "YOUR_APP_TOKEN", withLaunchOptions: launchOptions)
}

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

Android 设置

如果该 Project 的 android 模块中尚未定义 Application 类,请创建一个 Application 类。

请在 Application 类中如下添加 AirbridgeFlutter.init 代码:

12345678910
import co.ab180.airbridge.flutter.AirbridgeFlutter;
import io.flutter.app.FlutterApplication;

public class MainApplication extends FlutterApplication {
    @Override
    public void onCreate() {
        super.onCreate();
        AirbridgeFlutter.init(this, "YOUR_APP_NAME", "YOUR_APP_TOKEN");
    }
}

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

请在该 Project 的 android 模块的 AndroidManifest.xml 文件中注册之前创建的 Application 类。

12345
<application
    android:name=".MainApplication"
    ...>
    ...
</application>

通用设置

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。

metaInstallReferrer

String

null

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

此功能从 airbridge-flutter-sdk v3.5.4 起可用。

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 安装

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

深度链接(Deep Link)设置


Airbridge 面板设置

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

Project 设置

iOS 深度链接设置

URL Schemes 添加

  1. 请在 Xcode 中打开该 Project 的 ios 模块中的 *.xcodeproj*.xcworkspace 文件。

  2. 请前往 [Info]。

  3. 请在 [URL Types] 部分的 URL Schemes 输入在 Airbridge 面板注册的 iOS URI Scheme。

  1. 请在 Xcode 中打开该 Project 的 ios 模块中的 *.xcodeproj*.xcworkspace 文件。

  2. 请前往 [Signing & Capabilities]。

  3. 请在 [Associated Domains] 部分的 Domains 添加以下信息:

  • applinks:YOUR_APP_NAME.airbridge.io

  • applinks:YOUR_APP_NAME.deeplink.page

AppDelegate 设置

  1. 请打开该 Project 的 ios 模块中的 AppDelegate 文件。

  2. 请添加以下函数:

123456789101112131415
override func application(
    _ application: UIApplication,
    continue userActivity: NSUserActivity,
    restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void
) -> Bool {
    AirbridgeFlutter.deeplink.handle(userActivity)
    
    return true
}

override func application(_ app: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey : Any] = [:]) -> Bool {
    AirbridgeFlutter.deeplink.handleURLSchemeDeeplink(url)
    
    return true
}

Android 深度链接设置

AndroidManifest.xml 设置

请按照以下步骤设置 Intent Filter

  1. 请打开该 Project 的 android 模块中的 AndroidManifest.xml 文件。

  2. 请在 MainActivity 中如下添加 Intent Filter

123456789101112131415161718192021222324252627282930
<activity ...>
    ...
    <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_APP_URI_SCHEME" />
    </intent-filter>
    ...
</activity>

MainActivity 设置

  1. 请打开该 Project 的 android 模块的 MainActivity 文件。

  2. 请在 MainActivity 中如下添加 onResumeonNewIntent

1234567891011
@Override
protected void onResume() {
    super.onResume()
    AirbridgeFlutter.processDeeplink(intent)
}

@Override
protected void onNewIntent(Intent intent) {
    super.onNewIntent(intent)
    setIntent(intent)
}

为收集用户点击的深度链接数据,请如下注册消息回调:

1234
Airbridge.deeplink.setDeeplinkListener((deeplink) {
    // airbridge deeplink = SCHEME://...
    print('$deeplink');
});

main 函数中调用时,需要首先调用 WidgetsFlutterBinding.ensureInitialized();

检查深度链接设置

完成 Airbridge Flutter SDK 深度链接设置后,可以通过下方链接检查是否能正确跳转到相应的 App 页面:

  • YOUR_APP_URI_SCHEME://

深度链接设置正确无误时,您可在 Airbridge 面板的 [原始数据]>[App 实时记录] 查看如下记录。

用户设置


用户标识符设置

Airbridge 收集以下用户标识符信息,以监测跨 Web 和 App 的用户贡献:

  • User Email : 用户邮箱

  • User Phone : 用户电话号码

  • User ID : 用户唯一 ID (可识别用户并且在 Web 端和 App 端一致的 ID)

  • User Alias : 可以代表用户的其他 ID (例:忠诚计划专用 ID、集团子公司统一 ID)

用户邮箱和电话号码将自动进行 SHA256 哈希处理后发送到服务器。

您可通过以下方法在 Airbridge Flutter SDK 设置用户标识符信息:

12345678910
Airbridge.state.setUser(
    User(
    id: 'tester',
    email: 'tester@ab180.co',
    phone: '+82 10 0000-0000',
    alias: {
        'alias_key': 'alias_value',
    },
    )
);
  • User Alias 最多可设置 10 个。

  • User Alias 的 key 是 string 类型,最多为 128 个字符。

  • User Alias 的 key 必须符合正则表达式 ^[a-z_][a-z0-9_]*$

  • User Alias 的 value 是 string 类型,最多为 1024 个字符。

设置用户标识符信息后,所有事件将包含标识符信息进行发送。

注意

已设置的用户标识信息可能会因用户事件自动消失或更改。

您可以通过以下方法更改已设置的用户信息的特定字段:

12345
Airbridge.state.updateUser(
    User(
        id: 'sam1234',
    )
);

用户属性设置

您可以为提高 MTA(Multi-touch attribution, 多触点归因)分析的准确性、内部数据分析以及与第三方解决方案的集成等目的设置附加用户属性。

1234567
Airbridge.state.setUser(
    User(
    attributes: {
        'attr_key': 'attr_value',
    },
    )
);
  • User Attribute 最多可设置 100 个。

  • User Attribute 的 key 是 string 类型,最多为 128 个字符。

  • User Attribute 的 key 必须符合正则表达式 ^[a-z_][a-z0-9_]*$

  • User Attribute 的 value 类型可以为 integerfloatlongbooleanstring,且如果是 string,则最多为 1024 个字符。

注意

已设置的用户属性信息可能会因用户事件自动消失或更改。

检查用户设置

Airbridge Flutter SDK 中设置的用户信息可在 Airbridge 面板的 [原始数据]>[App 实时记录] 查看:

设备设置


设备标识符设置

您可在 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

  • category : 事件名称 (string) 必填

  • option : 事件参数

    • action : 事件属性 1 (string)

    • label : 事件属性 2 (string)

    • value : 事件属性 3 (num)

    • semanticAttributes : 标准事件属性 (Map<String, dynamic>)

    • customAttributes : 自定义事件属性 (Map<String, dynamic>)

123
static void trackEvent(String category, [ AirbridgeEventOption? option ]) {
    event.trackEvent(category, option);
}

用户事件发送

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

注册 (Sign-up)

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

123456
Airbridge.state.setUser(User(
    id: 'tester',
    email: 'tester@ab180.co',
    phone: '+82 10 0000-0000',
));
Airbridge.trackEvent(AirbridgeCategory.SIGN_UP);

登录 (Sign-in)

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

123456
Airbridge.state.setUser(User(
    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(User());

电商事件发送

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

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

查看首页(View Home Screen)

1
Airbridge.trackEvent(AirbridgeCategory.HOME_VIEW);

查看搜索结果(View Search Result)

1234567891011121314151617181920212223
Airbridge.event.trackEvent(
  AirbridgeCategory.SEARCH_RESULT_VIEW,
  AirbridgeEventOption(
    semanticAttributes: {
      AirbridgeAttributes.QUERY: 'product',
      AirbridgeAttributes.PRODUCTS: [{
          AirbridgeProduct.PRODUCT_ID: 'coke_zero',
          AirbridgeProduct.NAME: 'product A',
          AirbridgeProduct.PRICE: 1.99,
          AirbridgeProduct.CURRENCY: 'USD',
          AirbridgeProduct.POSITION: 1,
          AirbridgeProduct.QUANTITY: 1,
        }, {
          AirbridgeProduct.PRODUCT_ID: 'burger_cheese_double',
          AirbridgeProduct.NAME: 'product B',
          AirbridgeProduct.PRICE: 3.99,
          AirbridgeProduct.CURRENCY: 'USD',
          AirbridgeProduct.POSITION: 2,
          AirbridgeProduct.QUANTITY: 1,
        }
      ]
    }
));

查看产品列表(View Product List)

1234567891011121314151617181920212223
Airbridge.event.trackEvent(
  AirbridgeCategory.PRODUCT_DETAILS_VIEW,
  AirbridgeEventOption(
    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)

123456789101112131415
Airbridge.event.trackEvent(
  AirbridgeCategory.PRODUCT_DETAILS_VIEW,
  AirbridgeEventOption(
    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.event.trackEvent(
  AirbridgeCategory.ADD_TO_CART,
  AirbridgeEventOption(
    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.event.trackEvent(
  AirbridgeCategory.ORDER_COMPLETED,
  AirbridgeEventOption(
    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,
        }
      ]
    }
));

如需直接配置并发送 Semantic Attribute,请参阅 本指南

检查事件发送

Airbridge Flutter SDK 发送的事件可在 Airbridge 面板的 [原始数据]>[App 实时记录] 查看。

高级设置

Meta Install Referrer(MIR)收集设置

MIR 收集设置在 airbridge-flutter-sdk v.3.5.4 及以上版本可用。请在 airbridge.json 文件添加以下代码设置 MIR 收集。

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

123
{
    "metaInstallReferrer": "YOUR_META_APP_ID"
}

归因结果 (Attribution Result) 回调设置

Airbridge SDK 可以通过以下处理收取归因结果数据:

123
Airbridge.setAttributionListener((result) { 
    // do something
});
  • 归因结果回调数据将以 map 格式传递。可以收取的数据如下:

字段

说明

attributedChannel

渠道 (String)

attributedCampaign

广告系列 (String)

attributedAdGroup

广告组 (String)

attributedAdCreative

广告素材 (String)

attributedContent

内容 (String)

attributedTerm

关键词 (String)

attributedSubPublisher

子渠道 (String)

attributedSubSubPublisher1

二级子渠道 1 (String)

attributedSubSubPublisher2

二级子渠道 2 (String)

attributedSubSubPublisher3

二级子渠道 3 (String)

  • 此功能从 Airbridge Flutter SDK 3.5.0 版本开始支持。

Restricted SDK

如果由于隐私法等原因无法收集 ADID,您可以使用移除了 ADID 收集功能的 Restricted SDK。Airbridge Flutter SDK Restricted 从 3.4.3 版本开始支持。

pubspec 设置

请在 pubspec.yaml 文件的 dependencies 块中添加以下行:

12
dependencies:
  airbridge_flutter_sdk_restricted : 3.4.3

请在该 Project 的最上层文件位置打开 Terminal,然后执行以下命令:

Shell
1
flutter pub get

SDK 签名 (SDK Signature) 设置

您可通过 SDK 签名防止 SDK 伪造(SDK Spoofing)。SDK 签名从 airbridge_flutter_sdk v.3.2.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 字段,明确地开始收集和传输数据。

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

react-native
1
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

click 函数会将追踪链接的点击统计增加 1 次,并将用户跳转到预先设置的 App、Web、或后备目的地。请在追踪链接被点击时调用此函数。

click 函数中的 deeplinkfallback 是在无互联网连接时使用的备用链接。deeplink 参数仅支持 Custom URI Scheme 格式的深度链接。(这些都是 optional 参数。)

impression

impression 函数会将追踪链接的展示统计增加 1 次。请在追踪链接被展示在用户界面 (UI) 时调用此函数。

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

deviceUUID 获取

1
await Airbridge.state.deviceUUID()

卸载追踪设置

卸载追踪在 Airbridge Flutter SDK 3.0.2 及以上版本可用。

  • 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 忽略该静默推送通知。

Hybrid App 设置

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

12345
Airbridge.createWebInterface(
      webToken: 'YOUR_WEB_TOKEN',
      postCommandFunction: (arg) {
        return """..."""; 
    });

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

故障排除


Bitcode 编译错误

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

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

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

settings.gradle

构建 Android 时,如果出现 Plugin project ... not found. Please update settings.gradle 错误,可以通过如下修改 android/settings.gradle 文件解决问题:

123456789101112131415
include ':app'

def flutterProjectRoot = rootProject.projectDir.parentFile.toPath()

def plugins = new Properties()
def pluginsFile = new File(flutterProjectRoot.toFile(), '.flutter-plugins')
if (pluginsFile.exists()) {
    pluginsFile.withReader('UTF-8') { reader -> plugins.load(reader) }
}

plugins.each { name, path ->
    def pluginDirectory = flutterProjectRoot.resolve(path).resolve('android').toFile()
    include ":$name"
    project(":$name").projectDir = pluginDirectory
}

Could not find or use auto-linked library...

Flutter 问题:https://github.com/flutter/flutter/issues/16049

Airbridge Flutter SDK 是一个 swift plugin,但在 Flutter 中,如果在 100% Objective-C Project 中使用 swift plugin,就会出现此错误。您可以通过以下方法解决此问题:

  1. 请导航至 [File]>[New]>[File...] 选择 Swift File。

  2. 请创建 File.swift 文件和 Bridge Header。

此问题在 Objective-C & Swift Project 以及 100% Swift Project 中不会出现。

迁移指南


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

3.5.0

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

3.4.2

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

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

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

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

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

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

3.4.1

kotlin plugin 版本更新为 1.5.21。

3.4.0

trackingAuthorizeTimeout 的默认值更改为 30 秒。

2.X.X → 3.X.X 更新

原有的事件发送 API 已被删除,并被以下 API 所取代:

123
static void trackEvent(String category, [ AirbridgeEventOption? option ]) {
  event.trackEvent(category, option);
}

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

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

iOS

请将 AppDelegate 中的 AirbridgeFL 类更改为 AirbridgeFlutter 类。

Android

  1. 请将 MainApplicationMainActivity 中的 AirbridgeFL 类更改为 AirbridgeFlutter 类。

  2. 请将 MainActivity 中的 processDeeplinkData 函数更改为 processDeeplink 函数。

Was this page helpful?

Have any questions or suggestions?