Airbridge Unity SDK所需Unity版本为
2018.4
版本或以上。
Attention
Airbridge Unity SDK使用unity-jar-resolver(External Dependency Manager for Unity)来管理库的依赖性。
如果您使用的是1.9.3以下版本的Airbridge Unity SDK,请提前通过以下页面完成相应的Unity包设置。对于Airbridge Unity SDK 1.9.3及以后的版本,Airbridge Plugin和EDM4U资产都会自动导入,因此您不需要单独设置Unity包。
下载最新版本的 Airbridge Unity SDK。
通过点击 Unity 菜单栏中的 Assets
> Import Package
> Custom Package ...
来添加包。
包安装完成后可以在Unity菜单栏里看到 AB180
选项卡。
通过点击 Unity菜单栏中的 AB180
> Airbridge Settings
可以查看如下设置界面。
Attention
当完成输入后,请务必点击
Update iOS App Setting
或Update Android Manifest
来储存设置内容。
Attention
如需手动合并
Android Manifest
文件,请参照Project
>Plugins
>Airbridge
>Android
> AndroidManifest.xml
文件。
请在 Unity 菜单栏中的 AB180
> Airbridge Settings
界面的 App Name
和 App Token
输入框中输入 Dashboard 中设置的应用名称(Unique ID)和应用 SDK 令牌信息。
应用名称(Unique ID)和应用 SDK 令牌可以在 Airbridge Dashboard
> Settings
> Tokens
选项卡中查看。
一般情况下,Airbridge Unity SDK无需另外进行初始化操作,但在特殊情况下,可能需要针对每个平台进行迁移操作。
设置完成并安装应用程序后,可以在 Airbridge Dashboard
> Raw Data
> App Real-time Log
选项卡中查看该应用程序的事件数据。
Attention
Real-time Log数据最长可能有 5 分钟的延迟。
iOS 和 Android 平台的Deep Link Dashboard设置如下。
请在 Unity 菜单栏中的 AB180
> Airbridge Settings
界面的iOS URI Scheme
输入框中输入在Dashboard界面里设置的iOS URI Scheme
信息。
该信息可以在 Airbridge Dashboard
> Tracking Link
> Deep Link
选项卡里查看。
请在 Unity 菜单栏中的 AB180
> Airbridge Settings
界面的Android URI Scheme
输入框中输入在Dashboard界面里设置的Android URI Scheme
信息。
该信息可以在 Airbridge Dashboard
> Tracking Link
> Deep Link
选项卡里查看。
在 Airbridge Dashboard中创建监测链接时,您可以使用 deeplink.page
或 abr.ge
形式的监测链接,也可以为提高 Tracking Link 的品牌效果和点击率,使用自定义 URL,如 go.my_company.com/abcd
。
请按照 该指南 设置要使用的自定义域名。
在Unity菜单栏 AB180
> Airbridge Settings
界面的 Custom Domain
输入框中输入之前设置的自定义域名地址。
为接收用户点击的Deep Link数据,请按如下方式注册对象名收取Message。
private void Awake()
{
AirbridgeUnity.SetDeeplinkCallback("AirbridgeManager");
}
当按上述方法注册完回调后,该类便可以通过如下函数获取Deep Link URL。
using UnityEngine;
public class AirbridgeManager : MonoBehaviour
{
private void Awake() {
Airbridge.SetDeeplinkCallback("AirbridgeManager");
}
// Method will call by Airbridge when deeplink detected
private void OnTrackingLinkResponse(string url)
{
}
}
在内部,Airbridge Unity使用Unity提供的
UnitySendMessage
函数传递Deep Link信息。
完成Airbridge Unity SDK的DeepLink设置后,可以通过以下链接验证是否能正确跳转到相应的移动应用页面。
YOUR_APP_URI_SCHEME://
Deep Link设置确认无误时,您可以在 Airbridge Dashboard
→ Raw Data
→ App Real-time Log
选项卡中看到如下信息。
Airbridge 收集以下用户标识符信息,以衡量Web和App之间碎片化的用户贡献度。
User Email : 用户的电子邮件地址
User Phone : 用户的电话号码
User ID : 用户的专属ID(可识别用户并且在web端和app端一一对应的ID。)
User Alias : 可以代表用户的其他 ID (例如,忠诚计划专用ID, 集团子公司统一ID)
输入的用户电子邮件地址和电话号码会被自动散列处理 (SHA256) 后发送到服务器。
在Airbridge Unity SDK中,您可以通过以下方式设置用户标识符信息。
Dictionary<string, string> alias = new Dictionary<string, string>();
AirbridgeUser user = new AirbridgeUser();
user.SetId("personID");
user.SetEmail("persondoe@airbridge.io");
user.SetPhoneNumber("1(123)123-1234");
user.SetAlias("key", "value");
AirbridgeUnity.SetUser(user);
可设置的User Alias 最大数量为 10。
User Alias的key是String类型,长度最长为128个字符。
User Alias的key必须匹配正则表达式: ^[a-z_][a-z0-9_]*$。
User Alias的value是String类型,长度最长为1024个字符。
一旦设置了用户的标识符,相应的标识符信息将包含在所有事件数据中并被传递。
您可以为提高 MTA(多触点归因)分析的准确性、内部数据分析以及与第 3 方解决方案的集成等目的设置额外的用户属性数据。
Dictionary<string, object> attrs = new Dictionary<string, object>();
AirbridgeUser user = new AirbridgeUser();
user.SetAttributes("key", "value");
AirbridgeUnity.SetUser(user);
可设置的User Attribute 最大数量为 100。
User Attribute的key是String类型,长度最长为128个字符。
User Attribute的key必须匹配正则表达式: ^[a-z_][a-z0-9_]*$。
User Attribute的value数据类型可以为Integer、Float、Long、Boolean 类型或String 类型,如果是String,则长度最长为1024 个字符。
Airbridge Unity SDK 中设置的用户信息可以在Airbridge Dashboard
> Raw Data
> App Real-time Log
选项卡中查看,如下所示。
您可以在SDK中设置设备标识符信息来使之后收集到的所有事件数据都包含设备标识符信息。 设置设备标识符后,无论应用程序是否关闭,它都会持续存在,除非您将其删除。
AirbridgeUnity.SetDeviceAlias("ADD_YOUR_KEY", "AND_YOUR_VALUE");
AirbridgeUnity.RemoveDeviceAlias("DELETE_THIS_KEY");
AirbridgeUnity.ClearDeviceAlias();
方法 | 说明 |
---|---|
SetDeviceAlias(string key, string value) | 将键值对添加到设备标识符。 |
RemoveDeviceAlias(string key) | 删除与传递的key对应的设备标识符信息。 如果没有相应的标识符信息,则不执行任何操作。 |
ClearDeviceAlias() | 删除所有设备标识符信息。 |
Airbridge Unity SDK调用的所有事件都可以包含如下6个属性值进行传输。
Event Category : 事件名称 必填 (String)
Event Action : 事件属性值 1 (String)
Event Label : 事件属性值 2 (String)
Event Value : 事件属性值 3 (Double)
Event Custom Attributes : 事件自定义数据 (Map<String, Object>)
Event Semantic Attributes : 事件的语义数据 (Semantic Attributes Class)
为方便起见,Airbridge Unity SDK 提供以下 3 种用户事件。
Dictionary<string, string> alias = new Dictionary<string, string>();
AirbridgeUser user = new AirbridgeUser();
user.SetId(UserId);
user.SetEmail(Email);
user.SetPhoneNumber(Phone);
user.SetAlias(alias);
AirbridgeUnity.SetUser(user);
AirbridgeEvent @event = new AirbridgeEvent(Airbridge.Constants.CATEGORY.SIGN_UP);
AirbridgeUnity.TrackEvent(@event);
Dictionary<string, string> alias = new Dictionary<string, string>();
AirbridgeUser user = new AirbridgeUser();
user.SetId(UserId);
user.SetEmail(Email);
user.SetPhoneNumber(Phone);
user.SetAlias(alias);
AirbridgeUnity.SetUser(user);
AirbridgeEvent @event = new AirbridgeEvent(Airbridge.Constants.CATEGORY.SIGN_IN);
AirbridgeUnity.TrackEvent(@event);
AirbridgeEvent @event = new AirbridgeEvent(Airbridge.Constants.CATEGORY.SIGN_OUT);
AirbridgeUnity.TrackEvent(@event);
AirbridgeUnity.ExpireUser();
为方便起见,Airbridge Unity SDK 提供如下产品类和电子商务事件。
Airbridge.Ecommerce.Product cocacola = new Airbridge.Ecommerce.Product();
cocacola.SetId("beverage_1");
cocacola.SetName("Coca Cola");
cocacola.SetPrice(1.25);
cocacola.SetCurrency("USD");
cocacola.SetQuantity(1);
cocacola.SetPosition(0);
AirbridgeEvent @event = new AirbridgeEvent(Airbridge.Constants.CATEGORY.VIEW_HOME);
AirbridgeUnity.TrackEvent(@event);
List<Airbridge.Ecommerce.Product> beverages = new List<Airbridge.Ecommerce.Product>();
Airbridge.Ecommerce.Product cocacola = new Airbridge.Ecommerce.Product();
cocacola.SetId("beverage_1");
cocacola.SetName("Coca Cola");
cocacola.SetPrice(1.25);
cocacola.SetCurrency("USD");
cocacola.SetQuantity(1);
cocacola.SetPosition(0);
beverages.Add(cocacola);
Airbridge.Ecommerce.Product fanta = new Airbridge.Ecommerce.Product();
fanta.SetId("beverage_2");
fanta.SetName("Fanta");
fanta.SetPrice(10.99);
fanta.SetCurrency("USD");
fanta.SetQuantity(1);
fanta.SetPosition(1);
beverages.Add(fanta);
AirbridgeEvent @event = new AirbridgeEvent(Airbridge.Constants.CATEGORY.VIEW_SEARCH_RESULT);
@event.SetQuery("SELECT * FROM beverages");
@event.SetProducts(beverages.ToArray());
@event.SetValue(12.24);
AirbridgeUnity.TrackEvent(@event);
List<Airbridge.Ecommerce.Product> beverages = new List<Airbridge.Ecommerce.Product>();
Airbridge.Ecommerce.Product cocacola = new Airbridge.Ecommerce.Product();
cocacola.SetId("beverage_1");
cocacola.SetName("Coca Cola");
cocacola.SetPrice(1.25);
cocacola.SetCurrency("USD");
cocacola.SetQuantity(1);
cocacola.SetPosition(0);
beverages.Add(cocacola);
Airbridge.Ecommerce.Product fanta = new Airbridge.Ecommerce.Product();
fanta.SetId("beverage_3");
fanta.SetName("Fanta");
fanta.SetPrice(10.99);
fanta.SetCurrency("USD");
fanta.SetQuantity(1);
fanta.SetPosition(2);
beverages.Add(fanta);
AirbridgeEvent @event = new AirbridgeEvent(Airbridge.Constants.CATEGORY.VIEW_PRODUCT_LIST);
@event.SetProductListId("beverage_list_0");
@event.SetProducts(beverages.ToArray());
@event.SetValue(12.24);
AirbridgeUnity.TrackEvent(@event);
Airbridge.Ecommerce.Product cocacola = new Airbridge.Ecommerce.Product();
cocacola.SetId("beverage_1");
cocacola.SetName("Coca Cola");
cocacola.SetPrice(1.25);
cocacola.SetCurrency("USD");
cocacola.SetQuantity(1);
cocacola.SetPosition(0);
AirbridgeEvent @event = new AirbridgeEvent(Airbridge.Constants.CATEGORY.VIEW_PRODUCT_DETAILS);
@event.SetProducts(cocacola);
AirbridgeUnity.TrackEvent(@event);
Airbridge.Ecommerce.Product cocacola = new Airbridge.Ecommerce.Product();
cocacola.SetId("beverage_1");
cocacola.SetName("Coca Cola");
cocacola.SetPrice(1.25);
cocacola.SetCurrency("USD");
cocacola.SetQuantity(1);
cocacola.SetPosition(0);
AirbridgeEvent @event = new AirbridgeEvent(Airbridge.Constants.CATEGORY.ADD_TO_CART);
@event.SetProducts(cocacola);
@event.SetValue(1.25);
AirbridgeUnity.TrackEvent(@event);
List<Airbridge.Ecommerce.Product> beverages = new List<Airbridge.Ecommerce.Product>();
Airbridge.Ecommerce.Product cocacola = new Airbridge.Ecommerce.Product();
cocacola.SetId("beverage_1");
cocacola.SetName("Coca Cola");
cocacola.SetPrice(1.25);
cocacola.SetCurrency("USD");
cocacola.SetQuantity(1);
cocacola.SetPosition(0);
beverages.Add(cocacola);
Airbridge.Ecommerce.Product fanta = new Airbridge.Ecommerce.Product();
fanta.SetId("beverage_3");
fanta.SetName("Fanta");
fanta.SetPrice(10.99f);
fanta.SetCurrency("USD");
fanta.SetQuantity(1);
fanta.SetPosition(2);
beverages.Add(fanta);
AirbridgeEvent @event = new AirbridgeEvent(Airbridge.Constants.CATEGORY.ORDER_COMPLETE);
@event.SetTransactionId("transaction_123");
@event.SetProducts(beverages.ToArray());
@event.SetInAppPurchased(true);
@event.SetValue(1.25);
AirbridgeUnity.TrackEvent(@event);
在Airbridge Unity SDK中,您可以通过以下方法发送自定义事件。
AirbridgeEvent @event = new AirbridgeEvent("category");
@event.SetAction("action");
@event.SetLabel("label");
@event.SetValue(9999);
@event.AddCustomAttribute("custom_key", "value");
@event.AddSemanticAttribute("query", "query_123");
AirbridgeUnity.TrackEvent(@event);
如需直接配置和传输Semantic Attributes,请参阅此文档。
从 Airbridge Unity SDK 传输的事件数据可以在 Airbridge Dashboard
> Raw Data
> App Real-time Log
选项卡中查看,如下所示。
如果出于内部数据分析等目的,需要传输未经散列处理(SHA256)的用户标识符信息,您可以设置 Unity 菜单栏 AB180
> Airbridge Settings
中的User Info Hash Enabled
选项来停止对User Email 和 User Phone信息的散列处理 (SHA256)。
Attention
由于此选项将敏感的个人信息(例如用户的电子邮件和电话号码)提供给第三方,因此必须采取额外的内部安全措施。
在Airbridge Unity SDK中,通过Unity菜单栏 AB180
> Airbridge Settings
的Session Timeout Seconds
选项来设置session过期时间,以达到即使用户在设置的session过期时间内重新启动app,也可以判断为同一个session,而不再发送app launch event。
此功能在必须先征得客户对个人信息保护(如 GDPR 或 CCPA)的同意后才能收集和传输数据时非常有用。
可以使用 Unity 菜单栏 AB180
> Airbridge Settings
中的Auto Start Tracking Enabled
选项来选择是否自动开始数据收集和传输。
AirbridgeUnity.StartTracking();
如果由于应用程序内存在多个Deep Link而难以通过 Airbridge 一目了然地查看Re-engagement成果时,可以通过设置Unity菜单栏 AB180
> Airbridge Settings
中的Track Airbridge Link Only
选项来过滤仅由Airbridge Deep Link实现的Re-engagement成果。
激活此功能后,仅当通过满足以下条件的DeepLink打开应用程序时,才会测量DeepLink成果。
通过Dashboard中注册的Deep Link打开应用程序时
通过 airbridge.io
Deep Link打开应用程序时
通过 deeplink.page
Deep Link打开应用程序时
当 airbridge_referrer
query信息存在时
在Airbridge Unity SDK中,可以通过设置Unity菜单栏 AB180
> Airbridge Settings中的Location Collection Enabled
选项来收集用户位置信息。
Attention
位置信息必须通过合法目的和方式收集,因此使用该功能时需谨慎。
此功能仅在Android 上可用,且AndroidManifest.xml
中必须包含以下权限设置。
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
可以通过设置Unity菜单栏 AB180
> Airbridge Settings
中的 Facebook Deferred App Link Enabled
选项,在 Airbridge Unity SDK 中一并接收 Facebook 的 Deferred App Link数据。
Attention
如需使用此功能,必须提前进行 Facebook SDK 设置。
参考此文档 - https://developers.facebook.com/docs/unity/
根据 iOS 14 的政策变化,只有通过 iOS 中的 App Tracking Transparency 征得用户同意,才能正确收集 IDFA 信息。
在 Airbridge Unity SDK 中,可以通过设置Unity菜单栏 AB180
> Airbridge Settings
中的 iOS Tracking Authorize Timeout Seconds
选项来延迟安装事件,从而将 IDFA
正确包含在安装事件数据中。
App 卸载跟踪设置从 Airbridge Unity SDK
v1.9.0
或更高版本中可用。
请参考Firebase Cloud Messaging官方文档完成应用的基本设置。
2. Firebase Push Token 发送
请参考以下指南来传递通过 Firebase Cloud Messaging 设置生成的 Push Token。
public void Start() {
Firebase.Messaging.FirebaseMessaging.TokenReceived += OnTokenReceived;
Firebase.Messaging.FirebaseMessaging.MessageReceived += OnMessageReceived;
}
public void OnTokenReceived(object sender, Firebase.Messaging.TokenReceivedEventArgs token) {
#if UNITY_ANDROID
AirbridgeUnity.RegisterPushToken(token.Token);
#endif
}
// Make sure the notification is not shown on the device if the remote message value is airbridge-uninstall-tracking.
public void OnMessageReceived(object sender, Firebase.Messaging.MessageReceivedEventArgs e) {
if (e.Message.Data.ContainsKey("airbridge-uninstall-tracking")) return;
...
}
请参考Unity Mobile Notifications包的官方文档完成该包的安装。
请参考以下指南传递 APNs Device Token。
void Start()
{
#if UNITY_IOS
StartCoroutine(RequestAuthorization());
#endif
}
#if UNITY_IOS
IEnumerator RequestAuthorization()
{
var authorizationOption = AuthorizationOption.Alert | AuthorizationOption.Badge;
using (var req = new AuthorizationRequest(authorizationOption, true))
{
while (!req.IsFinished)
{
yield return null;
};
if (req.Granted && req.DeviceToken != "")
{
AirbridgeUnity.RegisterPushToken(req.DeviceToken);
}
}
}
#endif
Airbridge Unity Android 通过 Content Provider 进行自动初始化。因此,为了正确进行初始化操作,必须在 Project
> Plugins
> Android
> AndroidManifest.xml
文件中正确指定以下 Xml Tag
。
<provider
android:authorities="${applicationId}.co.ab180.airbridge.unity.AirbridgeContentProvider"
android:name="co.ab180.airbridge.unity.AirbridgeContentProvider"
android:exported="false" />
Airbridge Unity 使用Custom Activity来调用DeepLink。 如果用户已经在使用Custom Activity,请将以下代码添加到Custom Activity中。
@Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
setIntent(intent);
}
@Override
protected void onResume() {
super.onResume();
AirbridgeUnity.processDeeplinkData(getIntent());
}
Airbridge Unity提供的Android Manifest Merger组件首先读取已存在的Project
> Plugins
> Android
> AndroidManifest.xml
文件内容,而后简单地合并Airbridge Unity提供的Project
> Plugins
> Airbridge
> Android
> AndroidManifest.xml
文件内容,因此很难满足所有用户的应用场景。在特殊的应用场景下,用户必须手动合并相应的 AndroidManifest.xml
文件内容。
Android 11 版本添加了 Package Visibility
政策。根据此政策,所有应用程序都必须通过manifest
中的 <queries>
通知用户与其他应用程序交互的包。
Airbridge为遵守该政策,在Android SDK 模块中包含了相关变更的内容。并且为了支持<queries>
标签,您必须使用5.6.4
版本以上的Gradle
及3.6.0
版本以上的Android Gradle Plugin
。
您可以通过此页面查看不同Unity版本所包含的Gradle版本。
如果您使用的Unity的Gradle
版本低于5.6.4
,或者Android Gradle Plugin
版本低于3.6.0
,您可以通过以下Unity设置来指定使用特定版本。
以下版本已包含Gradle
5.6.4及更高版本以及Android Gradle Plugin
3.6.0及更高版本,因此不需要进行额外操作 。
该自定义选项仅适用于Unity
2019.3 patch 7
及更高版本。
1. 请访问 Gradle Build Tool 页面下载5.6.4及更高版本的 Gradle
。
2. 请在 Preferences
> External Tools
中,取消选中 Gradle Installed with Unity (recommended)
选项,然后将下载的 Gradle
文件路径设置为如下所示。
3. 请在 Project Settings
> Player
> Android tab
> Publishing Settings
> Build
中,选择如下选项。
a. Custom Main Gradle Template
b. Custom Launcher Gradle Template
4. 请对以下两个自动生成的文件都进行如下更改。
Assets/Plugins/Android/mainTemplate.gradle
Assets/Plugins/Android/launcherTemplate.gradle
buildscript {
repositories {
google()
jcenter()
}
dependencies {
// Must be Android Gradle Plugin 3.6.0 or later. For a list of
// compatible Gradle versions refer to:
// https://developer.android.com/studio/releases/gradle-plugin
classpath 'com.android.tools.build:gradle:3.6.0'
}
}
allprojects {
repositories {
google()
jcenter()
flatDir {
dirs 'libs'
}
}
}
1. 请访问 Gradle Build Tool 页面下载5.6.4及更高版本的 Gradle
。
2.
请在 Preferences
> External Tools
中,取消选中Gradle Installed with Unity(recommended)
选项,然后将下载的 Gradle
文件路径设置为如下所示。
3. 请在 Project Settings
> Player
> Android tab
> Publishing Settings
> Build
中,选中 Custom Gradle Template
选项,如下图所示。
4. 请对生成的 Assets/Plugins/Android/mainTemplate.gradle
文件进行如下更改。
buildscript {
dependencies {
// Must be Android Gradle Plugin 3.6.0 or later. For a list of
// compatible Gradle versions refer to:
// https://developer.android.com/studio/releases/gradle-plugin
classpath 'com.android.tools.build:gradle:3.6.0'
}
}
Unity 2018.4
版本
该自定义选项仅适用于Unity
2018.4 patch 24
及更高版本。
1. 请访问 Gradle Build Tool 页面下载5.6.4及更高版本的 Gradle
。
2.
请转到 Build Settings
> Android
,然后在 Build System
的选项中选择 Gradle
,如下图所示。
3. 请在 Preferences
> External Tools
中,取消选中 Gradle Installed with Unity(recommended)
选项,然后将下载的 Gradle
文件路径设置为如下所示。
4. 请在 Project Settings
> Player
> Android tab
> Publishing Settings
> Build
中,选中 Custom Gradle Template
选项,如下图所示。
5. 请对生成的 Assets/Plugins/Android/mainTemplate.gradle
文件进行如下更改
buildscript {
dependencies {
// Must be Android Gradle Plugin 3.6.0 or later. For a list of
// compatible Gradle versions refer to:
// https://developer.android.com/studio/releases/gradle-plugin
classpath 'com.android.tools.build:gradle:3.6.0'
}
}
Unity 2018.3
及以下版本不支持Gradle
自定义选项。
Airbridge Unity iOS使用Unity提供的IMPL_APP_CONTROLLER_SUBCLASS
创建自定义AppController
。 如果您已经使用IMPL_APP_CONTROLLER_SUBCLASS
实现了自定义AppController
,请在相应的自定义AppController
中添加以下代码。
- (BOOL) application:(UIApplication*)application
continueUserActivity:(NSUserActivity*)userActivity
restorationHandler:(void (^)(NSArray<id<UIUserActivityRestoring>>* _Nullable))restorationHandler
{
[AUAppDelegate.instance application:application
continueUserActivity:userActivity
restorationHandler:restorationHandler];
return YES;
}
完成此操作后,请删除原有的Airbridge Unity SDK Assets
> Plugins
> Airbridge
> iOS
> Delegate
> AUAppController.mm
文件
Was this page helpful?