配置 AppsFlyer 上报
本文旨在介绍如何设置 AppsFlyer 分析平台,让您的游戏可以直接将分析数据上报至 AppsFlyer。
前提条件
AppsFlyer 支持 多商店渠道包,同一开发者账号下可创建多个 app ID。在 AppsFlyer 上创建额外的游戏应用,并通过重复以下步骤完成额外游戏应用的配置。
1. 注册账号
AppsFlyer 是收费平台,业务需自行去申请账号并配置好基础信息。

2. 创建应用
要添加新应用,请参见 在 AppsFlyer 后台添加应用。

3. 获取应用配置信息
-
进入 AppsFlyer。
-
查看 iOS App ID.
iOS App ID 为 id 之后的数字。 -
在左侧导航栏,选择 Configuration > App Settings。
-
查看 iOS 和 Android 的 SDK Dev Key。
SDK Dev Key 即 App Key。
步骤1:权限和工程配置
Android
用户权限
必选 权限列表,Player Network SDK 已经配置好,业务可以在导出的 APK 包里检查。
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
可选权限 敏感权限,主要用来获取和跟踪 Android 硬件设备信息,不建议使用。 如果业务需要使用,可以自行添加到 AndroidManifest.xml 文件中。
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
默认不为 AppsFlyer 申请 WiFi 状态权限,该权限为可选权限,为避免合并 AndroidManifest.xml 后 Adjust 借此采集 Mac 地址,故默认不申请该权限。
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
默认不为 AppsFlyer 申请 WAKE_LOCK 权限。
<uses-permission android:name="android.permission.WAKE_LOCK" />
默认会开启 AD_ID 采集,如果业务需要撤销权限,可以自行添加到 AndroidManifest.xml 文件中。
<uses-permission android:name="com.google.android.gms.permission.AD_ID" tools:node="remove" />
工程配置
详细信息,请参见 适用于开发人员的 Android SDK 集成。
在 INTLConfig.ini 文件中添加以下配置:
[AppsFlyer 调试模式]
DEBUG_CHANNEL = AppsFlyer
[Android LifeCycle]
LIFECYCLE = AppsFlyer
[AppsFlyer 配置]
APPSFLYER_APP_KEY_ANDROID={YOUR_APPSFLYER_KEY}
- 替换
{YOUR_APPSFLYER_KEY}为业务 App Key,可以在 AppsFlyer 管理端找到。 - 在
LIFECYCLE中添加 AppsFlyer。有关更多信息,请参见 SDK 环境。 - 替换
{DEBUG_CHANNEL}为 AppsFlyer,表示开启 AppsFlyer 调试。
[可选] 追踪卸载信息
该功能依赖于 Google 推送服务:
- 在 Firebase 控制台添加 FCM Sender ID。
在 INTLConfig.ini 文件中添加以下配置。
[AppsFlyer Configuration]
FIREBASE_SENDER_ID={YOUR_FIREBASE_SENDER_ID}
替换 {YOUR_FIREBASE_SENDER_ID} 为业务的 Firebase Sender ID。

- 获取推送 Token 并调用 AppsFlyer 接口。
详细信息,请参见 卸载测量。
[可选] 获取 IMEI 配置
由于获取 IMEI 需要 READ_PHONE_STATE 权限,因此默认情况下 AppsFlyer 不获取 IMEI。但是如果业务需要上报,可以在工程文件 INTLConfig.ini 中添加配置。
[AppsFlyer 配置]
APPSFLYER_APP_IMEI_ENABLE=1
[可选] 获取 ANDROID_ID
由于 ANDROID_ID 对于上报较为重要,且不需要 READ_PHONE_STATE 权限,因此默认情况下 AppsFlyer 会获取 ANDROID_ID。但是如果业务不需要上报,可以在工程文件 INTLConfig.ini 中添加配置。
[AppsFlyer 配置]
APPSFLYER_APP_ANDROID_ID_ENABLE=0
iOS
工程配置
在 INTLConfig.ini 文件中添加以下配置:
[AppsFlyer 调试模式]
DEBUG_CHANNEL = AppsFlyer
[AppsFlyer 渠道配置]
APPSFLYER_APP_ID_IOS = {YOUR_APPSFLYER_APPID}
APPSFLYER_APP_KEY_IOS = {YOUR_APPSFLYER_KEY}
- 替换
{DEBUG_CHANNEL}为 AppsFlyer,表示开启 AppsFlyer 调试。 - 替换
{YOUR_APPSFLYER_APPID}为业务 App ID,可以在 AppsFlyer 管理端找到。 - 替换
{YOUR_APPSFLYER_KEY}为业务 App Key,可以在 AppsFlyer 管理端找到。
[可选] Unity 引擎导出 Xcode
Unity 导出 Xcode 工程时,需要配置 .projmods 文件。
Player Network SDK 已经将这些配置写在 INTLCoreKit.projmods 文件中,业务只需检查即可。
{
"group": "INTL",
"libs": [],
"frameworks": ["AdSupport.framework", "iAd.framework"],
"files": [],
"folders": [],
"excludes": [],
"headerpaths":[],
"build_settings":{},
"system_capabilities": {},
"Info.plist":{}
}
[可选] Strict-mode(严格模式)SDK
此开关控制是否开启 AppsFlyer SDK 的启用 AdSupport 和 iAD 框架功能(关闭即为数据最小化采集),此开关默认值为开。详细信息,请参见 Strict-mode(严格模式)SDK。
在 INTLConfig.ini 文件中添加以下配置。
[AppsFlyer 配置]
APPSFLYER_ADSUPPORT_AND_IAD_ENABLE = 0
[可选] 匿名化数据
此开关控制是否开启 AppsFlyer SDK 的匿名化数据功能,此开关默认值为关。详细信息,请参见 用户数据的匿名化处理。
在 INTLConfig.ini 文件中添加以下配置。
[AppsFlyer 配置]
APPSFLYER_ANONYMIZE_USER_ENABLE = 1
[可选] Deep Linking
为支持 deep link 上报,需要先让 App 支持 Universal Links。更多信息,请参见 OneLink链接与用户体验。
步骤2:配置事件上报
自动报告事件
如果在 INTLConfig.ini 文件中启用了 ANALYTICS_AUTH_REPORT_ENABLE,Player Network SDK 将自动报告以下事件:
af_complete_registration:当用户第一次登录游戏的时候af_login:当用户后续登录游戏的时候
手动报告事件
数据上报请参见 事件上报模块。
AppsFlyer 建议仅将小写字母数字字符(a-z)和(0-9)用于应用内事件名称(EventName),详见 富应用内事件。
漏斗事件
从 Player Network SDK V1.20 开始支持。
在 INTLConfig.ini 的 ANALYTICS_REPORT_FUNNEL_CHANNEL 配置中增加 AppsFlyer 渠道,Player Network SDK 会将漏斗事件同步上报至 AppsFlyer 渠道。
[ANALYTICS]
ANALYTICS_REPORT_FUNNEL_CHANNEL = AppsFlyer
可以参考 管理端查看上报事件 查看上报事件。
步骤3:初始化分析模块
- Unity
- Unreal Engine
初始化分析模块,再调用 ReportEvent 开始 AppsFlyer 上报数据。
初始化分析模块,再调用 ReportEvent 开始 AppsFlyer 上报数据。
数据上报验收
文档参考
数据维度
AppsFlyer 事件:
- 安装事件:添加白名单验证。
- 自然安装:AppsFlyer 排除掉对接渠道之外的安装事件。
- 非自然安装:AppsFlyer 可以监测到下载的渠道来源的安装事件。
- 自定义事件:控制台通过 EventName 来区分事件。
管理端查看上报事件
事件非实时上报,延迟为10分钟左右。
1. 注册测试设备
注册测试设备以防止 AppsFlyer 将测试设备上的安装事件/应用事件记录为重复安装。
AppsFlyer 提供以下两种方法:
-
下载 My Device ID by AppsFlyer 应用并在应用中注册测试设备。

-
在 AppsFlyer 中手动注册测试设备。
注册成功后,在控制台查看已成功添加的测试设备。

更多信息,请参见 注册测试设备。
2. 测试事件
- 在注册过的测试设备上安装应用进行测试并允许追踪。

- 成功安装后返回 AppsFlyer 控制台,提示成功追踪安装事件。

- 点击 In-app Events 并在测试设备点击 ReportEvent。

- 返回 AppsFlyer 控制台,显示追踪的应用事件。

3. 导出数据

- 出口数据
- 选择事件类型:激活/应用内事件
- 选择时间段
- 导出事件数据
4. 查看 InAppEvents 事件
在 AppsFlyer 左侧菜单选择 控制面板 > 事件报告 查看应用内事件。

- 非自然事件
- 自然事件
5. 查看 InstallEvent 事件
在 AppsFlyer 左侧菜单上 选择 控制面板 > 数据概览 > 媒体渠道 查看应用安装数量。可根据渠道查看自然或非自然安装量。

- 选择渠道
- 查看应用安装量
6. 验证测试数据
-
总体预览数据

-
打点上报事件数据

-
导出数据

验收用例 1
- 子功能模块:Reporting
- 特性点:Event Reporting
- 测试点:登录游戏,第一次登录及非第一次登,检查 AppsFlyer 登录上报
- 前提条件:初始化分析模块
- 操作步骤/输入
- 首次进行游客登录
- 退出登录
- 使用同一账号再次登录
- 管理端,导出数据查看上报事件
- 预期输出信息上报成功,检查如下:
- 管理端查看:
- 首次进行游客登录上报注册事件(af_complete_registration):上报数量 +1
- 使用同一账号再次登录上报登录事件(af_login):上报数量 +1
- 导出数据验证:
- 首次进行游客登录上报注册事件(af_complete_registration):上报数量 +1
- 使用同一账号再次登录上报登录事件(af_login):上报数量 +1
- 事件参数中里携带 Player Network SDK OpenID
- 管理端查看:
验收用例 2
- 子功能模块:Reporting
- 特性点:Event Reporting
- 测试点: Facebook 登录,非第一次登录,检查 AppsFlyer 登录上报
- 前提条件:初始化分析模块
- 操作步骤/输入
- 首次进行 Facebook 登录
- 退出登录
- 使用同一账号再次登录
- 管理端,导出数据查看上报事件
- 预期输出信息上报成功,检查如下:
- 管理端查看:
- 首次进行游客登录上报注册事件(af_complete_registration):上报数量 +1
- 使用同一账号再次登录上报登录事件(af_login):上报数量 +1
- 导出数据验证:联系 [killuachen] ,拉群导出日志来最终确认。
- 首次进行游客登录上报注册事件(af_complete_registration):上报数量 +1
- 使用同一账号再次登录上报登录事件(af_login):上报数量 +1
- Customer User ID 与 Player Network SDK OpenID 一致
- 管理端查看:
验收用例 3
- 子功能模块:Reporting
- 特性点:Event Reporting
- 测试点: 旧设备,AppsFlyer 事件信息上报成功
- 前提条件:在 AppsFlyer 管理端中添加已安装游戏的旧设备,第二次上报
- 操作步骤/输入
- 请求 Report Event
- eventName =
Report_Event, paramsDic-key1=k1, paramsDic-value1=v1, paramsDic-key2=k2, paramsDic-value2=v2, spChannels =AppsFlyer - 卸载安装 SDK 并启动游戏
- 筛选条件
appsflyer_sdk_test_int - 管理端查看上报数据并导出 INSTALL 数据表
- 预期输出信息上报成功,检查如下:
- 管理端查看:
- 自定义事件:AppsFlyer 可以查到上报自定义
Report_Event事件数量 +1, unique users 不会增加。(管理端只支持看当前1条上报详细数据)。 - Install event: 安装事件:查看
reported install events+1
- 自定义事件:AppsFlyer 可以查到上报自定义
- 导出数据验证:
- 自定义事件
- app-event 数据表:Install Time,Event Time,Event Name,Event Value 对应上报数据正确
- app-event 数据表:
- 安装事件:
- INSTALL 数据表 :Install Time,Event Time,Event Name 对应数据展示正确
- 卸载安装 INSTALL 数据表上报数量 +1
- 自定义事件
- 管理端查看:
验收用例 4
- 子功能模块:Reporting
- 特性点:Event Reporting
- 测试点:新设备,AppsFlyer 事件信息上报成功
- 前提条件:在 AppsFlyer 管理端中添加已安装游戏的新设备,第一次上报
- 操作步骤/输入
- 请求
报告事件 - eventName =
Report_Event, paramsDic-key1=k1, paramsDic-value1=v1, paramsDic-key2=k2, paramsDic-value2=v2, spChannels =AppsFlyer - 卸载安装 SDK 并启动游戏
- 筛选条件
appsflyer_sdk_test_int - 管理端查看上报数据并导出 INSTALL 数据表
- 请求
- 预期输出信息上报成功,检查如下:
- 管理端查看,AppsFlyer 可以:
- 查询报告事件,+1 到自定义
Report_Events并 +1 到唯一用户(多个报告只需要 +1)。 - 安装事件:查看安装事件上报数量 +1
- 查询报告事件,+1 到自定义
- 导出数据验证:
- 自定义事件
- app-event 数据表:Install Time,Event Time,Event Name,Event Value 对应上报数据正确
- app-event 数据表:
- 安装事件:
- INSTALL 数据表:Install Time,Event Time,Event Name 对应数据展示正确
- 卸载安装 INSTALL 数据表上报数量 +1
- 自定义事件
- 管理端查看,AppsFlyer 可以:
验收用例 5
- 子功能模块:ReportRevenue
- 特性点:AppsFlyer 支付事件上报
- 测试点:请求
ReportRevenue后查询上报(AppsFlyer) - 前提条件:网络连接正常
- 操作步骤/输入
- 请求
ReportRevenue - eventName = (可自定义), spChannels =
AppsFlyer, Currency =USD, Revenue = 100 - AppsFlyer 查询上报告事件
- DD平台 查询
AnalyticsReportRevenue事件
- 请求
- 预期输出信息上报成功,检查如下:
- 管理端查看:
- AppsFlyer 左侧 Events 查看
- 联网后 AppsFlyer 相关事件统计 +1,点击事件详情展示可展示 USD100 相关 value
- 导出数据验证(2-4 小时):
- AppsFlyer 左侧导出数据,选择应用内事件
- 导出数据有 2~4 小时延迟
- 导出数据包含收入事件、金额数据。
- DD平台 成功查询
methodName为AnalyticsReportRevenue与method_id=715事件上报。
- 管理端查看:
验收用例 6
- 子功能模块:ReportRevenue
- 特性点:AppsFlyer 支付事件上报
- 测试点:断网状态下请求
ReportRevenue后查询上报(AppsFlyer) - 前提条件:断开网络状态
- 操作步骤/输入
- 请求
ReportRevenue - eventName = (可自定义), spChannels =
AppsFlyer, Currency =USD, Revenue = 1000 - 重新连接网络
- AppsFlyer 查询上报告事件
- DD平台 查询
AnalyticsReportRevenue事件
- 请求
- 预期输出信息上报成功,检查如下:
- 重新连接网络后
- 管理端查看:
- AppsFlyer 左侧 Events 查看
- 联网后 AppsFlyer 相关事件统计 +1,点击事件详情展示可展示 USD1000 相关 value
- 导出数据验证(2-4 小时):
- AppsFlyer 左侧导出数据,选择应用内事件
- 导出数据有 2~4 小时延迟
- 导出数据包含收入事件,金额数据。
- DD平台 成功查询
methodName为AnalyticsReportRevenue与method_id=715事件上报。
功能
卸载安装
Android 集成使用:
AppsFlyer 卸载安装功能是依赖于 FireBase 推送的,业务需要跟进自己的推送组件来获取推送 token。
为实现 AppsFlyer 卸载安装功能,游戏需要调用 AppsFlyer 扩展接口的 SetPushToken 接口:
YOUR_PUSH_TOKEN 为推送组件获取到的 FireBase 推送 token。
请求系统追踪授权的监听时间(WaitForATTUserAuthorizationWithTimeoutInterval)
- Unity
- Unreal Engine
string extraJson = "{\"timeoutInterval\": \"60\"}";
INTLAPI.ExtendInvoke("AppsFlyer", "waitForATTUserAuthorizationWithTimeoutInterval", extraJson);
FString extraJson = "{\"timeoutInterval\": \"60\"}";
UINTLSDKAPI::ExtendInvoke(EINTLLoginChannel::kChannelAppsFlyer, "waitForATTUserAuthorizationWithTimeoutInterval", extraJson);
监听时间参数 timeoutInterval(以秒为单位)在 extraJson 传递。
如果 INTLConfig.ini 中配置了 APPSFLYER_WAITFORATT_TIMEOUT 参数(单位: 秒, 必须是非 int 数值),此 API 将在应用程序启动时触发。否则不会触发。
如需获取 IDFA 报告的数据中的 IDFA,此 API 必须与 RequestTrackingAuthorization 和授权必须在监听时间内完成。
常见问题
更多信息,请参见 常见问题。