提示
本指南介绍如何安装和设置 Unity SDK(v4)。如需了解旧版本,请参阅 Unity SDK(旧版本)。
Airbridge Unity SDK 需要 Unity
2018.4
及以上版本。
您可以通过以下方法安装 Airbridge Unity SDK。安装后,您可以通过 测试 Unity SDK 来检查 SDK 是否正确安装。
请下载最新版本的 Airbridge Unity SDK。
请从 Unity 顶部菜单导航至 [Assets]>[Import Package]>[Custom Package...] 添加 Airbridge Unity 包文件。
包安装完成后可以在 Unity 查看 AB180
选项卡。
提示
请根据需求选择一般 SDK 或 Restricted SDK, 只能安装其中一个。
根据政策或环境,可能需要对收集 设备 ID(例如 GAID 或 IDFA)进行限制。如果安装 Restricted SDK,Airbridge SDK 不会收集设备 ID。
请按照以下步骤安装 Restricted SDK:
请下载最新版本的 Airbridge Unity SDK。
请从 Unity 顶部菜单导航至 [Assets]>[Import Package]>[Custom Package...] 添加 Airbridge Unity 包文件。
包安装完成后可以在 Unity 查看 AB180
选项卡。
请在 SDK 设置 的 App Name
和 App Token
输入正确的值。
App Name
和 App Token
可在 Airbridge 面板的 [设置]>[Token] 获取。
在 Unity 顶部菜单点击 [AB180]>[Airbridge Settings],即可查看以下界面。对于不需要配置的值,请省略对应的键。
有关配置值的更多信息,请参阅以下指南:
配置值 | 指南 |
---|---|
App Name | |
App Token | |
Log Level | |
iOS URI Scheme | |
Android URI Scheme | |
Session Timeout Seconds | |
User Info Hash Enabled | |
Track Airbridge Link Only | |
Auto Start Tracking Enabled | |
Facebook Deferred App Link Enabled | |
iOS Tracking Authorize Timeout Seconds | |
SDK Signature Secret ID | |
SDK Signature Secret | |
Track In Session Life Cycle Event Enabled | |
Clear Event Buffer On Initialize Enabled | |
SDK Enabled | |
Event Buffer Count Limit | |
Event Buffer Size Limit In Gibibyte | |
Event Transmit Interval Seconds | |
Meta Install Referrer (Facebook App ID) | |
Is Handle Airbridge Deeplink Only |
提示
为确保遵守隐私政策所需的功能,应与法律顾问共同审查。
在 iOS 环境中,只有在通过 ATT(App Tracking Transparency,应用跟踪透明度)弹窗征得用户同意后,才能收集 IDFA。
收集安装事件应延迟到用户允许追踪后进行。IDFA 会与安装事件一同收集,因此如果在用户通过 ATT 弹窗允许追踪之前收集安装事件,IDFA 将缺失,影响绩效监测。建议设置足够的延迟时间,以确保 IDFA 被正确收集。
1. 请准备好您将在 ATT 弹窗中使用的文本。
2. 请按照 Apple 文档 设置 ATT 弹窗。
3. 如果未收集到安装事件,Airbridge Unity SDK 会在每次 App 启用时延迟 30 秒尝试收集安装事件,直到用户允许追踪为止。如果用户在决定是否允许追踪之前关闭 App,SDK 将不会收集安装事件,并会在下次启用 App 时重试。
您可以使用 SDK 设置 的 iOS Tracking Authorization Timeout Seconds
修改延迟时间。默认值为 30 秒,最大可设置为 3600 秒(1 小时)。
注意
请确保为延迟收集安装事件预留足够时间。在用户通过 ATT 弹窗允许追踪之前,如果延迟时间到期,SDK 将会收集不包含 IDFA 的安装事件。
提示
此功能并非必需功能,请在设置前确认需求。
Opt-in 政策是指在用户同意之前不使用用户信息。
请将 SDK 设置 的 Auto Start Tracking Enabled
设置为 false
后,在可以收集事件时调用 StartTracking
函数。从调用 StartTracking
函数的时刻起,才开始收集事件。
Airbridge.StartTracking();
提示
此功能并非必需功能,请在设置前确认需求。
Opt-out 政策是指在用户拒绝之前使用用户信息。
请将 SDK 设置 的 Auto Start Tracking Enabled
设置为 true
后,在无法再收集事件时调用 StopTracking
函数。从调用 StopTracking
函数的时刻起,将不再收集事件。
Airbridge.StopTracking();
提示
此功能并非必需功能,请在设置前确认需求。
您可以通过 SDK 签名防止 SDK 伪造 (SDK Spoofing)。
SDK 签名设置需要以下 SDK 签名凭证:
SDK Signature Secret ID
:Secret ID,可以在 Airbridge 面板的 [规则管理]>[作弊验证规则]>[SDK 签名]>[SDK 签名凭证] 中获取。
SDK Signature Secret
:Secret,可以在 Airbridge 面板的 [规则管理]>[作弊验证规则]>[SDK 签名]>[SDK 签名凭证] 中获取。
SDK 签名凭证的更多信息,请参阅 本指南。
请在 SDK 设置 输入 SDK Signature Secret ID
和 SDK Signature Secret
。
您可以通过设置深度链接,将点击包含追踪链接的广告的用户跳转至 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 深度链接启用。
请在 SDK 设置 的 iOS URI Scheme
字段中,输入 Airbridge 面板 [追踪链接]>[深度链接] 页面中输入的 iOS URI Scheme。Universal Link 域名将根据 SDK 设置 中的 App Name
设置值自动配置。
请在 SDK 设置 的 Android URI Scheme
字段中,输入 Airbridge 面板 [追踪链接]>[深度链接] 页面中输入的 Android URI Scheme。App Link 将根据 SDK 设置 中的 App Name
设置值自动配置。
注意
以下配置将自动应用。但如果使用自定义 iOS AppDelegate 或自定义 Android Activity,则不会自动应用,需手动配置。
Airbridge Unity 使用 iOS AppDelegate (Assets/Plugins/Airbridge/iOS/Delegate/AUAppDelegate.mm
)。如果已使用自定义 AppDelegate,请在该自定义 AppDelegate 中添加以下代码。
#import "AirbridgeUnity.h"
- (void)onOpenURL:(NSNotification *)notification {
NSURL* url = notification.userInfo[@"url"];
[Airbridge trackDeeplinkWithUrl:url];
if (AirbridgeUnity.sharedInstance.deeplinkOnReceived == nil) { return; }
AirbridgeUnity.sharedInstance.deeplinkOnReceived(url.absoluteString);
}
- (void)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void (^)(NSArray<id<UIUserActivityRestoring>>* _Nullable))restorationHandler {
[Airbridge trackDeeplinkWithUserActivity:userActivity];
if (AirbridgeUnity.sharedInstance.deeplinkOnReceived == nil) { return; }
AirbridgeUnity.sharedInstance.deeplinkOnReceived(userActivity.webpageURL.absoluteString);
}
Airbridge Unity 使用 Android Activity (Assets/Plugins/Airbridge/Android/java/co/ab180/airbridge/unity/AirbridgeActivity.java
)。如果已使用自定义 Activity,请在该自定义 Activity 中添加以下代码。
import co.ab180.airbridge.unity.AirbridgeUnity
override fun onResume() {
super.onResume()
AirbridgeUnity.processHandleDeeplink(intent)
}
override fun onNewIntent(intent: Intent?) {
super.onNewIntent(intent)
setIntent(intent)
}
import co.ab180.airbridge.unity.AirbridgeUnity;
@Override
protected void onResume() {
super.onResume();
AirbridgeUnity.processHandleDeeplink(getIntent());
}
@Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
setIntent(intent);
}
Airbridge 深度链接被启用后,将被转换为 URI Scheme 深度链接并传递至 onDeeplinkReceived
回调。非 Airbridge 深度链接则原样传递。
使用接收的深度链接,将用户发送至预设的目标页面。
Airbridge.SetOnDeeplinkReceived((string deeplink) =>
{
// 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 中,无需更改网站代码,即可通过设置使 Unity SDK 处理应用内网站上出现的与 Airbridge 相关的操作。
请调用 Airbridge.TrackEvent
函数以发送事件。Airbridge.TrackEvent
函数构成要素的类型及其必需性如下:
public static void TrackEvent(
string category,
Dictionary<string, object> semanticAttributes = null,
Dictionary<string, object> customAttributes = null
)
名称 | 是否必需 | 类型 | 说明 |
---|---|---|---|
category | 必需 | String | 事件名称 |
semanticAttributes | 可选 | Dictionary<string, object> | 事件标准属性 |
customAttributes | 可选 | Dictionary<string, object> | 事件自定义属性 |
各构成要素的定义和可用数据类型请参阅下文:
您可在 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(
category: AirbridgeCategory.ORDER_COMPLETED,
semanticAttributes: new Dictionary<string, object>()
{
// action
{ AirbridgeAttribute.ACTION, "Tool" },
// label
{ AirbridgeAttribute.LABEL, "Hammer" },
// value
{ AirbridgeAttribute.VALUE, 10 },
// semantic attribute (provided by sdk)
{ AirbridgeAttribute.CURRENCY, "USD" },
{
AirbridgeAttribute.PRODUCTS, new List<object>()
{
new Dictionary<string, object>()
{
// 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 }
},
customAttributes: new Dictionary<string, object>()
{
// custom attribute
{ "promotion", "FirstPurchasePromotion" }
}
);
注意
Semantic Attribute 和 Custom Attribute 仅支持 JSON 数据类型。
JSON 类型:String、Number、Boolean、Object<String, JSON>、Array<JSON>
Semantic Attribute 和 Custom Attribute 不支持的类型:Struct、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(
category: "event",
semanticAttributes: new Dictionary<string, object>()
{
{ AirbridgeAttribute.VALUE, 10 },
},
customAttributes: new Dictionary<string, object>()
{
{ "string", "string" },
{ "number", 1000 },
{ "boolean", true },
{
"object", new Dictionary<string, object>()
{
{ "key", "value" }
}
},
{ "array", new List<object>() { "value" } },
}
);
提示
如果未配置其他设置,则将应用默认设置。请查看是否需要其他设置后再继续。
您可以为发送的应用内事件添加所需的设置。
Airbridge SDK 会将收集的事件保存下来,并逐一加载已保存的事件,直到所有事件发送成功。成功发送的事件将被移除。
发送失败的事件会根据失败的次数分别等待 1、2、4…… 秒后再次尝试发送。如果持续发送失败,则会按照设定的事件发送周期等待,并重复尝试重新加载并发送事件,直到发送成功为止。
默认事件发送周期为 0 秒,您可以使用 SDK 设置 的 Event Transmit Interval Seconds
修改此值,最长可达 86,400 秒(1 天)。
Airbridge SDK 仅在未超出最大事件数和最大事件大小限制的情况下保存事件。
可设置的最大事件数为 INT_MAX;可设置的最大事件大小为 1024 GiB(千兆字节)。默认的最大事件数也为 INT_MAX;默认的最大事件大小也为 1024 GiB(千兆字节)。您可以使用 SDK 设置 的 Event Buffer Count Limit
和 Event Buffer Size Limit In Gibibyte
进行修改。
如果启用未发送事件删除选项,在 Airbridge SDK 初始化过程中未发送的所有已保存应用内事件将被删除。未发送事件删除选项默认为禁用。
您可以将 SDK 设置 的 Clear Event Buffer On Initialize Enabled
设置为 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(
category: AirbridgeCategory.PRODUCT_LIST_VIEWED,
semanticAttributes: new Dictionary<string, object>()
{
{ AirbridgeAttribute.LIST_ID, "84e6e236-38c4-48db-9b49-16e4cc064386" },
{
AirbridgeAttribute.PRODUCTS, new List<object>()
{
new Dictionary<string, object>()
{
{ AirbridgeAttribute.PRODUCT_ID, "0117b32a-5a6c-4d4c-b64c-7858e07dba78" },
{ AirbridgeAttribute.PRODUCT_NAME, "PlasticHammer" },
{ AirbridgeAttribute.PRODUCT_PRICE, 10 },
{ AirbridgeAttribute.PRODUCT_QUANTITY, 1 },
{ AirbridgeAttribute.PRODUCT_CURRENCY, "USD" }
},
new Dictionary<string, object>()
{
{ 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(
category: AirbridgeCategory.SEARCH_RESULTS_VIEWED,
semanticAttributes: new Dictionary<string, object>()
{
{ AirbridgeAttribute.QUERY, "Plastic" },
{
AirbridgeAttribute.PRODUCTS, new List<object>()
{
new Dictionary<string, object>()
{
{ AirbridgeAttribute.PRODUCT_ID, "0117b32a-5a6c-4d4c-b64c-7858e07dba78" },
{ AirbridgeAttribute.PRODUCT_NAME, "PlasticHammer" },
{ AirbridgeAttribute.PRODUCT_PRICE, 10 },
{ AirbridgeAttribute.PRODUCT_QUANTITY, 1 },
{ AirbridgeAttribute.PRODUCT_CURRENCY, "USD" }
},
new Dictionary<string, object>()
{
{ 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(
category: AirbridgeCategory.PRODUCT_VIEWED,
semanticAttributes: new Dictionary<string, object>()
{
{
AirbridgeAttribute.PRODUCTS, new List<object>()
{
new Dictionary<string, object>()
{
{ 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(
category: AirbridgeCategory.ADD_PAYMENT_INFO,
semanticAttributes: new Dictionary<string, object>()
{
{ AirbridgeAttribute.TYPE, "CreditCard" },
}
);
Airbridge.TrackEvent(
category: AirbridgeCategory.ADD_TO_WISHLIST,
semanticAttributes: new Dictionary<string, object>()
{
{ AirbridgeAttribute.LIST_ID, "189a2f8b-83ee-4074-8158-726be54e57d4" },
{ AirbridgeAttribute.CURRENCY, "USD" },
{
AirbridgeAttribute.PRODUCTS, new List<object>()
{
new Dictionary<string, object>()
{
{ 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(
category: AirbridgeCategory.ADDED_TO_CART,
semanticAttributes: new Dictionary<string, object>()
{
{ AirbridgeAttribute.CART_ID, "421eaeb7-6e80-4694-933e-f2e1a55e9cbd" },
{ AirbridgeAttribute.CURRENCY, "USD" },
{
AirbridgeAttribute.PRODUCTS, new List<object>()
{
new Dictionary<string, object>()
{
{ 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(
category: AirbridgeCategory.INITIATE_CHECKOUT,
semanticAttributes: new Dictionary<string, object>()
{
{ AirbridgeAttribute.TRANSACTION_ID, "0a7ee1ec-33da-4ffb-b775-89e80e75978a" },
{ AirbridgeAttribute.CURRENCY, "USD" },
{
AirbridgeAttribute.PRODUCTS, new List<object>()
{
new Dictionary<string, object>()
{
{ AirbridgeAttribute.PRODUCT_ID, "0117b32a-5a6c-4d4c-b64c-7858e07dba78" },
{ AirbridgeAttribute.PRODUCT_NAME, "PlasticHammer" },
{ AirbridgeAttribute.PRODUCT_PRICE, 10 },
{ AirbridgeAttribute.PRODUCT_QUANTITY, 1 },
{ AirbridgeAttribute.PRODUCT_CURRENCY, "USD" },
},
new Dictionary<string, object>()
{
{ 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(
category: AirbridgeCategory.ORDER_COMPLETED,
semanticAttributes: new Dictionary<string, object>()
{
{ AirbridgeAttribute.VALUE, 11 },
{ AirbridgeAttribute.TRANSACTION_ID, "8065ef16-162b-4a82-b683-e51aefdda7d5" },
{ AirbridgeAttribute.CURRENCY, "USD" },
{ AirbridgeAttribute.IN_APP_PURCHASED, true },
{
AirbridgeAttribute.PRODUCTS, new List<object>()
{
new Dictionary<string, object>()
{
{ AirbridgeAttribute.PRODUCT_ID, "0117b32a-5a6c-4d4c-b64c-7858e07dba78" },
{ AirbridgeAttribute.PRODUCT_NAME, "PlasticHammer" },
{ AirbridgeAttribute.PRODUCT_PRICE, 10 },
{ AirbridgeAttribute.PRODUCT_QUANTITY, 1 },
{ AirbridgeAttribute.PRODUCT_CURRENCY, "USD" },
},
new Dictionary<string, object>()
{
{ 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(
category: AirbridgeCategory.ORDER_CANCELED,
semanticAttributes: new Dictionary<string, object>()
{
{ AirbridgeAttribute.VALUE, 11 },
{ AirbridgeAttribute.TRANSACTION_ID, "8065ef16-162b-4a82-b683-e51aefdda7d5" },
{ AirbridgeAttribute.CURRENCY, "USD" },
{ AirbridgeAttribute.IN_APP_PURCHASED, true },
{
AirbridgeAttribute.PRODUCTS, new List<object>()
{
new Dictionary<string, object>()
{
{ AirbridgeAttribute.PRODUCT_ID, "0117b32a-5a6c-4d4c-b64c-7858e07dba78" },
{ AirbridgeAttribute.PRODUCT_NAME, "PlasticHammer" },
{ AirbridgeAttribute.PRODUCT_PRICE, 10 },
{ AirbridgeAttribute.PRODUCT_QUANTITY, 1 },
{ AirbridgeAttribute.PRODUCT_CURRENCY, "USD" },
},
new Dictionary<string, object>()
{
{ 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(
category: AirbridgeCategory.START_TRIAL,
semanticAttributes: new Dictionary<string, object>()
{
{ AirbridgeAttribute.TRANSACTION_ID, "ef1e5271-0370-407c-b1e9-669a8df1dc2c" },
{ AirbridgeAttribute.CURRENCY, "USD" },
{ AirbridgeAttribute.PERIOD, "P1M" },
{
AirbridgeAttribute.PRODUCTS, new List<object>()
{
new Dictionary<string, object>()
{
{ AirbridgeAttribute.PRODUCT_ID, "306a57cb-f653-4220-a208-8405d8e4d506" },
{ AirbridgeAttribute.PRODUCT_NAME, "MusicStreamingMembership" },
{ AirbridgeAttribute.PRODUCT_PRICE, 15 },
{ AirbridgeAttribute.PRODUCT_CURRENCY, "USD" },
},
}
}
}
);
Airbridge.TrackEvent(
category: AirbridgeCategory.SUBSCRIBE,
semanticAttributes: new Dictionary<string, object>()
{
{ AirbridgeAttribute.VALUE, 15 },
{ AirbridgeAttribute.CURRENCY, "USD" },
{ AirbridgeAttribute.TRANSACTION_ID, "cbe718c7-e44e-4707-b5cd-4a6a29f29649" },
{ AirbridgeAttribute.PERIOD, "P1M" },
{ AirbridgeAttribute.IS_RENEWAL, true },
{
AirbridgeAttribute.PRODUCTS, new List<object>()
{
new Dictionary<string, object>()
{
{ AirbridgeAttribute.PRODUCT_ID, "306a57cb-f653-4220-a208-8405d8e4d506" },
{ AirbridgeAttribute.PRODUCT_NAME, "MusicStreamingMembership" },
{ AirbridgeAttribute.PRODUCT_PRICE, 15 },
{ AirbridgeAttribute.PRODUCT_CURRENCY, "USD" },
},
}
}
}
);
Airbridge.TrackEvent(
category: AirbridgeCategory.UNSUBSCRIBE,
semanticAttributes: new Dictionary<string, object>()
{
{ AirbridgeAttribute.VALUE, 15 },
{ AirbridgeAttribute.CURRENCY, "USD" },
{ AirbridgeAttribute.TRANSACTION_ID, "cbe718c7-e44e-4707-b5cd-4a6a29f29649" },
{ AirbridgeAttribute.IS_RENEWAL, true },
{
AirbridgeAttribute.PRODUCTS, new List<object>()
{
new Dictionary<string, object>()
{
{ AirbridgeAttribute.PRODUCT_ID, "306a57cb-f653-4220-a208-8405d8e4d506" },
{ AirbridgeAttribute.PRODUCT_NAME, "MusicStreamingMembership" },
{ AirbridgeAttribute.PRODUCT_PRICE, 15 },
{ AirbridgeAttribute.PRODUCT_CURRENCY, "USD" },
},
}
}
}
);
Airbridge.TrackEvent(
category: AirbridgeCategory.AD_IMPRESSION,
semanticAttributes: new Dictionary<string, object>()
{
{ AirbridgeAttribute.VALUE, 0.01 },
{
AirbridgeAttribute.AD_PARTNERS, new Dictionary<string, object>()
{
{
"mopub", new Dictionary<string, object>()
{
{ "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(
category: AirbridgeCategory.AD_CLICK,
semanticAttributes: new Dictionary<string, object>()
{
{ AirbridgeAttribute.VALUE, 0.01 },
{
AirbridgeAttribute.AD_PARTNERS, new Dictionary<string, object>()
{
{
"mopub", new Dictionary<string, object>()
{
{ "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(
category: AirbridgeCategory.COMPLETE_TUTORIAL,
semanticAttributes: new Dictionary<string, object>()
{
{ AirbridgeAttribute.DESCRIPTION, "Finish Initial Tutorial" },
}
);
Airbridge.TrackEvent(
category: AirbridgeCategory.ACHIEVE_LEVEL,
semanticAttributes: new Dictionary<string, object>()
{
{ AirbridgeAttribute.LEVEL, 13 },
}
);
Airbridge.TrackEvent(
category: AirbridgeCategory.UNLOCK_ACHIEVEMENT,
semanticAttributes: new Dictionary<string, object>()
{
{ AirbridgeAttribute.ACHIEVEMENT_ID, "36a0f0bb-b153-4be1-a3e0-3cb5b2b076c1" },
{ AirbridgeAttribute.DESCRIPTION, "Get Score Over 50" },
{ AirbridgeAttribute.SCORE, 80 },
}
);
Airbridge.TrackEvent(
category: AirbridgeCategory.RATE,
semanticAttributes: new Dictionary<string, object>()
{
{ AirbridgeAttribute.RATE_ID, "531c64b3-4704-4780-a306-89014ec18daf" },
{ AirbridgeAttribute.RATE, 4.5 },
{ AirbridgeAttribute.MAX_RATE, 5 },
{
AirbridgeAttribute.PRODUCTS, new List<object>()
{
new Dictionary<string, object>()
{
{ 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(
category: AirbridgeCategory.SHARE,
semanticAttributes: new Dictionary<string, object>()
{
{ AirbridgeAttribute.DESCRIPTION, "Share Promotion" },
{ AirbridgeAttribute.SHARED_CHANNEL, "CopyLink" },
}
);
Airbridge.TrackEvent(
category: AirbridgeCategory.SCHEDULE,
semanticAttributes: new Dictionary<string, object>()
{
{ AirbridgeAttribute.SCHEDULE_ID, "75712915-2cd9-4e42-a85e-8d42f356f4c6" },
{ AirbridgeAttribute.DATE_TIME, "2024-01-01T00:00:00+00:00" },
{ AirbridgeAttribute.PLACE, "ConferenceRoom" },
{
AirbridgeAttribute.PRODUCTS, new List<object>()
{
new Dictionary<string, object>()
{
{ AirbridgeAttribute.PRODUCT_ID, "abb3e65d-17bc-4b28-89e3-5e356c0ea697" },
{ AirbridgeAttribute.PRODUCT_NAME, "ConferenceRoom" },
},
}
}
}
);
Airbridge.TrackEvent(
category: AirbridgeCategory.SPEND_CREDITS,
semanticAttributes: new Dictionary<string, object>()
{
{ AirbridgeAttribute.TRANSACTION_ID, "22eb193d-be11-4fe4-95da-c91a196faf1c" },
{
AirbridgeAttribute.PRODUCTS, new List<object>()
{
new Dictionary<string, object>()
{
{ AirbridgeAttribute.PRODUCT_ID, "0117b32a-5a6c-4d4c-b64c-7858e07dba78" },
{ AirbridgeAttribute.PRODUCT_NAME, "PlasticHammer" },
{ AirbridgeAttribute.PRODUCT_PRICE, 10 },
{ AirbridgeAttribute.PRODUCT_CURRENCY, "USD" }
},
}
}
}
);
自定义事件是 Airbridge 客户自定义的事件,用于追踪无法通过标准事件满足的、针对 Airbridge 客户服务定制的用户行为。请参阅以下的示例代码。
Airbridge.TrackEvent(
category: "event",
semanticAttributes: new Dictionary<string, object>()
{
{ AirbridgeAttribute.VALUE, 10 },
},
customAttributes: new Dictionary<string, object>()
{
{ "string", "string" },
{ "number", 1000 },
{ "boolean", true },
{
"object", new Dictionary<string, object>()
{
{ "key", "value" }
}
},
{ "array", new List<object>() { "value" } },
}
);
您可以将用户信息随事件一同发送至 Airbridge,以基于这些信息更精确地监测跨 Web 和 App 的广告绩效。
用户 ID 是您服务中使用的用户标识符。用户 ID 必须唯一,能够在 Web 和 App 中将同一用户识别为一个用户。
函数 |
说明 |
---|---|
| 输入用户 ID |
| 删除用户 ID |
| 输入其他用户标识符,最多可输入 10 个 - key:最多 128 个字符,必须符合正则表达式 - value:最多 1024 个字符 |
| 从输入的其他用户标识符中删除指定的标识符 |
| 删除所有输入的其他用户标识符 |
请参阅以下的示例。
// ID
Airbridge.SetUserID("testID");
// Alias
Airbridge.SetUserAlias("ADD_YOUR_KEY", "ADD_YOUR_VALUE");
Airbridge.RemoveUserAlias("DELETE_THIS_KEY");
Airbridge.ClearUserAlias();
注意
可能包含敏感的用户信息。发送前请咨询法律顾问。
您可以通过设置用户属性发送其他用户信息。
函数 |
说明 |
---|---|
| 输入用户邮箱,自动进行 SHA256 哈希处理 |
| 删除用户邮箱 |
| 输入用户电话号码,自动进行 SHA256 哈希处理 |
| 删除用户电话号码 |
| 输入其他用户属性,最多可输入 100 个 - key:最多 128 个字符,必须符合正则表达式 - value:仅支持 String、Number、Boolean 类型,最多 1024 个字符 |
| 从输入的其他用户属性中删除指定属性 |
| 删除所有输入的其他用户属性 |
请参阅以下的示例。
// Automatically hashed on client side using SHA256
// Can turn off hashing feature with special flag
Airbridge.SetUserEmail("testID@ab180.co");
Airbridge.SetUserPhone("821012341234");
// Attributes
Airbridge.SetUserAttribute("ADD_YOUR_KEY", 1);
Airbridge.SetUserAttribute("ADD_YOUR_KEY", 1L);
Airbridge.SetUserAttribute("ADD_YOUR_KEY", 1f);
Airbridge.SetUserAttribute("ADD_YOUR_KEY", 1.0);
Airbridge.SetUserAttribute("ADD_YOUR_KEY", "1");
Airbridge.SetUserAttribute("ADD_YOUR_KEY", true);
Airbridge.RemoveUserAttribute("DELETE_THIS_KEY");
Airbridge.ClearUserAttributes();
如果将 SDK 设置 的 User Info Hash Enabled
设置为 false
,则发送用户邮箱和电话号码时不会进行 SHA256 哈希处理。默认设置为 true
。
您可以使用 Airbridge.ClearUser
函数重置用户信息。
Airbridge.ClearUser();
提示
此功能并非必需功能,请在设置前确认需求。
通过 Airbridge Unity SDK 的 Airbridge.SetOnDeeplinkReceived
方法接收的深度链接,不仅包括 Airbridge 深度链接,还可能包括其他解决方案的深度链接或自定义深度链接。
Airbridge.SetOnDeeplinkReceived((string deeplink) =>
{
// show proper content using url
});
您可以通过将 SDK 设置 的 Is Handle Airbridge Deeplink Only
设置为 true
,使 onDeeplinkReceived
回调仅传递 Airbridge 深度链接。
根据链接的打开方式,在 App 内正确使用追踪链接可能会有一定困难。
通过使用 Airbridge.Click
函数或 Airbridge.Impression
函数,您可以使用户在 App 中跳转到同一 App 的另一个页面,无需通过外部浏览器。
当用户点击 App 内的追踪链接时,会调用 Airbridge.Click
函数,该函数用于根据追踪链接设置将传递 URI Scheme 深度链接,或将用户跳转到应用商店或网站。
Airbridge.Click(
trackingLink: "https://abr.ge/~~~",
onSuccess: () =>
{
// when url is tracking link and succeed
},
onFailure: (Exception e) =>
{
// when url is tracking link and failed
// example: url is another app's tracking link, internet is not connected
}
);
追踪链接被展示在用户界面(UI)时,将调用 Airbridge.Impression
函数,该函数用于收集展示事件。
Airbridge.Impression(
trackingLink: "https://abr.ge/~~~",
onSuccess: () =>
{
// when url is tracking link and succeed
},
onFailure: (Exception e) =>
{
// when url is tracking link and failed
// example: url is another app's tracking link, internet is not connected
}
);
注意
在 Airbridge SDK 设置 “在 App 中使用追踪链接” 功能后,每次在 App 中使用追踪链接时,将记录 “深度链接页面浏览(Deeplink Pageview)” 作为 目标事件(Target Event)。如果深度链接页面浏览频繁随深度链接打开(Deeplink Open)发生,可能会影响深度链接打开的绩效。
深度链接页面浏览的的默认归因窗口为 3 天。如果希望更改此归因窗口,请联系您的 CSM。
注意
Airbridge SDK 收集归因结果需要时间,因此不建议将归因结果用于需要实时处理的功能。
您可以使用 Airbridge.SetOnAttributionReceived
函数收取安装事件的归因结果数据。
Airbridge.SetOnAttributionReceived((Dictionary<string, object> result) =>
{
// Process attribution data
});
根据归因结果的存在与否,数据传递如下:
有归因结果时,包含以下数据的 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"
}
注意
请使用自定义 iOS AppDelegate 来应用下方代码。
点击推送通知后,需要将 Payload 中的深度链接信息传递给 Airbridge SDK,才能收集深度链接事件。请使用 Airbridge.trackDeeplink
函数进行设置。
请将以下代码添加至自定义 AppDelegate。
#import "UnityAppController.h"
#import <Airbridge/Airbridge.h>
#import <UserNotifications/UserNotifications.h>
@interface SomeAppController : UnityAppController<UNUserNotificationCenterDelegate>
@end
@implementation SomeAppController
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler {
UIApplicationState state = UIApplication.sharedApplication.applicationState;
if (state == UIApplicationStateInactive) {
NSURL *url = // Deep links in push notification payloads
Airbridge.trackDeeplink(url)
}
}
- (void)userNotificationCenter:(UNUserNotificationCenter *)center didReceiveNotificationResponse:(UNNotificationResponse *)response withCompletionHandler:(void (^)(void))completionHandler {
UIApplicationState state = UIApplication.sharedApplication.applicationState;
if ((state == UIApplicationStateInactive || state == UIApplicationStateBackground)
&& [response.actionIdentifier isEqualToString:UNNotificationDefaultActionIdentifier]) {
NSURL *url = // Deep links in push notification payloads
Airbridge.trackDeeplink(url)
}
}
IMPL_APP_CONTROLLER_SUBCLASS(SomeAppController)
Android 会自动收集,无需额外设置。
无论深度链接由何种服务生成,只要通过深度链接启用 App,Airbridge SDK 即会收集深度链接事件。您可以将 SDK 设置 的 Track Airbridge Link Only
设置为 true
,仅收集由 Airbridge 深度链接触发的事件。
Airbridge SDK 会收集开启新会话的 Open 事件和 Foreground 事件,但在会话持续期间,这些事件不会被收集。
您可以通过将 SDK 设置 的 Track In Session Life Cycle Event Enabled
设置为 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 设置 的 Auto Start Tracking Enabled
设置为 false
。
4. 请初始化 Airbridge SDK,并在收集用户信息之前将用户同意信息共享给 Airbridge。
注意
必须为
eea
、adPersonalization
和adUserData
使用相同的名称。请根据收集的信息正确输入
0
或1
。
// Set device alias into Airbridge SDK
// 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" */);
// Explicitly start tracking
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 文档(Unity)。
2. 请将 SDK 设置 的 Facebook Deferred App Link Enabled
设置为 true
。
注意
如果 Airbridge SDK 在初始化后未立即启用,则可能无法收集安装(Install)、打开(Open)、深度链接(Deeplink)事件。
初始化 SDK 时,所有功能将默认启用。您可以通过将 SDK 设置 的 SDK Enabled
设置为 false
,在禁用所有功能的状态下初始化 Airbridge SDK。
或者,可以通过以下方法检查 Airbridge SDK 的启用状态,并启用或禁用所有功能。
Airbridge.IsSDKEnabled();
Airbridge.EnableSDK();
Airbridge.DisableSDK();
以下是收集 MIR 所需的设置。请在 SDK 初始化阶段,将 Facebook App ID 传递给 SDK 设置 的 Meta Install Referrer (Facebook App ID)
。
完成设置后,需要将 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 设置 的 Log Level
,可以查看从该日志级别到 Fault 级别的所有日志。
Was this page helpful?