AppsFlyer SDK 对接 - Unity

  • 广告商
  • 开发商

Official_unity_logo.png

当前的 Unity SDK 版本:  v4.20.3
兼容  Android SDK v4.10.02 版以及  iOS SDK v4.10.4 版

1. 概述

AppsFlyer 的 Unity SDK 为 Android 和 iOS Unity 项目提供移动应用安装和事件跟踪功能。您可以追踪安装、更新和互动以及应用安装之后的事件(包括应用内购买、游戏级别等),以评估 ROI 和用户互动水平。

在 Unity 平台上开发的应用,只需进行一次 AppsFlyer SDK 对接,即可追踪 Android 和 iOS 生成的应用。下面的指南详细说明了如何针对 iOS 和 Android 应用将 AppsFlyer SDK 集成到您的 Unity 代码中。

 注意

AppsFlyer 支持与 Unity OS version 5 以及更高版本的对接

 重要信息!

Unity 插件从 4.16.0 版起开始支持 Google Play Install Referrer API。如果您想使用新 Referrer API,请将该插件升级到 4.16.0 或更高版本。

 提示

  • 章节2和3是强制性的,从而实现最基本 SDK 集成,即安装归因
  • 追踪应用内事件章节是强烈推荐进行实施的
  • 所描述的其余功能是可选的实现, 但其中一些功能可能是你所必需的, 具体取决于你的应用的业务逻辑。例如, 跟踪收入或在首次启动时获取转化数据可能对你的应用的流程至关重要

2. 快速入门

2.1 下载 AppsFlyer 的 Unity 插件

您可以在 Github 上找到该插件:https://github.com/AppsFlyerSDK/Unity

以下是使用 AppsFlyer Unity 插件的对接说明。

2.2 安装插件

以下是 AppsFlyer 插件的安装说明。

  1. 将 AppsFlyerUnityPlugin.unitypackage 导入到您的 Unity 项目中。
  2. 打开 Assets >> Import Package >> Custom Package
  3. 选择 AppsFlyerUnityPlugin.unitypackage 文件。

2.3 Android 和 iOS 的必要设置

Android 设置


给 AndroidManifest.xml 设置 AF receiver 和权限:

<!-- receiver should be inside the <application> tag -->
<receiver android:name="com.appsflyer.MultipleInstallBroadcastReceiver" android:exported="true">
    <intent-filter>
        <action android:name="com.android.vending.INSTALL_REFERRER" />
    </intent-filter>
</receiver>
<!-- Mandatory permission: -->
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.INTERNET" />

2.4 设置所需的权限

AndroidManifest.xml 包含以下权限:

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<!-- Optional : -->
<uses-permission android:name="android.permission.READ_PHONE_STATE" />


在 AndroidManifest.xml 中设置 BroadcastReceiver

实施安装引用广播接收器,有如下两种方案:

使用单个广播接收器使用多个广播接收器

若在 AndroidManifest.xml 中没有侦听 INSTALL_REFERRER 的接收器,则在应用程序标签内添加以下接收器:

<receiver android:name="com.appsflyer.SingleInstallBroadcastReceiver" android:exported="true">
  <intent-filter>
     <action android:name="com.android.vending.INSTALL_REFERRER" />
   </intent-filter>
</receiver>

iOS 设置


关联框架和库


在 Unity 中为 xCode 建立项目后,若您此前未添加 Security.Framework,则必须将该框架添加至 xCode 的关联框架和库 。


iOS Apple Search Ads

添加以下框架:

AdSupport.framework
只有当您包含此框架时,AppsFlyer 才会收集 IDFA。不添加此框架就无法追踪 Facebook、Twitter 以及大多数其他广告平台。
iAd.framework

强烈建议您将此框架添加到您的应用项目中,因为该框架是追踪 Apple Search Ads 的必备条件。

3. SDK 初始化

在您的开始/启动方法中,您设置 AppsFlyer dev key 及 iTunes 和 Google Play 使用的唯一应用 ID。 注:您需用纯数字在此设置 iOS 应用 ID,不含“id”前缀。

请添加以下代码:

unity 插件4.15.1 及以上 unity 插件4.14.3 及以下
void Start () {
/* Mandatory - set your AppsFlyer’s Developer key. */
AppsFlyer.setAppsFlyerKey ("YOUR_APPSFLYER_DEV_KEY");
/* For detailed logging */
/* AppsFlyer.setIsDebug (true); */
#if UNITY_IOS
  /* Mandatory - set your apple app ID
   NOTE: You should enter the number only and not the "ID" prefix */
  AppsFlyer.setAppID ("YOUR_APP_ID_HERE");
  AppsFlyer.trackAppLaunch ();
#elif UNITY_ANDROID
  /* Mandatory - set your Android package name */
  AppsFlyer.setAppID ("YOUR_ANDROID_PACKAGE_NAME_HERE");
  /* For getting the conversion data in Android, you need to add the "AppsFlyerTrackerCallbacks" listener.*/
  AppsFlyer.init ("YOUR_APPSFLYER_DEV_KEY","AppsFlyerTrackerCallbacks");
#endif
}

 重要信息!

  • 对于 Android,AppsFlyer.init 包含对 trackAppLaunch 的调用。因此,在 Android 版的 Unity 插件中不要调用 trackAppLaunch
  • 在 iOS 中,转化数据响应在 AppsFlyerTrackerCallbacks.cs 类中触发。

4. 追踪应用内事件

应用内事件能够为您提供应用内所发生情况的深入分析。建议您花一点时间定义希望监测的事件,以追踪投资回报率 (ROI) 和用户生命周期价值 (LTV)。

追踪应用内事件是通过调用 trackRichEvent,将事件名称和数值参数传递过去来进行的。请参阅应用内事件文档了解更多详情。

 注意

应用内事件的名称长度不得超过 45 个字符。超过 45 个字符的事件名称不会出现在控制面板中,只会出现在原始数据、Pull API 和 Push API 中。


追踪事件示例:

System.Collections.Generic.Dictionary<string, string> purchaseEvent = new  
System.Collections.Generic.Dictionary<string, string> ();
purchaseEvent.Add ("af_currency", "USD");
purchaseEvent.Add ("af_revenue", "0.99");
purchaseEvent.Add ("af_quantity", "1");
AppsFlyer.trackRichEvent ("af_purchase", purchaseEvent);

 注意

从 Unity SDK 4.15.1 版起,AppsFlyer 支持应用内事件或任何其他 SDK API 使用非英语字符。

5. 追踪深度链接

对于深度链接,请遵循操作系统对应的说明。

AndroidiOS
将以下内容添加到您的 manifest 文件中:

<activity android:name="com.appsflyer.GetDeepLinkingActivity" android:exported="true">
 <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>

若要接收深度链接数据, 必须在 AppsFlyer SDK 调用的 onAppOpenAttribution (在 AppsFlyerTrackerCallbacks class 中找到) 上实现回调。它返回用于触发应用程序打开的 Onelink/跟踪链接参数。然后, 您可以分析值并应用逻辑来触发相关的应用页面。

public void onAppOpenAttribution(string validateResult) {
	print ("AppsFlyerTrackerCallbacks:: got onAppOpenAttribution = " + validateResult);
}

6. 追踪收入

作为应用内事件的一部分,使用 AFInAppEvents.REVENUE 事件参数来计算收入。您可以输入任意正负数值。

 注意

AFInAppEvents.REVENUE(相当于使用 af_revenue)作为显示于原始数据和控制面板的实际收入,是 AppsFlyer 唯一可信赖的事件参数。了解更多详细信息,请点击此处

 示例

收入应用内事件
AppsFlyer.trackRichEvent(AFInAppEvents.LEVEL_ACHIEVED, new Dictionary<string, string>(){
	{AFInAppEvents.CONTENT_ID, "1234567"},
	{AFInAppEvents.CONTENT_TYPE, "category_a"},
	{AFInAppEvents.REVENUE, "1.99"},
	{AFInAppEvents.CURRENCY, "USD"}
});

 重要信息!

不要给收入值设置任何格式。它不应包含逗号分隔符、货币符号或文本。例如, 收入值应类似于1234.56。

追踪负收入

如果您需要跟踪负收入, 例如当用户取消购买或获得退款时, 您可以发送负收入。

AppsFlyer.trackRichEvent(AFInAppEvents.PURCHASE, new Dictionary<string, string>(){
	{AFInAppEvents.CONTENT_ID, "1234567"},
	{AFInAppEvents.CONTENT_TYPE, "category_a"},
	{AFInAppEvents.REVENUE, "-1.99"},
	{AFInAppEvents.CURRENCY, "USD"}
});

 注意

请注意上面代码中的以下内容:

  1. 收入值前面有一个减号
  2. 事件名称具有 "cancel_purchase" 的唯一值-允许您在主面板和原始数据报告中识别负收入事件

7. 获取转化数据

AppsFlyer 允许您直接在 SDK 级别上实时访问用户转化数据。它使您能够定制全新安装后第一次打开应用时用户看到的登录页面。

从服务器载入 AppsFlyer 的转化数据:

  1. 添加一个空的 GameObject
  2. 将它附加到项目中包含的 AppsFlyerTrackerCallbacks.cs 中(必须将该 gameobject 命名为 AppsFlyerTrackerCallbacks)。
Android Unity 插件 > 4.15.1Android Unity 插件 < 4.14.3 iOS
/*如需获取 Android 中的转化数据,那么您需要将该侦听器添加至 init() 方法*/
AppsFlyer.init ("YOUR_DEV_KEY","AppsFlyerTrackerCallbacks");


在 Android 中,您可将 AppsFlyerTrackerCallbacks.cs 中的方法移动至另一类,并在侦听器中调用该类。

您必须使用在 AppsFlyerTrackerCallbacks 出现的完全相同的方法命名空间。

8. 用户标示符

获取 AppsFlyer Device ID

应用内的每次新安装都会创建一个 AppsFlyer 独有的 Device ID。使用下列 API 获取 AppsFlyer 独有的 ID:

public String getAppsFlyerId();


使用示例:

string AppsFlyerUID = AppsFlyer.getAppsFlyerId();

设置客户用户 ID

设置应用使用的用户 ID。 

要设置用户 ID,请调用以下方法:

AppsFlyer.setCustomerUserID("someId");

 注意

customerUserID 应在 trackAppLaunch 之前设置。建议您尽快设置自己的客户用户 ID,因为此 ID 只有在设置后才会与事件报告关联。客户用户 ID 还可以用于完成与 MixpanelSwrve 等分析平台的对接。

 重要信息!

对于 iOS-在调用 trackAppLaunch 之前, 请确保在每次启动应用时都设置 Customer User ID

了解客户用户 ID 的更多信息,请点击此处

Google Advertising ID

从 SDK 版本 4.15.1 开始 AppsFlyer 自动收集google_advertising_id。收集 Google 广告 ID 的要求仅适用于 4.15.1 版本以下的 SDK。

IMEI 和 Android ID

如果操作系统版本高于 KitKat (4.4) 并且设备包含 Google Play Services(特定应用所需 GPS 的 Unity SDK 版本 4.16.4 及更低版本),SDK 在默认情况下不会收集 IMEI 和 Android ID。 

要将这些 ID 显式发送到 AppsFlyer,开发者可以使用以下 API:

AppsFlyer.setAndroidIdData(string)
AppsFlyer.setImeiData(string)

如果应用不包含 Google Play Services,则 SDK 将收集 IMEI 和 Android ID。然而,采用 Google Play Services 的应用应避免收集 IMEI,以免违反 Google Play 政策

开发者可以使用这些 API 停止收集 IMEI 和 Android ID:

AppsFlyer.setCollectAndroidID(bool) 
AppsFlyer.setCollectIMEI(bool)

 警告

为了进行正确归因,必须至少收集一个设备标示符,即 GAID、Android ID 或 IMEI。

IDFA 和 IDFV

如果 AdSupport.framework 包含在应用中,则 AppsFlyer 会自动收集 IDFA(广告主 ID)和 IDFV(厂商 ID)。

9. 可选功能

监测卸载

关于卸载,请遵循操作系统对应的说明。

Android - FirebaseAndroid - GCMiOS
1.  从下面的地址下载 Unity Firebase SDK:https://firebase.google.com/docs/unity/setup。 
2.  将 FirebaseMessaging.unitypackage 导入项目。
3.  将 google-services.json 导入到项目中(从 Firebase 控制台获取)

 注意

Manifest 接收器应由 Unity Firebase SDK 自动添加。


4.  在 Unity 类中处理 AppsFlyer 代码,添加以下内容:
使用 Firebase.Messaging;
使用 Firebase.Unity;

5.  添加到 Start() 方法:
Firebase.Messaging.FirebaseMessaging.TokenReceived += OnTokenReceived;

6.  添加以下方法:
public void OnTokenReceived
  (object sender, Firebase.Messaging.TokenReceivedEventArgs token) { 
    AppsFlyer.updateServerUninstallToken (token.Token);
}

 

 警告

实施 Unity Firebase SDK 的用户不得将以下方法调用添加到 enableUninsatallTracking(“SenderID”) 中,因为 Firebase SDK 将从之前已经添加的 google-services.json 文件中获取发送者的 ID。添加此方法可能导致 Android 发出调试警告。

追踪推送通知

推送通知是访客找回营销活动的一部分,AppsFlyer 使您能够对其进行监测。

handlePushNotification(Dictionary<string, string> payload)

数据负载应包含对象:af 及相关键值字符串:

示例:

{ 
  "data":{ 
   "score":"5x1",
   "time":"15:10",
   "af":{ 
     "c":"test_campaign",
     "is_retargeting":"true",
     "pid":"push_provider_int"
   }
  }
}

// with deep-linking
{
  "data":{
   "score":"5x1",
   "time":"15:10",
   "click_action":"com.example.someAction",
   "af":{
     "c":"test_campaign",
     "is_retargeting":"true",
     "pid":"push_provider_int"
   }
  }
}

 注意

了解关于推送通知监测的更多信息,请阅读此处

交叉促销追踪

AppsFlyer 允许您追踪并归因从您的某个应用(用户的现有应用)的交叉促销发起的安装。交叉促销应用可以成为新用户安装的主要驱动因素。

了解更多详情,请点击此处,参阅‘交叉促销追踪’。

用户邀请追踪

AppsFlyer 允许您追踪并归因从应用内的用户邀请发起的安装。允许您现有的用户邀请朋友或联系人成为您应用的新用户,这可以成为应用的一个关键增长因素。

更多详情,请点击此处,参阅‘用户邀请追踪’。

设置货币代码 

除了可以作为各个应用内事件的一部分发送到 AppsFlyer 的特定货币代码外,您还可以使用下面的 API 设置全球货币代码。全球货币代码在当 af_currency

AFInAppEvents.CURRENCY

并未作为应用内事件的一部分发送时使用。

默认值为 USD。您可以在这里找到 API 可用的 ISO 货币代码。

使用以下 API 设置货币代码:

public void setCurrencyCode(String currencyCode);

使用示例:

setCurrencyCode(string currencyCode)

应用内购买验证

关于应用内购买接收验证,遵守操作系统对应的说明。

拨打监听器 (仅限 android) ios
//To get the callbacks
//AppsFlyer.createValidateInAppListener("AppsFlyerTrackerCallbacks", 
"onInAppBillingSuccess", "onInAppBillingFailure"); AppsFlyer.validateReceipt(stringpublicKey, string purchaseData,
string signature, string price, string currency, Dictionary additionalParametes);

验证购买响应在 AppsFlyerTrackerCallbacks.cs 类中触发

匿名用户数据

AppsFlyer 为您提供在 AppsFlyer 分析中匿名特定用户标示符的方法。该方法符合最新的隐私要求并遵守 Facebook 数据和隐私政策。默认为 NO,表示默认未进行匿名。

在 SDK 初始化过程中,使用该 API 明确匿名用户安装、事件和互动:

public void setDeviceTrackingDisabled(boolean isDisabled);

使用示例:

AppsFlyer.setDeviceTrackingDisabled(true);
可以通过再次调用 deviceTrackingDisabled,并设置为 false,重新启动追踪。

 警告

剔除用户会严重影响您的归因信息。
只在法律要求您不得收集用户信息的地区使用此选项。

自定义会话间的时间

默认情况下,在两次应用启动之间必须至少间隔 5秒,才能将其计为两次独立的应用开启(更多有关应用启动计数的信息)。
但是,您可以使用以下 API自定义两次应用启动之间所需的最小时间:
setMinTimeBetweenSessions(int seconds)


使用示例:

AppsFlyer.setMinTimeBetweenSessions(10);


请注意,如果两次启动之间的自定义时间值设置偏高的话,可能会严重影响依赖启动数据的 API,如深层链接等。

Utility 应用的后台互动

Unity 当前不提供此功能。

跟踪应用商店外的应用

 注意

Google Play 为默认应用商店。如果您的应用只在 Google Play 上发布,请跳过这一部分。

要追踪 Google Play 商店外的安装,请在应用的 AndroidManifest.xml 中设置渠道/商店,各 APK 应具有唯一的渠道或商店名称。CHANNEL 的值区分大小写。

示例

<meta-data android:name="CHANNEL" android:value="Amazon" />
<meta-data android:name="CHANNEL" android:value="Standalone"/>
<meta-data android:name="CHANNEL" android:value="Verizon" />

 注意

设置应用时,您必须在 AppsFlyer 控制面板中配置 CHANNEL 值。

将元数据标签置于 </application> 前。

了解关于如何追踪店外应用安装的更多详细信息,请阅读此处

退出

在某些极端情况下,您可能出于法律和隐私合规方面的考虑,希望关闭所有 SDK 追踪。这可以通过 isStopTracking API 来实现。一旦调用此 API, 我们的 SDK 将不再与我们的服务器通信并停止运行。

AppsFlyer.stopTracking(true);

在任何情况下,可调用相同 API 以重新激活 SDK,但会传递 False。

有几种不同的方案为用户选择退出。我们强烈建议您遵循与你的应用相关的方案的确切说明

 警告

仅在您完全不想追踪该用户时,使用该 API。使用此 API 将严重影响您的归因、数据收集以及 深度链接 机制。

设置其他自定义数据

setAdditionalData API 需要在 SDK 级别与若干外部合作伙伴平台对接,包括 SegmentAdobe 和 Urban Airship。仅在平台对接文章明确说明需要 setAdditionalData API 时,才使用该 API。
以下为在 Unity 上实施 setAdditionalData 的代码示例:

Dictionary<string, string> CustomDataMap = new Dictionary<string, string>();
CustomDataMap.Add("custom_param_1", "value_of_param_1");
AppsFlyer.setAdditionalData(CustomDataMap);

预装应用的归因

仅限安卓系统

您可以使用以下 API 以编程方式从 Unity 以编程方式设置预安装的媒体源:

setPreinstallAttribution(string MediaSource, string Campaign, string Site_Id);

有关在本机部署的详细信息, 请单击此处

 重要信息!

使用 AppsFlyer Unity SDK 时, 请避免

PlayerPrefs.DeleteAll()

10. 测试您的对接

查看按照操作系统测试对接的说明,请单击  Android 测试 或 iOS 测试

现在, 您可以开始跟踪与您合作的媒体平台

11. 已知问题

ProGuard

如果您使用的是 ProGuard 并且看到 AFKeystoreWrapper 类相关的警告信息,请将以下代码添加到您的 ProGuard 规则文件中:

-keep class com.appsflyer.** { *; }

IL2CPP

要将我们的 SDK 排除在使用 IL2CPP 管理的字节码中排除掉, 请在 link. xml 中添加以下内容:

<linker>
  <assembly fullname="UnityEngine">
    <type fullname="UnityEngine.AndroidJavaRunnableProxy" preserve="all" />
  </assembly>
</linker>

IMPL_APP_CONTROLLER_SUBCLASS

如果您使用的其他插件需要重写 AppControllerClassName, 请修改 AppsFlyerAppController, 如下所示 (objective-c):

+(void)load
{
  [AppsFlyerAppController plugin];
}

// Singleton accessor.
+ (AppsFlyerAppController *)plugin
{
  static AppsFlyerAppController *sharedInstance = nil;
  static dispatch_once_t onceToken;
  
  dispatch_once(&onceToken, ^{
    
    sharedInstance = [[AppsFlyerAppController alloc] init];
  });
  
  return sharedInstance;
}

//IMPL_APP_CONTROLLER_SUBCLASS(AppsFlyerAppController)

11. Unity 示例项目

要查看 Unity 示例项目,请单击此处

这篇文章有帮助吗?
10 人中有 4 人觉得有帮助

评论

0 条评论

登录写评论。

此组别内的文章