AppsFlyer SDK 对接 - Unity

Official_unity_logo.png

目前Unity SDK版本:v4.17.0
与Android SDK v4.8.13 和 iOS SDK v4.8.7兼容

1. 概述

AppsFlyer 的 SDK 为 Android、iOS、 Windows Phone 以及众多其他移动开发平台提供移动应用安装和事件追踪功能。

您可以追踪安装、更新和互动以及应用安装之后的事件(包括应用内购买、游戏级别等),以评估 ROI 和用户互动水平。

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

 注意

AppsFlyer支持Unity版本5和以上的对接

 重要信息!

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

 提示

  • 第二和第三章内基本SDK整合是强制项,只包含安装激活归因
  • 强烈建议执行Tracking in-app events 章节
  • 其余的功能可以依照你应用内的商业逻辑,选择性执行。例如,追踪收益 或是 getting the conversion data 在首次开启应用,或许都对你应用的流程很重要。

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

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

使用 Single Broadcast Receiver 使用 Multiple Broadcast Receiver

若在 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代码实现。可以查看 In-App Events 文档获取更多细节。

 注意

应用内事件的名称长度不得超过 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. 追踪深度链接

关于深度链接,根据你的操作系统选择简介查看。

Android iOS
将以下内容添加到您的 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>

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"}
        });

 重要信息!

“不要”将revenue参数的值以任何形式格式化,不应该包含逗点、分隔符号、币值符号或是文字符号,举例来说,revenue参数要像这样:1234.56

7. 获取转化数据

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

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

  1. 添加一个空的 GameObject
  2. 将它附加到项目中包含的 AppsFlyerTrackerCallbacks.cs 中(必须将该 gameobject 命名为 AppsFlyerTrackerCallbacks)。
Android Unity 插件 > 4.15.1 Android Unity 插件 < 4.14.3 iOS
/*For getting the conversion data in Android, you need to add this listener. to the init() method*/
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 等分析平台的对接。

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

设置用户电子邮件

Unity 当前不提供此功能。

Google Advertising ID

从 SDK 4.8.0 版起,AppsFlyer 自动采集 google_advertising_id。采集 Google Advertising ID 的要求仅涵盖 SDK 4.7.X 及以下版本。

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 - Firebase Android - GCM iOS
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 调用 调用 Listener (仅 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,重新启动追踪。

 警告

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

自定义会话间的时间

预设两次app开启的间隔必须至少要5秒,才会纪录两次不同的会话。但你可以透过以下API去自定义纪录两次app会话所需要的间隔秒数(more about counting sessions):
setMinTimeBetweenSessions(int seconds)


使用示例:

AppsFlyer.setMinTimeBetweenSessions(10);

要注意如果自定义的间隔秒数太高的话,有可能会对其他依赖会话数据的API有不好的影响,例如深度链接。

Utility 应用的后台互动

Unity 当前不提供此功能。

Track Out-of-Store Apps

 注意

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> 前。

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

Opt-Out

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

AppsFlyer.stopTracking(true);

你也可以透过相同的API返回false来再次启动SDK。

有多种不同的场景会用到使用者opt-out。
我们强烈建议参考以下介绍 exact instructions,找到适合您的应用场景。

 警告

仅在您完全不想追踪该用户时,使用该 API。使用该 API 会严重影响您的报告和归因。

Setting Additional Custom Data

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

预装应用的归因

Android Only

您可以在Unity使用以下API,程序化地设定预装的媒体:

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

了解详细信息,原生app的执行, 请点击这里

 重要信息!

当使用AppsFlyer Unity SDK应避免

PlayerPrebs.DeleteAll()

10. 测试您的对接

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

现在你可以开始测试追踪媒体

11. 已知问题

ProGuard

如果您是使用Android的ProGuard,且遭遇和我们AFKeystoreWrapperclass相关的警示,可以在ProGuard rules file加入以下代码:

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

IL2CPP

To exclude our SDK from the Managed bytecode stripping with IL2CPP, add the following to the link.xml:

<linker>
    <assembly fullname="mscorlib">
        <type fullname="AppsFlyer.*" preserve="all"/>
    </assembly>
…
</linker>

12. Unity Sample Project

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

这篇文章有帮助吗?
6 人中有 2 人觉得有帮助

评论

0 条评论

登录写评论。

此组别内的文章