提示
本指南介绍如何安装和设置 Cordova-Ionic SDK(v4)。如需了解旧版本,请参阅 Cordova-Ionic SDK(旧版本)。
您可以通过以下方法安装 Airbridge Cordova-Ionic SDK。安装后,您可以通过 测试 Cordova-Ionic SDK 来检查 SDK 是否正确安装。
请根据各平台安装 airbridge-cordova-sdk plugin。
cordova plugin add airbridge-cordova-sdk
ionic cordova plugin add airbridge-cordova-sdk
iOS SDK 与 Android SDK 的初始化方式不同。请参阅以下指南。
YOUR_APP_NAME 和 YOUR_APP_SDK_TOKEN 可在 Airbridge 面板的 [设置]>[Token] 获取。
请将以下代码添加至 ios/[Project 名称]/AppDelegate.m
文件的 application:didFinishLaunchingWithOptions:
函数中。
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
AirbridgeCordova.initializeSDK(name:"YOUR_APP_NAME", token:"YOUR_APP_TOKEN")
...
}
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
[AirbridgeCordova initializeSDKWithName:@"YOUR_APP_NAME" token:@"YOUR_APP_TOKEN"];
...
}
Android SDK 需在 Android Application class 中初始化。请创建 Application class。请在 platforms/android/app/src/main/java/[PACKAGE NAME]/MainApplication.java
添加文件。如果已创建 Application class,请直接进行步骤 3。
请在 AndroidManifest.xml
中配置创建的 Application。
<application
android:name=".AndroidApplication"
...>
请在 platforms/android/app/src/main/java/[PACKAGE NAME]/MainApplication.java
文件中按如下方式添加代码。
import co.ab180.airbridge.cordova.AirbridgeCordova
...
override fun onCreate() {
super.onCreate()
AirbridgeCordova.initializeSDK(this, "YOUR_APP_NAME", "YOUR_APP_SDK_TOKEN")
...
}
import co.ab180.airbridge.cordova.AirbridgeCordova;
...
@Override
public void onCreate() {
super.onCreate();
AirbridgeCordova.initializeSDK(this, "YOUR_APP_NAME", "YOUR_APP_SDK_TOKEN");
...
}
请输入用于 Airbridge Cordova-Ionic SDK 的配置值。
{
"sdkEnabled": boolean,
"logLevel": "debug" | "info" | "warning" | "error" | "fault",
"autoStartTrackingEnabled": boolean,
"autoDetermineTrackingAuthorizationTimeoutInSecond": number,
"trackMetaDeferredAppLinkEnabled": boolean,
"sessionTimeoutInSecond": number,
"metaInstallReferrerAppID": string,
"trackAirbridgeDeeplinkOnlyEnabled": boolean,
"trackInSessionLifecycleEventEnabled": boolean,
"hashUserInformationEnabled": boolean,
"sdkSignatureID": string,
"sdkSignatureSecret": string,
"clearEventBufferOnInitializeEnabled": boolean,
"eventBufferCountLimit": number,
"eventBufferSizeLimitInGibibyte": number,
"eventTransmitIntervalInSecond": number,
"isHandleAirbridgeDeeplinkOnly": boolean
}
1. 请在 Cordova-Ionic Project 文件夹的顶部创建 airbridge.json
文件,并按照上方示例输入 JSON。
2. 对于不需要配置的值,请省略对应的键。
有关配置值的更多信息,请参阅以下指南:
配置值 | 指南 |
---|---|
sdkEnabled | |
logLevel | |
autoStartTrackingEnabled | |
autoDetermineTrackingAuthorizationTimeoutInSecond | |
trackMetaDeferredAppLinkEnabled | |
sessionTimeoutInSecond | |
metaInstallReferrerAppID | |
trackAirbridgeDeeplinkOnlyEnabled | |
trackInSessionLifecycleEventEnabled | |
hashUserInformationEnabled | |
sdkSignatureID | |
sdkSignatureSecret | |
clearEventBufferOnInitializeEnabled | |
eventBufferCountLimit | |
eventBufferSizeLimitInGibibyte | |
eventTransmitIntervalInSecond | |
isHandleAirbridgeDeeplinkOnly |
提示
为确保遵守隐私政策所需的功能,应与法律顾问共同审查。
在 iOS 环境中,只有在通过 ATT(App Tracking Transparency,应用跟踪透明度)弹窗征得用户同意后,才能收集 IDFA。
收集安装事件应延迟到用户允许追踪后进行。IDFA 会与安装事件一同收集,因此如果在用户通过 ATT 弹窗允许追踪之前收集安装事件,IDFA 将缺失,影响绩效监测。建议设置足够的延迟时间,以确保 IDFA 被正确收集。
1. 请准备好您将在 ATT 弹窗中使用的文本。
2. 请按照 Apple 文档 设置 ATT 弹窗。
3. 如果未收集到安装事件,Airbridge Cordova-Ionic SDK 会在每次 App 启用时延迟 30 秒尝试收集安装事件,直到用户允许追踪为止。如果用户在决定是否允许追踪之前关闭 App,SDK 将不会收集安装事件,并会在下次启用 App 时重试。
您可以使用 SDK 设置 的 autoDetermineTrackingAuthorizationTimeoutInSecond
函数修改延迟时间。该函数的默认值为 30 秒,最大可设置为 3600 秒(1 小时)。
注意
请确保为延迟收集安装事件预留足够时间。在用户通过 ATT 弹窗允许追踪之前,如果延迟时间到期,SDK 将会收集不包含 IDFA 的安装事件。
提示
此功能并非必需功能,请在设置前确认需求。
Opt-in 政策是指在用户同意之前不使用用户信息。
请将 SDK 设置 的 autoStartTrackingEnabled
设置为 false
后,在可以收集事件时调用 startTracking
函数。从调用 startTracking
函数的时刻起,才开始收集事件。
Airbridge.startTracking()
提示
此功能并非必需功能,请在设置前确认需求。
Opt-out 政策是指在用户拒绝之前使用用户信息。
请在 autoStartTrackingEnabled
设置为 true
后,在无法再收集事件时调用 stopTracking
函数。从调用 stopTracking
函数的时刻起,将不再收集事件。
Airbridge.stopTracking()
提示
此功能并非必需功能,请在设置前确认需求。
您可以通过 SDK 签名防止 SDK 伪造 (SDK Spoofing)。
SDK 签名设置需要以下 SDK 签名凭证:
sdkSignatureID
:Secret ID,可以在 Airbridge 面板的 [规则管理]>[作弊验证规则]>[SDK 签名]>[SDK 签名凭证] 中获取。
sdkSignatureSecret
:Secret,可以在 Airbridge 面板的 [规则管理]>[作弊验证规则]>[SDK 签名]>[SDK 签名凭证] 中获取。
SDK 签名凭证的更多信息,请参阅 本指南。
请输入 SDK 设置 的 sdkSignatureID
和 sdkSignatureSecret
。
您可以通过设置深度链接,将点击包含追踪链接的广告的用户跳转至 App 的特定页面。此外,还可以基于追踪链接收集的信息,在 Airbridge 面板查看通过深度链接产生的绩效。
Airbridge 在追踪链接打开时,会根据用户环境,将追踪链接中配置的 URI Scheme 深度链接转换为最适合的 Airbridge 深度链接(HTTP 深度链接或 URI Scheme 深度链接)以引导用户进入 App。随后,Airbridge SDK 会将 Airbridge 深度链接重新转换为追踪链接中配置的 URI Scheme 深度链接,并传递至 App。
追踪链接中配置的 URI Scheme 深度链接示例:YOUR_SCHEME://product/12345
Airbridge 深度链接示例:
HTTP 深度链接格式 1:https://YOUR_APP_NAME.airbridge.io/~~~
HTTP 深度链接格式 2:https://YOUR_APP_NAME.abr.ge/~~~
URI Scheme 深度链接格式:YOUR_SCHEME://product/12345?airbridge_referrer=~~~
当 App 已安装时,用户点击追踪链接后,App 将通过 Airbridge 深度链接打开。随后,Airbridge SDK 会将该 Airbridge 深度链接转换为追踪链接中配置的 URI Scheme 深度链接,并将转换后的 URI Scheme 深度链接传递给 App。
当 App 未安装时,用户点击追踪链接后,Airbridge SDK 会保存 Airbridge 深度链接信息。用户被发送至应用商店或网站安装并打开 App 后,Airbridge SDK 会将保存的 Airbridge 深度链接转换为追踪链接中配置的 URI Scheme 深度链接,并将转换后的 URI Scheme 深度链接传递给 App。
请按照以下步骤设置深度链接。请准备在 Airbridge 面板中注册的深度链接信息和用户跳转目的地的 App 内页面地址。
首先,请在 Airbridge 面板注册深度链接信息。
iOS 环境所需的深度链接信息如下:
iOS URI Scheme:根据 iOS URI Scheme,将 Airbridge 深度链接转换为 URI Scheme 深度链接。URI Scheme 深度链接需要此信息。
iOS App ID:根据 iOS App ID,为 Airbridge 深度链接设置 Universal Link 域名。Universal Link 需要此信息。
请按照以下步骤在 Airbridge 面板注册深度链接信息:
1. 请前往 [追踪链接]>[深度链接]。
2. 请在 [iOS URI Scheme] 中输入 iOS URI Scheme,该 URI Scheme 必须与 ://
一起输入。例如,如果 iOS URI Scheme 是 demo
,则输入 demo://
。
3. 请在 Apple Developer Dashboard,进入您要设置深度链接的 App 的 [Identifier] 页面,获取 App ID Prefix 和 Bundle ID。
4. iOS App ID 的格式为 App ID Prefix
+.
+Bundle ID
。请在 Airbridge 面板 [追踪链接]>[深度链接]>[iOS App ID] 中输入 iOS App ID。
例如,如果 App ID Prefix 是 prefix,Bundle ID 是 example,则 iOS App ID 为 prefix.example
。
Android 环境所需的深度链接信息如下:
Android URI Scheme:根据 Android URI Scheme,将 Airbridge 深度链接转换为 URI Scheme 深度链接。App Link 和 URI Scheme 需要此信息。
Android 包名:用于识别 Android 包。App Link 和 URI Scheme 需要此信息。
Android sha256_cert_fingerprints:用于设置 App Link 域名。App Link 需要此信息。
注意
为确保正确的用户跳转,请为正式版 App 和开发用 App 注册不同的深度链接信息。
请按照以下步骤在 Airbridge 面板注册深度链接信息:
1. 请前往 [追踪链接]>[深度链接]。
2. 请在 [Android URI Scheme] 中输入 Android URI Scheme,该 URI Scheme 必须与 ://
一起输入。例如,如果 Android URI Scheme 是 demo
,则输入 demo://
。
3. 请在 [Android 包名] 中输入 Android 包名。
4. 为了获取 sha256_cert_fingerprints,请在部署的 keystore 文件中运行以下命令:
keytool -list -v -keystore YOUR_KEYSTORE.keystore
请查看结果中的 SHA256 值。SHA256 值即是 sha256_cert_fingerprints。
Certificate fingerprints:
MD5: 4C:65:04:52:F0:3F:F8:65:08:D3:71:86:FC:EF:C3:49
SHA1: C8:BF:B7:B8:94:EA:5D:9D:38:59:FE:99:63:ED:47:B2:D9:5A:4E:CC
SHA256: B5:EF:4D:F9:DC:95:E6:9B:F3:9A:5E:E9:D6:E0:D8:F6:7B:AB:79:C8:78:67:34:D9:A7:01:AB:6A:86:01:0E:99
5. 请在 [sha256_cert_fingerprints] 中输入在步骤 4. 获取的 SHA256 值。
在 Airbridge 面板注册深度链接信息后,请进行设置启用以下功能:
请按照以下步骤进行设置,以确保用户点击追踪链接后,App 能通过 Airbridge 深度链接启用。
1. 需要在 App 进行 Airbridge 深度链接的 URI Scheme 深度链接设置。请在 Xcode 中导航至 [YOUR_PROJECT]>[Info]>[URL Types]。
2. 请点击 “+”,并在 URL Schemes 中输入已在 Airbridge 面板中注册的 iOS URI Scheme。
注意
必须输入不包括
://
的 iOS URI Scheme。
3. 需要在 App 进行 Airbridge 深度链接的 Universal Link 设置。请在 Xcode 中导航至 [YOUR_PROJECT]>[Signing & Capabilities]。
4. 请点击 “+ Capability” 以添加 Associated Domains。
5. 请将 applinks:YOUR_APP_NAME.airbridge.io
和 applinks:YOUR_APP_NAME.abr.ge
添加至 Associated Domains。YOUR_APP_NAME
是 Airbridge App 名称。
注意
如果您正在使用或计划使用 Password AutoFill 功能,则必须添加 Webcredentials 域名。否则用户可能会看到通过 Password AutoFill 功能保存的密码域名显示为 airbridge.io 或 abr.ge。
更多信息请参阅 本指南。
1. 需要在 App 进行 Airbridge 深度链接的 URI Scheme 深度链接设置。请在 AndroidManifest.xml
的处理深度链接的 Activity 中添加 Intent Filter。
添加的 Intent Filter 必须使用在 Airbridge 面板中注册的 Android URI Scheme。请输入 Android URI Scheme,不包括 ://
。
<activity ...>
...
<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>
注意
必须输入不包括
://
的 Android URI Scheme。
2. 为了在 App 设置 Airbridge 深度链接的 App Link,请在 AndroidManifest.xml
的处理深度链接的 Activity 中添加以下 Intent Filter。YOUR_APP_NAME
是 Airbridge App 名称。
<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.abr.ge" />
<data android:scheme="https" android:host="YOUR_APP_NAME.abr.ge" />
</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>
...
</activity>
为了收集深度链接事件,必须将深度链接事件传递给 Airbridge SDK。当 App 通过深度链接启用时,请在调用的 OS 回调顶部调用 Airbridge.trackDeeplink
函数。
请将以下代码添加至 ios/YOUR_PROJECT_NAME/AppDelegate.m
文件中:
// when app is opened with scheme deeplink
func application(
_ app: UIApplication,
open url: URL,
options: [UIApplication.OpenURLOptionsKey : Any] = [:]
) -> Bool {
// track deeplink
AirbridgeCordova.trackDeeplink(url: url)
return true
}
...
// when app is opened with universal links
func application(
_ application: UIApplication,
continue userActivity: NSUserActivity,
restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void
) -> Bool {
// track deeplink
AirbridgeCordova.trackDeeplink(userActivity: userActivity)
return true
}
// when app is opened with scheme deeplink
- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<UIApplicationOpenURLOptionsKey,id> *)options {
// track deeplink
[AirbridgeCordova trackDeeplinkWithUrl:url];
return YES;
}
...
// when app is opened with universal links
- (BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void (^)(NSArray<id<UIUserActivityRestoring>> * _Nullable))restorationHandler {
// track deeplink
[AirbridgeCordova trackDeeplinkWithUserActivity:userActivity];
return YES;
}
请将以下代码添加至 android/app/src/main/java/.../MainActivity.kt
文件中:
import co.ab180.airbridge.cordova.AirbridgeCordova
...
override fun onResume() {
super.onResume()
AirbridgeCordova.trackDeeplink(intent)
}
...
override fun onNewIntent(intent: Intent?) {
super.onNewIntent(intent)
setIntent(intent)
}
import co.ab180.airbridge.cordova.AirbridgeCordova;
...
@Override
protected void onResume() {
super.onResume();
AirbridgeCordova.trackDeeplink(intent);
}
...
@Override
public void onNewIntent(Intent intent) {
super.onNewIntent(intent);
setIntent(intent);
}
Airbridge 深度链接被启用后,将被转换为 URI Scheme 深度链接并传递至 OnDeeplinkReceived 回调。非 Airbridge 深度链接则原样传递。
使用接收的深度链接,将用户发送至预设的目标页面。
Airbridge.setOnDeeplinkReceived(function (url) {
// show proper content using url
});
当 App 未安装时,如果用户点击了设置了延迟深度链接的追踪链接,Airbridge 深度链接信息将被保存。Airbridge SDK 会通过以下方法来获取保存的深度链接:
Airbridge SDK 在初始化以后,如果满足以下所有条件,会尝试获取深度链接。如果在获取深度链接的过程中 App 被关闭,Airbridge SDK 会将视为没有保存的深度链接。
已设置 Opt-in 时调用 Airbridge.startTracking
函数;或未设置 Opt-in。
用户在 ATT 弹窗中做出选择,或 ATT 弹窗中设置的事件收集延迟时间已到期。
延迟深度链接会自动传递给 OnDeeplinkReceived,无需额外设置。
Airbridge SDK 会根据设置从您的服务中收集特定用户行为,并将其作为应用内事件发送。
Hybrid App 设置
在 Hybrid App 中,无需更改网站代码,即可通过设置使 Cordova-Ionic SDK 处理应用内网站上出现的与 Airbridge 相关的操作。
请调用 Airbridge.trackEvent
函数以发送事件。Airbridge.trackEvent
函数构成要素的类型及其必需性如下:
/**
* Tracks user behavior through event tracking with attributes.
* @param category Name of event.
* @param semanticAttributes Additional attributes of the event that defined by Airbridge.
* @param customAttributes Additional attributes of the event.
*/
static trackEvent(
category: string,
semanticAttributes?: Record<string, any>,
customAttributes?: Record<string, any>,
): void
名称 | 是否必需 | 类型 | 说明 |
---|---|---|---|
category | 必需 | string | 事件名称 |
semanticAttributes | 可选 | Record<string, any> | 事件标准属性 |
customAttributes | 可选 | Record<string, any> | 事件自定义属性 |
各构成要素的定义和可用数据类型请参阅下文:
您可在 AirbridgeCategory 查看 Airbridge SDK 提供的标准事件 Category。您也可以输入从标准事件列表中获取的 Category。
自定义事件可以通过输入在 事件结构(Event Taxonomy)中定义的事件名称发送。
请参阅以下示例:
// track standard event (provided by sdk)
Airbridge.trackEvent(AirbridgeCategory.ORDER_COMPLETED)
// track standard event (not provided by sdk)
Airbridge.trackEvent('airbridge.ecommerce.order.canceled')
// track custom event
Airbridge.trackEvent('eventViewed')
注意
Airbridge SDK v4 的 Attribute 与旧版本不同。旧版本的 Attribute 不包含 Action、Label 和 Value。
您可以通过 Attribute 收集有关事件的详细信息。
Action、Label:收集可在 Airbridge 报告中用作分组的信息。
Value:收集用于分析收入的信息,通过 Value 收集的数据可用于计算。
Semantic Attribute:Airbridge 预定义的属性。
Custom Attribute:由 Airbridge 客户自定义的属性。
您可以通过 Airbridge.trackEvent
函数的 semanticAttributes 参数输入 Action、Label、Value 和 Semantic Attribute,并通过 customAttributes 参数输入 Custom Attribute。
Airbridge 提供的 Semantic Attribute 列表可在以下指南中查看:
请参阅以下示例:
Airbridge.trackEvent(
AirbridgeCategory.ORDER_COMPLETED,
{
// action
[AirbridgeAttribute.ACTION]: 'Tool',
// label
[AirbridgeAttribute.LABEL]: 'Hammer',
// value
[AirbridgeAttribute.VALUE]: 10,
// semantic attribute (provided by sdk)
[AirbridgeAttribute.CURRENCY]: 'USD',
[AirbridgeAttribute.PRODUCTS]: [
{
// semantic attribute value (provided by sdk)
[AirbridgeAttribute.PRODUCT_ID]: '12345',
// semantic attribute value (not provided by sdk)
'name': 'PlasticHammer',
},
],
// semantic attribute (not provided by sdk)
'totalQuantity': 1,
},
{
// custom attribute
'promotion': 'FirstPurchasePromotion',
}
)
注意
Semantic Attribute 和 Custom Attribute 仅支持 JSON 数据类型。
JSON 类型:string、number、boolean、Record<string,JSON>、Array<JSON>
Semantic Attribute 和 Custom Attribute 不支持的类型:class 等
SDK 提供的标准事件 Category 和 Semantic Attribute 如下:
键 | 类型 | 值 |
---|---|---|
SIGN_UP | string | airbridge.user.signup |
SIGN_IN | string | airbridge.user.signin |
SIGN_OUT | string | airbridge.user.signout |
HOME_VIEWED | string | airbridge.ecommerce.home.viewed |
PRODUCT_LIST_VIEWED | string | airbridge.ecommerce.productList.viewed |
SEARCH_RESULTS_VIEWED | string | airbridge.ecommerce.searchResults.viewed |
PRODUCT_VIEWED | string | airbridge.ecommerce.product.viewed |
ADD_PAYMENT_INFO | string | airbridge.addPaymentInfo |
ADD_TO_WISHLIST | string | airbridge.addToWishlist |
ADDED_TO_CART | string | airbridge.ecommerce.product.addedToCart |
INITIATE_CHECKOUT | string | airbridge.initiateCheckout |
ORDER_COMPLETED | string | airbridge.ecommerce.order.completed |
ORDER_CANCELED | string | airbridge.ecommerce.order.canceled |
START_TRIAL | string | airbridge.startTrial |
SUBSCRIBE | string | airbridge.subscribe |
UNSUBSCRIBE | string | airbridge.unsubscribe |
AD_IMPRESSION | string | airbridge.adImpression |
AD_CLICK | string | airbridge.adClick |
COMPLETE_TUTORIAL | string | airbridge.completeTutorial |
ACHIEVE_LEVEL | string | airbridge.achieveLevel |
UNLOCK_ACHIEVEMENT | string | airbridge.unlockAchievement |
RATE | string | airbridge.rate |
SHARE | string | airbridge.share |
SCHEDULE | string | airbridge.schedule |
SPEND_CREDITS | string | airbridge.spendCredits |
键 | 类型 | 值 |
---|---|---|
ACTION | string | action |
LABEL | string | label |
VALUE | string | value |
CURRENCY | string | currency |
ORIGINAL_CURRENCY | string | originalCurrency |
PRODUCTS | string | products |
PRODUCT_ID | string | productID |
PRODUCT_NAME | string | name |
PRODUCT_PRICE | string | price |
PRODUCT_QUANTITY | string | quantity |
PRODUCT_CURRENCY | string | currency |
PRODUCT_POSITION | string | position |
PRODUCT_CATEGORY_ID | string | categoryID |
PRODUCT_CATEGORY_NAME | string | categoryName |
PRODUCT_BRAND_ID | string | brandID |
PRODUCT_BRAND_NAME | string | brandName |
PERIOD | string | period |
IS_RENEWAL | string | isRenewal |
RENEWAL_COUNT | string | renewalCount |
PRODUCT_LIST_ID | string | productListID |
CART_ID | string | cartID |
TRANSACTION_ID | string | transactionID |
TRANSACTION_TYPE | string | transactionType |
TRANSACTION_PAIRED_EVENT_CATEGORY | string | transactionPairedEventCategory |
TRANSACTION_PAIRED_EVENT_TIMESTAMP | string | transactionPairedEventTimestamp |
TOTAL_QUANTITY | string | totalQuantity |
QUERY | string | query |
IN_APP_PURCHASED | string | inAppPurchased |
CONTRIBUTION_MARGIN | string | contributionMargin |
ORIGINAL_CONTRIBUTION_MARGIN | string | originalContributionMargin |
LIST_ID | string | listID |
RATE_ID | string | rateID |
RATE | string | rate |
MAX_RATE | string | maxRate |
ACHIEVEMENT_ID | string | achievementID |
SHARED_CHANNEL | string | sharedChannel |
DATE_TIME | string | datetime |
DESCRIPTION | string | description |
IS_REVENUE | string | isRevenue |
PLACE | string | place |
SCHEDULE_ID | string | scheduleID |
TYPE | string | type |
LEVEL | string | level |
SCORE | string | score |
AD_PARTNERS | string | adPartners |
IS_FIRST_PER_USER | string | isFirstPerUser |
各数据类型的示例代码如下:
Airbridge.trackEvent(
'event',
{
[AirbridgeAttribute.VALUE]: 10,
},
{
'string': 'string',
'number': 1000,
'boolean': true,
'object': {'key': 'value'},
'array': ['value'],
},
)
提示
如果未配置其他设置,则将应用默认设置。请查看是否需要其他设置后再继续。
您可以为发送的应用内事件添加所需的设置。
Airbridge SDK 会将收集的事件保存下来,并逐一加载已保存的事件,直到所有事件发送成功。成功发送的事件将被移除。
发送失败的事件会根据失败的次数分别等待 1、2、4…… 秒后再次尝试发送。如果持续发送失败,则会按照设定的事件发送周期等待,并重复尝试重新加载并发送事件,直到发送成功为止。
默认事件发送周期为 0 秒,您可以使用 SDK 设置 的 eventTransmitIntervalInSecond
函数修改此值,最长可达 86,400 秒(1 天)。
Airbridge SDK 仅在未超出最大事件数和最大事件大小限制的情况下保存事件。
可设置的最大事件数为 INT_MAX;可设置的最大事件大小为 1024 GiB(千兆字节)。默认的最大事件数也为 INT_MAX;默认的最大事件大小也为 1024 GiB(千兆字节)。您可以使用 SDK 设置 的 eventBufferCountLimit
和 eventBufferSizeLimitInGibibyte
函数进行修改。
如果启用未发送事件删除选项,在 Airbridge SDK 初始化过程中未发送的所有已保存应用内事件将被删除。未发送事件删除选项默认为禁用。
您可以将 SDK 设置 的 clearEventBufferOnInitializeEnabled
函数设置为 true
,以启用未发送事件删除选项。
Airbridge SDK 支持在所有事件中包含设备标识符进行发送。
函数 |
说明 |
---|---|
| 输入其他设备标识符,最多可输入 10 个 - key:最多 128 个字符,必须符合正则表达式 - value:最多 128 个字符 |
| 从设备标识符中删除指定的设备标识符 |
| 删除所有设备标识符 |
请参阅以下的示例。
Airbridge.setDeviceAlias('string', 'string')
Airbridge.removeDeviceAlias('string')
Airbridge.clearDeviceAlias()
Airbridge 收集的主要应用内事件是标准事件和自定义事件。标准事件是 Airbridge 预定义的事件,请参阅以下的示例代码:
Airbridge.setUserID('string')
Airbridge.setUserAlias('string', 'string')
Airbridge.setUserEmail('string')
Airbridge.setUserPhone('string')
Airbridge.setUserAttribute('string', 'string')
Airbridge.trackEvent(
AirbridgeCategory.SIGN_UP,
)
Airbridge.setUserID('string')
Airbridge.setUserAlias('string', 'string')
Airbridge.setUserEmail('string')
Airbridge.setUserPhone('string')
Airbridge.setUserAttribute('string', 'string')
Airbridge.trackEvent(
AirbridgeCategory.SIGN_IN,
)
Airbridge.trackEvent(
AirbridgeCategory.SIGN_OUT,
)
Airbridge.clearUser()
Airbridge.trackEvent(
AirbridgeCategory.HOME_VIEWED,
)
Airbridge.trackEvent(
AirbridgeCategory.PRODUCT_LIST_VIEWED,
{
[AirbridgeAttribute.LIST_ID]: '84e6e236-38c4-48db-9b49-16e4cc064386',
[AirbridgeAttribute.PRODUCTS]: [
{
[AirbridgeAttribute.PRODUCT_ID]: '0117b32a-5a6c-4d4c-b64c-7858e07dba78',
[AirbridgeAttribute.PRODUCT_NAME]: 'PlasticHammer',
[AirbridgeAttribute.PRODUCT_PRICE]: 10,
[AirbridgeAttribute.PRODUCT_QUANTITY]: 1,
[AirbridgeAttribute.PRODUCT_CURRENCY]: 'USD',
},
{
[AirbridgeAttribute.PRODUCT_ID]: 'd6ab2fbe-decc-4362-b719-d257a131e91e',
[AirbridgeAttribute.PRODUCT_NAME]: 'PlasticFork',
[AirbridgeAttribute.PRODUCT_PRICE]: 1,
[AirbridgeAttribute.PRODUCT_QUANTITY]: 1,
[AirbridgeAttribute.PRODUCT_CURRENCY]: 'USD',
},
],
},
)
Airbridge.trackEvent(
AirbridgeCategory.SEARCH_RESULTS_VIEWED,
{
[AirbridgeAttribute.QUERY]: 'Plastic',
[AirbridgeAttribute.PRODUCTS]: [
{
[AirbridgeAttribute.PRODUCT_ID]: '0117b32a-5a6c-4d4c-b64c-7858e07dba78',
[AirbridgeAttribute.PRODUCT_NAME]: 'PlasticHammer',
[AirbridgeAttribute.PRODUCT_PRICE]: 10,
[AirbridgeAttribute.PRODUCT_QUANTITY]: 1,
[AirbridgeAttribute.PRODUCT_CURRENCY]: 'USD',
},
{
[AirbridgeAttribute.PRODUCT_ID]: 'd6ab2fbe-decc-4362-b719-d257a131e91e',
[AirbridgeAttribute.PRODUCT_NAME]: 'PlasticFork',
[AirbridgeAttribute.PRODUCT_PRICE]: 1,
[AirbridgeAttribute.PRODUCT_QUANTITY]: 1,
[AirbridgeAttribute.PRODUCT_CURRENCY]: 'USD',
},
],
},
)
Airbridge.trackEvent(
AirbridgeCategory.PRODUCT_VIEWED,
{
[AirbridgeAttribute.PRODUCTS]: [
{
[AirbridgeAttribute.PRODUCT_ID]: '0117b32a-5a6c-4d4c-b64c-7858e07dba78',
[AirbridgeAttribute.PRODUCT_NAME]: 'PlasticHammer',
[AirbridgeAttribute.PRODUCT_PRICE]: 10,
[AirbridgeAttribute.PRODUCT_QUANTITY]: 1,
[AirbridgeAttribute.PRODUCT_CURRENCY]: 'USD',
},
],
},
)
Airbridge.trackEvent(
AirbridgeCategory.ADD_PAYMENT_INFO,
{
[AirbridgeAttribute.TYPE]: 'CreditCard',
},
)
Airbridge.trackEvent(
AirbridgeCategory.ADD_TO_WISHLIST,
{
[AirbridgeAttribute.LIST_ID]: '189a2f8b-83ee-4074-8158-726be54e57d4',
[AirbridgeAttribute.CURRENCY]: 'USD',
[AirbridgeAttribute.PRODUCTS]: [
{
[AirbridgeAttribute.PRODUCT_ID]: '0117b32a-5a6c-4d4c-b64c-7858e07dba78',
[AirbridgeAttribute.PRODUCT_NAME]: 'PlasticHammer',
[AirbridgeAttribute.PRODUCT_PRICE]: 10,
[AirbridgeAttribute.PRODUCT_QUANTITY]: 1,
[AirbridgeAttribute.PRODUCT_CURRENCY]: 'USD',
},
],
},
)
Airbridge.trackEvent(
AirbridgeCategory.ADDED_TO_CART,
{
[AirbridgeAttribute.CART_ID]: '421eaeb7-6e80-4694-933e-f2e1a55e9cbd',
[AirbridgeAttribute.CURRENCY]: 'USD',
[AirbridgeAttribute.PRODUCTS]: [
{
[AirbridgeAttribute.PRODUCT_ID]: '0117b32a-5a6c-4d4c-b64c-7858e07dba78',
[AirbridgeAttribute.PRODUCT_NAME]: 'PlasticHammer',
[AirbridgeAttribute.PRODUCT_PRICE]: 10,
[AirbridgeAttribute.PRODUCT_QUANTITY]: 1,
[AirbridgeAttribute.PRODUCT_CURRENCY]: 'USD',
},
],
},
)
Airbridge.trackEvent(
AirbridgeCategory.INITIATE_CHECKOUT,
{
[AirbridgeAttribute.TRANSACTION_ID]: '0a7ee1ec-33da-4ffb-b775-89e80e75978a',
[AirbridgeAttribute.CURRENCY]: 'USD',
[AirbridgeAttribute.PRODUCTS]: [
{
[AirbridgeAttribute.PRODUCT_ID]: '0117b32a-5a6c-4d4c-b64c-7858e07dba78',
[AirbridgeAttribute.PRODUCT_NAME]: 'PlasticHammer',
[AirbridgeAttribute.PRODUCT_PRICE]: 10,
[AirbridgeAttribute.PRODUCT_QUANTITY]: 1,
[AirbridgeAttribute.PRODUCT_CURRENCY]: 'USD',
},
{
[AirbridgeAttribute.PRODUCT_ID]: 'd6ab2fbe-decc-4362-b719-d257a131e91e',
[AirbridgeAttribute.PRODUCT_NAME]: 'PlasticFork',
[AirbridgeAttribute.PRODUCT_PRICE]: 1,
[AirbridgeAttribute.PRODUCT_QUANTITY]: 1,
[AirbridgeAttribute.PRODUCT_CURRENCY]: 'USD',
},
],
},
)
Airbridge.trackEvent(
AirbridgeCategory.ORDER_COMPLETED,
{
[AirbridgeAttribute.VALUE]: 11,
[AirbridgeAttribute.TRANSACTION_ID]: '8065ef16-162b-4a82-b683-e51aefdda7d5',
[AirbridgeAttribute.CURRENCY]: 'USD',
[AirbridgeAttribute.IN_APP_PURCHASED]: true,
[AirbridgeAttribute.PRODUCTS]: [
{
[AirbridgeAttribute.PRODUCT_ID]: '0117b32a-5a6c-4d4c-b64c-7858e07dba78',
[AirbridgeAttribute.PRODUCT_NAME]: 'PlasticHammer',
[AirbridgeAttribute.PRODUCT_PRICE]: 10,
[AirbridgeAttribute.PRODUCT_QUANTITY]: 1,
[AirbridgeAttribute.PRODUCT_CURRENCY]: 'USD',
},
{
[AirbridgeAttribute.PRODUCT_ID]: 'd6ab2fbe-decc-4362-b719-d257a131e91e',
[AirbridgeAttribute.PRODUCT_NAME]: 'PlasticFork',
[AirbridgeAttribute.PRODUCT_PRICE]: 1,
[AirbridgeAttribute.PRODUCT_QUANTITY]: 1,
[AirbridgeAttribute.PRODUCT_CURRENCY]: 'USD',
},
],
},
)
Airbridge.trackEvent(
AirbridgeCategory.ORDER_CANCELED,
{
[AirbridgeAttribute.VALUE]: 11,
[AirbridgeAttribute.TRANSACTION_ID]: '8065ef16-162b-4a82-b683-e51aefdda7d5',
[AirbridgeAttribute.CURRENCY]: 'USD',
[AirbridgeAttribute.IN_APP_PURCHASED]: true,
[AirbridgeAttribute.PRODUCTS]: [
{
[AirbridgeAttribute.PRODUCT_ID]: '0117b32a-5a6c-4d4c-b64c-7858e07dba78',
[AirbridgeAttribute.PRODUCT_NAME]: 'PlasticHammer',
[AirbridgeAttribute.PRODUCT_PRICE]: 10,
[AirbridgeAttribute.PRODUCT_QUANTITY]: 1,
[AirbridgeAttribute.PRODUCT_CURRENCY]: 'USD',
},
{
[AirbridgeAttribute.PRODUCT_ID]: 'd6ab2fbe-decc-4362-b719-d257a131e91e',
[AirbridgeAttribute.PRODUCT_NAME]: 'PlasticFork',
[AirbridgeAttribute.PRODUCT_PRICE]: 1,
[AirbridgeAttribute.PRODUCT_QUANTITY]: 1,
[AirbridgeAttribute.PRODUCT_CURRENCY]: 'USD',
},
],
},
)
Airbridge.trackEvent(
AirbridgeCategory.START_TRIAL,
{
[AirbridgeAttribute.TRANSACTION_ID]: 'ef1e5271-0370-407c-b1e9-669a8df1dc2c',
[AirbridgeAttribute.CURRENCY]: 'USD',
[AirbridgeAttribute.PERIOD]: 'P1M',
[AirbridgeAttribute.PRODUCTS]: [
{
[AirbridgeAttribute.PRODUCT_ID]: '306a57cb-f653-4220-a208-8405d8e4d506',
[AirbridgeAttribute.PRODUCT_NAME]: 'MusicStreamingMemebership',
[AirbridgeAttribute.PRODUCT_PRICE]: 15,
[AirbridgeAttribute.PRODUCT_CURRENCY]: 'USD',
},
],
},
)
Airbridge.trackEvent(
AirbridgeCategory.SUBSCRIBE,
{
[AirbridgeAttribute.VALUE]: 15,
[AirbridgeAttribute.CURRENCY]: 'USD',
[AirbridgeAttribute.TRANSACTION_ID]: 'cbe718c7-e44e-4707-b5cd-4a6a29f29649',
[AirbridgeAttribute.PERIOD]: 'P1M',
[AirbridgeAttribute.IS_RENEWAL]: true,
[AirbridgeAttribute.PRODUCTS]: [
{
[AirbridgeAttribute.PRODUCT_ID]: '306a57cb-f653-4220-a208-8405d8e4d506',
[AirbridgeAttribute.PRODUCT_NAME]: 'MusicStreamingMemebership',
[AirbridgeAttribute.PRODUCT_PRICE]: 15,
[AirbridgeAttribute.PRODUCT_CURRENCY]: 'USD',
},
],
},
)
Airbridge.trackEvent(
AirbridgeCategory.UNSUBSCRIBE,
{
[AirbridgeAttribute.VALUE]: 15,
[AirbridgeAttribute.CURRENCY]: 'USD',
[AirbridgeAttribute.TRANSACTION_ID]: 'cbe718c7-e44e-4707-b5cd-4a6a29f29649',
[AirbridgeAttribute.IS_RENEWAL]: true,
[AirbridgeAttribute.PRODUCTS]: [
{
[AirbridgeAttribute.PRODUCT_ID]: '306a57cb-f653-4220-a208-8405d8e4d506',
[AirbridgeAttribute.PRODUCT_NAME]: 'MusicStreamingMemebership',
[AirbridgeAttribute.PRODUCT_PRICE]: 15,
[AirbridgeAttribute.PRODUCT_CURRENCY]: 'USD',
},
],
},
)
Airbridge.trackEvent(
AirbridgeCategory.AD_IMPRESSION,
{
[AirbridgeAttribute.VALUE]: 0.01,
[AirbridgeAttribute.AD_PARTNERS]: {
'mopub': {
'app_version': '5.18.0',
'adunit_id': '12345',
'adunit_name': '12345',
'adunit_format': 'Banner',
'id': '12345',
'currency': 'USD',
'publisher_revenue': 12345.123,
'adgroup_id': '12345',
'adgroup_name': '12345',
'adgroup_type': '12345',
'adgroup_priority': '12345',
'country': 'kr',
'precision': 'publisher_defined',
'network_name': '12345',
'network_placement_id': '12345',
'demand_partner_data': '12345',
},
},
},
)
Airbridge.trackEvent(
AirbridgeCategory.AD_CLICK,
{
[AirbridgeAttribute.VALUE]: 0.1,
[AirbridgeAttribute.AD_PARTNERS]: {
'mopub': {
'app_version': '5.18.0',
'adunit_id': '12345',
'adunit_name': '12345',
'adunit_format': 'Banner',
'id': '12345',
'currency': 'USD',
'publisher_revenue': 12345.123,
'adgroup_id': '12345',
'adgroup_name': '12345',
'adgroup_type': '12345',
'adgroup_priority': '12345',
'country': 'kr',
'precision': 'publisher_defined',
'network_name': '12345',
'network_placement_id': '12345',
'demand_partner_data': '12345',
},
},
},
)
Airbridge.trackEvent(
AirbridgeCategory.COMPLETE_TUTORIAL,
{
[AirbridgeAttribute.DESCRIPTION]: 'Finish Initial Tutorial',
},
)
Airbridge.trackEvent(
AirbridgeCategory.ACHIEVE_LEVEL,
{
[AirbridgeAttribute.LEVEL]: 13,
},
)
Airbridge.trackEvent(
AirbridgeCategory.UNLOCK_ACHIEVEMENT,
{
[AirbridgeAttribute.ACHIEVEMENT_ID]: '36a0f0bb-b153-4be1-a3e0-3cb5b2b076c1',
[AirbridgeAttribute.DESCRIPTION]: 'Get Score Over 50',
[AirbridgeAttribute.SCORE]: 80,
},
)
Airbridge.trackEvent(
AirbridgeCategory.RATE,
{
[AirbridgeAttribute.RATE_ID]: '531c64b3-4704-4780-a306-89014ec18daf',
[AirbridgeAttribute.RATE]: 4.5,
[AirbridgeAttribute.MAX_RATE]: 5,
[AirbridgeAttribute.PRODUCTS]: [
{
[AirbridgeAttribute.PRODUCT_ID]: '0117b32a-5a6c-4d4c-b64c-7858e07dba78',
[AirbridgeAttribute.PRODUCT_NAME]: 'PlasticHammer',
[AirbridgeAttribute.PRODUCT_PRICE]: 10,
[AirbridgeAttribute.PRODUCT_CURRENCY]: 'USD',
},
],
},
)
Airbridge.trackEvent(
AirbridgeCategory.SHARE,
{
[AirbridgeAttribute.DESCRIPTION]: 'Share Promotion',
[AirbridgeAttribute.SHARED_CHANNEL]: 'CopyLink',
},
)
Airbridge.trackEvent(
AirbridgeCategory.SCHEDULE,
{
[AirbridgeAttribute.SCHEDULE_ID]: '75712915-2cd9-4e42-a85e-8d42f356f4c6',
[AirbridgeAttribute.DATE_TIME]: '2024-01-01T00:00:00+00:00',
[AirbridgeAttribute.PLACE]: 'ConferenceRoom',
[AirbridgeAttribute.PRODUCTS]: [
{
[AirbridgeAttribute.PRODUCT_ID]: 'abb3e65d-17bc-4b28-89e3-5e356c0ea697',
[AirbridgeAttribute.PRODUCT_NAME]: 'ConferenceRoom',
},
],
},
)
Airbridge.trackEvent(
AirbridgeCategory.SPEND_CREDITS,
{
[AirbridgeAttribute.TRANSACTION_ID]: '22eb193d-be11-4fe4-95da-c91a196faf1c',
[AirbridgeAttribute.PRODUCTS]: [
{
[AirbridgeAttribute.PRODUCT_ID]: '0117b32a-5a6c-4d4c-b64c-7858e07dba78',
[AirbridgeAttribute.PRODUCT_NAME]: 'PlasticHammer',
[AirbridgeAttribute.PRODUCT_PRICE]: 10,
[AirbridgeAttribute.PRODUCT_CURRENCY]: 'USD',
},
],
},
)
自定义事件是 Airbridge 客户自定义的事件,用于追踪无法通过标准事件满足的、针对 Airbridge 客户服务定制的用户行为。请参阅以下的示例代码。
Airbridge.trackEvent(
'event',
{
[AirbridgeAttribute.VALUE]: 10,
},
{
'string': 'string',
'number': 1000,
'boolean': true,
'object': {'key': 'value'},
'array': ['value'],
},
)
您可以将用户信息随事件一同发送至 Airbridge,以基于这些信息更精确地监测跨 Web 和 App 的广告绩效。
用户 ID 是您服务中使用的用户标识符。用户 ID 必须唯一,能够在 Web 和 App 中将同一用户识别为一个用户。
函数 |
说明 |
---|---|
| 输入用户 ID |
| 删除用户 ID |
| 输入其他用户标识符,最多可输入 10 个 - key:最多 128 个字符,必须符合正则表达式 - value:最多 1024 个字符 |
| 从输入的其他用户标识符中删除指定的标识符 |
| 删除所有输入的其他用户标识符 |
请参阅以下的示例。
// identifier
Airbridge.setUserID('string')
Airbridge.clearUserID()
// addtional identifier
Airbridge.setUserAlias('string', 'string')
Airbridge.removeUserAlias('string')
Airbridge.clearUserAlias()
注意
可能包含敏感的用户信息。发送前请咨询法律顾问。
您可以通过设置用户属性发送其他用户信息。
函数 |
说明 |
---|---|
| 输入用户邮箱,自动进行 SHA256 哈希处理 |
| 删除用户邮箱 |
| 输入用户电话号码,自动进行 SHA256 哈希处理 |
| 删除用户电话号码 |
| 输入其他用户属性,最多可输入 100 个 - key:最多 128 个字符,必须符合正则表达式 - value:仅支持 String、Number、Boolean 类型,最多 1024 个字符 |
| 从输入的其他用户属性中删除指定属性 |
| 删除所有输入的其他用户属性 |
请参阅以下的示例。
// email, phone
Airbridge.setUserEmail('string')
Airbridge.clearUserEmail()
Airbridge.setUserPhone('string')
Airbridge.clearUserPhone()
// addtional attribute
Airbridge.setUserAttribute('string', 'string')
Airbridge.setUserAttribute('number', 1000)
Airbridge.removeUserAttribute('string')
Airbridge.clearUserAttributes()
如果将 SDK 设置 的 hashUserInformationEnabled
函数设置为 false
,则发送用户邮箱和电话号码时不会进行 SHA256 哈希处理。默认设置为 true
。
您可以使用 Airbridge.clearUser
函数重置用户信息。
Airbridge.clearUser()
提示
此功能并非必需功能,请在设置前确认需求。
提示
Cordova-Ionic SDK 需为 v4.2.0 或以上版本。
通过 Airbridge Cordova-Ionic SDK 的 setOnDeeplinkReceived
方法接收的深度链接,不仅包括 Airbridge 深度链接,还可能包括其他解决方案的深度链接或自定义深度链接。
Airbridge.setOnDeeplinkReceived(function (url) {
// show proper content using url
})
您可以通过将 SDK 设置 的 isHandleAirbridgeDeeplinkOnly
设置为 true
,仅收集 Airbridge 深度链接。
根据链接的打开方式,在 App 内正确使用追踪链接可能会有一定困难。
通过使用 Airbridge.click
函数或 Airbridge.impression
函数,您可以使用户在 App 中跳转到同一 App 的另一个页面,无需通过外部浏览器。
当用户点击 App 内的追踪链接时,会调用 Airbridge.click
函数,该函数用于根据追踪链接设置将传递 URI Scheme 深度链接,或将用户跳转到应用商店或网站。
const isHandled = Airbridge.click(url, () => {
// when url is tracking link and succeed
}, (error) => {
// when url is tracking link and failed
// example: url is another app's tracking link, internet is not connected
})
if (!isHandled) {
// when url is not tracking link
}
追踪链接被展示在用户界面(UI)时,将调用 Airbridge.impression
函数,该函数用于收集展示事件。
const isHandled = Airbridge.impression(url, () => {
// when url is tracking link and succeed
}, (error) => {
// when url is tracking link and failed
// example: url is another app's tracking link, internet is not connected
})
if (!isHandled) {
// when url is not tracking link
}
注意
在 Airbridge SDK 设置 “在 App 中使用追踪链接” 功能后,每次在 App 中使用追踪链接时,将记录 “深度链接页面浏览(Deeplink Pageview)” 作为 目标事件(Target Event)。如果深度链接页面浏览频繁随深度链接打开(Deeplink Open)发生,可能会影响深度链接打开的绩效。
深度链接页面浏览的的默认归因窗口为 3 天。如果希望更改此归因窗口,请联系您的 CSM。
注意
Airbridge SDK 收集归因结果需要时间,因此不建议将归因结果用于需要实时处理的功能。
您可以使用 Airbridge.setOnAttributionReceived
函数收取归因结果数据。
Airbridge.setOnAttributionReceived((attribution) => {
// when attribution is received
})
根据归因结果的存在与否,数据传递如下:
有归因结果时,包含以下数据的 Dictionary 将通过回调传递。所有 Key 都提供归因相关信息。例如,attributedChannel
提供归因的广告渠道信息。
归因结果会在 SDK 初始化后 1 分钟内通过回调传递。如因 App 关闭未传递归因结果,则会在下次 App 启用后 1 分钟内通过回调传递。受网络状态等因素影响,传递时间可能延迟最多 5 分钟。
键 | 类型 | 说明 |
---|---|---|
attributedChannel | String | 渠道 |
attributedCampaign | String | 广告系列 |
attributedAdGroup | String | 广告组 |
attributedAdCreative | String | 广告素材 |
attributedContent | String | 内容 |
attributedTerm | String | 关键词 |
attributedSubPublisher | String | 子渠道 |
attributedSubSubPublisher1 | String | 二级子渠道 1 |
attributedSubSubPublisher2 | String | 二级子渠道 2 |
attributedSubSubPublisher3 | String | 二级子渠道 3 |
如果没有归因结果,则通过回调传递以下 Dictionary。从 SDK 初始化起至少需要经过 3 小时,并重新启用 App 后,才会传递无归因结果的信息。
{
"attributedChannel": "unattributed"
}
点击推送通知后,需要将 Payload 中的深度链接信息传递给 Airbridge SDK,才能收集深度链接事件。请使用 Airbridge.trackDeeplink
函数进行设置。
请将以下代码添加至 ios/YOUR_PROJECT_NAME/AppDelegate.m
文件中。
import Airbridge
func application(
_ application: UIApplication,
didReceiveRemoteNotification userInfo: [AnyHashable : Any],
fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void
) {
if UIApplication.shared.applicationState == .inactive {
let url = // 푸시 알림 페이로드의 딥링크
Airbridge.trackDeeplink(url)
}
}
func userNotificationCenter(
_ center: UNUserNotificationCenter,
didReceive response: UNNotificationResponse,
withCompletionHandlercompletionHandler: @escaping () -> Void
) {
if
UIApplication.shared.applicationState == .inactive || UIApplication.shared.applicationState == .background,
response.actionIdentifier == UNNotificationDefaultActionIdentifier
{
let url = // 푸시 알림 페이로드의 딥링크
Airbridge.trackDeeplink(url)
}
}
#import <Airbridge/Airbridge.h>
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler {
if (UIApplication.sharedApplication.applicationState == UIApplicationStateInactive) {
NSURL* url = // 푸시 알림 페이로드의 딥링크
[Airbridge trackDeeplinkWithUrl:url];
}
}
- (void)userNotificationCenter:(UNUserNotificationCenter *)center didReceiveNotificationResponse:(UNNotificationResponse *)response withCompletionHandler:(void (^)(void))completionHandler {
if ((UIApplication.sharedApplication.applicationState == UIApplicationStateInactive || UIApplication.sharedApplication.applicationState == UIApplicationStateBackground)
&& [response.actionIdentifier isEqual:UNNotificationDefaultActionIdentifier])
{
NSURL* url = // 푸시 알림 페이로드의 딥링크
[Airbridge trackDeeplinkWithUrl:url];
}
}
Android 会自动收集,无需额外设置。
无论深度链接由何种服务生成,只要通过深度链接启用 App,Airbridge SDK 即会收集深度链接事件。您可以将 SDK 设置 的 trackAirbridgeDeeplinkOnlyEnabled
函数设置为 true
,仅收集由 Airbridge 深度链接触发的事件。
Airbridge SDK 会收集开启新会话的 Open 事件和 Foreground 事件,但在会话持续期间,这些事件不会被收集。
您可以通过将 SDK 设置 的 trackInSessionLifecycleEventEnabled
函数设置为 true
,以在会话持续期间也收集 Open 事件和 Foreground 事件。
所有收集到的 Foreground 事件都将被记录为 Open 事件。
为遵守 DMA,用户的同意信息(User Consent)必须共享给 Airbridge。请注意,如果用户位于欧洲经济区(European Economic Area,简称 EEA),则必须始终向 Airbridge 共享用户是否位于 EEA 以及用户的同意信息。DMA 的更多信息,请参阅 本指南。
1. 请检查启用 App 的用户所在地。如果用户在 EEA(eea=1
)启用了 App,则检查是否已取得该用户的同意信息。如果已取得,请继续步骤 3。
提示
Airbridge 无法提供有关存储用户同意信息或实现同意弹窗的指导。请咨询法律顾问。
2. 如果尚未取得用户的同意信息,请通过同意弹窗等方法取得用户的同意信息。必须收集 adPersonalization
和 adUserData
。
注意
从 2024-03-06 起,必须对 EEA 的现有用户和新用户至少收集一次同意信息。
必须共享给 Airbridge 的用户同意信息如下。eea
值不是用户的直接响应,也不是 Airbridge 自动收集的信息。请根据用户所在地确定 eea
值并将其共享给 Airbridge。
Airbridge 字段 |
Google 字段 |
说明 |
---|---|---|
<string> |
| 表示用户是否在 EEA,或 DMA 适用地区。该值不是用户的直接响应,也不是 Airbridge 自动收集的信息。请根据用户所在地确定 不处理除 - - |
<string> |
| 对于收集信息以提供个性化广告(Personalized Ads) 的用户同意情况。不处理除 - - |
<string> |
| 对于向 Google 发送用于广告目的用户数据的同意情况。不处理除 - - |
3. 请将 SDK 设置 的 autoStartTrackingEnabled
设置为 false
。
4. 请初始化 Airbridge SDK,并在收集用户信息之前将用户同意信息共享给 Airbridge。
注意
必须为
eea
、adPersonalization
和adUserData
使用相同的名称。请根据收集的信息正确输入
0
或1
。
// deliver informations to sdk using device alias
// based on actual region
Airbridge.setDeviceAlias('eea', '0' or '1')
// based on actual user consent
Airbridge.setDeviceAlias('adPersonalization', '0' or '1')
Airbridge.setDeviceAlias('adUserData', '0' or '1')
// start tracking explicitly
Airbridge.startTracking()
请按以下步骤在 Meta ads 中设置 延迟深度链接。Airbridge SDK 优先收集 Meta Deferred App Link,若无 Meta Deferred App Link 则收集 Airbridge 延迟深度链接。
Meta ads 中的 SKAN 广告系列不支持 Meta Deferred App Link。
1. 请安装 Facebook SDK。请参阅 Meta ads 文档(iOS)和 Meta ads 文档(Android)。
2. 请将 SDK 设置 的 trackMetaDeferredAppLinkEnabled
函数设置为 true
。
注意
如果 Airbridge SDK 在初始化后未立即启用,则可能无法收集安装(Install)、打开(Open)、深度链接(Deeplink)事件。
初始化 SDK 时,所有功能将默认启用。您可以通过将 SDK 设置 的 sdkEnabled
函数设置为 false
,在禁用所有功能的状态下初始化 Airbridge SDK。
或者,可以通过以下方法检查 Airbridge SDK 的启用状态,并启用或禁用所有功能。
Airbridge.isSDKEnabled()
Airbridge.enableSDK()
Airbridge.disableSDK()
以下是收集 MIR 所需的设置。请在 SDK 初始化阶段,将 Meta App ID 传递给 SDK 设置 的 metaInstallReferrerAppID
。
完成设置后,需要将 Install Referrer Decryption Key(安装引荐来源解密密钥)注册到 Airbridge 面板,才能查看解密后的 MIR。如何注册 Install Referrer Decryption Key,请参阅 本指南。
Airbridge 会向过去 6 个月内执行过至少 1 次 App 事件的用户发送静默推送通知,以检查用户是否已卸载 App。此静默推送通知在每天 UTC 15:00 至 16:00 之间发送。App 卸载事件可在 Airbridge 报告和通过导出原始数据查看。
详细设置方法和说明,请参阅以下指南:
部分第三方解决方案的集成需要进行 SDK 设置。建议在通过 Airbridge SDK 收集数据之前,完成所需设置。
各第三方解决方案的集成设置,请参阅以下指南:
Airbridge SDK 提供的日志分为以下 5 个级别:Debug、Info、Warning、Error 和 Fault。 Debug 为严重性最低的日志级别,Fault 为最严重的日志级别。
Airbridge SDK 默认提供 Warning、Error 和 Fault 级别日志。通过将日志级别输入 SDK 设置 的 logLevel
函数,可以查看从该日志级别到 Fault 级别的所有日志。
Was this page helpful?