配置 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 和授权必须在监听时间内完成。
常见问题
事件上报限制
同一设备同一应用一个事件如果上报时间间隔在10秒内,只会显示一次。
不同设备同一事件,则没有该限制,会全部实时记录。
AppsFlyer 基于统计数据设定的该限制,其认为正常用户不可能在10秒之内对同一事件执行多次。
自然/非自然安装方式
在 AppsFlyer 控制面板中有同时记录 organic 数据和 non-organic 数据。
- 自然安装(Organic)是指通过自然的方式进行安装,没有通过 AppsFlyer 推广的广告链接,如直接安装。
自然安装(Organic)对应的应用内事件是不会出现在我们控制面板中直接下载的应用内事件的报告中的,因为通过 in app event下载的为非自然安装对应的相关应用内事件的信息。 - 非自然安装(Non-organic)是指通过 AppsFlyer 推广的广告链接进行安装。
AppsFlyer 官方文档
接入文档
- Android 接入,请参见 AppsFlyer 对接官网(Android).
- iOS 接入,请参见 AppsFlyer 接入官网(iOS)。
发布到应用市场前测试文档
- 发布到 Google Play Store 前,Android 测试请参见 AppsFlyer 测试(Android)(发布 App Store 之前)。
- 发布到 App Store 前,iOS 测试请参见 测试手动 SDK应用对接(iOS)(未发布)。
发布到应用市场后测试文档
- 发布到 Google Play Store 后,Android 测试请参见 测试手动 SDK应用对接(Android)(未发布)。
- 发布到 App Store 后,iOS 测试请参见 测试手动 SDK应用对接(iOS)(未发布)。
联系 AppsFlyer
如果需要联系 AppsFlyer 排查数据,最好提供以下数据:
- App ID
- 所查看的时间段
- 事件 ID
- 设备 IDFA
- 包名
测试链接中的 PID 字段,例如https://app.appsflyer.com/id1089079153?pid=locky0508-2&idfa=A56EC65B-DF48-42F4-B74C-DCE6B818E729
中的 id1089079153,并非 bundleID 或者 包名。
Android 平台依赖 Google 服务
若对于 Android 平台,使用 AppsFlyer 需要手机安装有 Google 服务,所以在安装有 Google 服务的手机上去进行 AppsFlyer 的接入测试。
AppsFlyer 打包
AppsFlyer 不再支持 ANT 打包。