AppsFlyer 研究(七) 非GPS设备用户归因解决方案
一、概述
为了实现准确的归因,AppsFlyer 需要使用用户的唯一标识符 (ID)。
在支持 Google Play 服务 (GPS) 的设备上, 使用的是 Google 广告 ID (GAID)作为用户唯一标识。
不支持 GPS的设备用户是从不同的 Android 应用商店下载应用程序,同时还有许多设备是通过移动网页或应用内广告APK 下载链接产生的。
从Android 10(API 级别 29)开始对 IMEI 和 Android ID 的访问受到限制,为了解决这个问题,GAID 的替代方案是 OAID,OAID 从 2019 年底开始可用 。
1、应用场景
AppsFlyer 提供解决方案来归因非GPS Android 应用安装,主要有两种应用场景:带有归因链接的 Android 店外应用、APK下载链接/APK+归因链接。
- 带归因链接的 Android商城应用
支持广告归因的android 应用商店,如国内华为、小米、腾讯、360、百度、OPPO应用商店,一般都有自己的Android应用商店和广告平台/广告联盟。
在这种情况下,开发者需要给每个应用商城, 生成一个唯一的应用程序,使用 AppsFlyer 归因链接来记录建立在这些广告平台/广告网络上的广告活动的效果,同时可以归因自然安装和非自然安装。
例如:通过腾讯广点通广告推广Android 应用, 需要将Android 应用上传到腾讯应用宝,这样同时带来自然安装和非推广的安装。
- 允许使用 APK 下载链接的广告推广
只需提供一个 APK 下载链接或一个 APK 和 AppsFlyer 属性链接到媒体源。
这种情况下,设置一个安卓店外应用,为不同的广告网络生成不同的归因链接即可。
例如: 字节跳动广告(今日头条)、新浪微博、爱奇艺。
2、解决方案
在AppsFlyer后台,有两种数据查看方式:
- 在单个应用面板下查看所有商店的数据
- 多个应用下分别查看对应商店的数据(一个应用对应一个第三方商店)
下表是两种方式对比:
单个应用面板 | 多个应用面板 | |
描述 | 在单一应用面板下查看所有商店数据,如Google Play,Amazon,Huawei等等 | 每个应用面板对应各自的商店。也就是说,App上架多少个商店,就可以在AppsFlyer后台添加多少个App |
安卓包名 | 单一应用需要物理包名一致 | 多个应用面板,物理包名通常需要一致,通过后缀channel区分 |
channel名称 | / | 使用Android Out-of-Store APK选项在 AppsFlyer 仪表板中添加应用程序时 ,设置渠道。 Android 包名称和渠道的组合唯一标识每个 AppsFlyer 仪表板。 示例:Android 包名称为 com.abc.def,通道为 xyz_device_store。唯一的仪表板标识符是 com.abc.def-xyz_device_store。 如果 APK 具有频道设置但没有具有此设置的应用,则流量将归因于默认应用,即具有空白频道设置的应用是 Google Play 商店。 |
上报install_app_store字段 | 各应用商店/下载渠道的唯一标示如仅上架Google Play, 无需使用该字段。支持manifest配置和API方法上报。 | 不适用 |
归因链接 | 归因链接相同。确保用户被跳转至正确的商店,请使用&af_r参数设置重定向URL。(如涉及异步监测,即跳转链接带有is_redirect=false参数的,可忽略af_r参数) | 每个应用/商店对应各自的归因链接。通过合作伙伴配置页面创建。应用 ID 包含 android 包名称和渠道名称,例如:com.abc.def-def_store。因此,归因链接会有所不同。 |
可查看install_app_store的面板和报告 | 队列和原始数据报告包括该字段。 | N/A |
注意事项 | 归因准确性:不同商店的卸载重装根据客户的重归因窗口期内,不会重复记录;自然激活:一个面板下显示所有商店/渠道APK包的自然激活目前支持install_app_store的面板仅包含群组报告;各原始数据已经支持; | 归因准确性:因为包名不同,可能包含卸载重装。在AppsFlyer的各个应用面板上分别查看各渠道/商店包的自然和非自然激活和应用内事件。如需在一个面板下汇总所有商店数据,可以借助群组报告或自定义面板等工具实现。 |
二、设置方法
具体的操作步骤需要由市场人员和开发人员共同配合完成。
1、准备工作
- 确定命名规则,方便后续给channel或install_app_store赋值。
- 可参考表格准备channel和install_app_store的命名。
- 表格主要方便开发人员后续准备APK打包。
命名规则映射表
参数 | 说明 | 单个应用面板 | 多个应用面板 |
channel名称 | 各个渠道/商店包的唯一名称 (命名由广告主自定义) | 无需设置 | 每个APK包/渠道包对应一个channel名/渠道号。需要通过打包时在manifest配置,同时在添加App时填写完全一致的channel名,此处务必注意技术与运营配合一致。 |
install_app_store | 各个渠道/商店包的唯一名称 (命名由广告主自定义) | 可通过manifest配置;或者API的方式赋值(如渠道包数量较多,建议直接用API的方式)。 每个APK包/渠道包对应一个install_app_store/渠道号。 | 无需设置 |
安卓包名 | 各商店/渠道包包名一致 | 如果APK包已经上架Google Play,可以直接选择使用该App面板查看多个商店数据。示例: comb.abc.def |
- 配置步骤说明表
步骤 | 操作方 | 单个应用面板 | 多个应用面板 |
1 | 开发人员 | APK打包 | APK打包 |
2 | 市场人员 | 如果面板已经有包名相同的Google Play App存在,且团队愿意在一个面板下同时查看Google Play包和第三方应用商店包的数据,则无需操作此处,直接使用原有面板进行配置。 | 在AppsFlyer面板添加应用 |
3 | 市场人员 | 准备归因链接 | 分App(包名+channel名)准备归因链接。正常通过合作伙伴配置页面即可。 |
4 | 市场人员和研发人员互相配合 | 测试 | 测试 |
2、集成SDK上报设备ID
请务必确认上报IMEI和OAID给AppsFlyer
通常,国内的Android设备上没有Google Play Service。也就是说GAID在国内安卓归因的部分基本上无效。
作为替代,国内会使用IMEI或OAID作为归因使用的设备唯一标志符。
OAID:
- 需要AppsFlyer Android SDK 5.1.0以上版本。
- AppsFlyer SDK V5.4.0 后,默认自动收集OAID。
- AppsFlyer已经与多家手机厂商完成了OAID对接且完成归因协同测试。包括:华为,联想,OPPO,Vivo,三星和小米。
IMEI:
- AppsFlyerSDK收集IMEI的情况:设备内有Google Play Service,则默认不收集IMEI。
- 收集IMEI时,会受到用户授权结果的影响,因此用户同意授权获取IMEI,才会获取IMEI数据。
3、单个应用面板集成
安卓包名决定了归因数据发往哪个应用面板。在单个应用面板的场景下,所有的商店/渠道包的包名是一致的。
(1)、集成打包APK:
(a)、创建App build 副本
(b)、为不同APK包/商店包/渠道包名赋值:
- **Manifest方法:**在AndroidManfest.xml中的 <application>标记内添加以下代码。
为每个APK包/商店包/渠道包设置AF_STORE值
<application> <meta-data android:name="AF_STORE" android:value="example_store"> </application>
- API方法: 每个国内第三方应用商店分别准备一个单独的APK。
调用setOutOfStore API以设置AF_STORE值。为每个商店设置唯一AF_STORE值。
(注意:如果您使用的国内第三方应用商店较多,建议使用此方法)
AppsFlyerLib.getInstance().setOutOfStore("example_store")
(2)、配置-归因链接
(a)、前往 > 合作伙伴配置,然后选择对应的媒体渠道
(b)、在归因链接 标签页,配置对应af_r参数
(c)、设置额外的归因链接参数
(d)、媒体渠道可使用设备ID进行归因,同时AppsFlyer也支持概率模型作为备用方案。
(e)、建议在归因链接中使用一个或多个设备ID参数
android_id
advertising_id
oaid
(f)、复制归因链接,填写至广告平台
4、多个应用面板集成
(1)、每个商店准备单独的 APK/清单:
在 AndroidManfest.xml 的 <application> 标记中添加以下内容以标识商店。
将 CHANNEL 参数设置为应用商店名称。
<application> < meta-data android:name="CHANNEL" android:value="enter_store_name_here"> </application>
注意:参数区分大小写。
(2)、给每个商店添加独立的APP
(a)、转到我的应用程序,单击添加应用程序。
添加您的应用程序窗口打开。
(b)、选择第三方商店
(c)、填写信息
- Android 包名称: 与应用包中显示的完全相同的包名称。
- 渠道名称: 唯一标识符(商店名称),用于区分具有相同包名称的仪表板。确保您在为商店准备的 APK 中使用相同的值。
- 应用程序 URL: 在归因链接中填充 af_r 的默认 URL 下载地址。现在可以不必设置它,可以在创建归因链接时再添加。
如图所示:
5、测试
(1)、非自然安装
- 使用未安装应用程序的 Android设备
- 使用自定义媒体源配置,生成测试属性链接。使用 test 作为媒体源名称(“&pid=test”)
- 将 GAID、OAID 或 Android ID 等广告 ID 添加到点击 URL
http://app.appsflyer.com/com.greatapp?pid=test &af_r=http://www.destinationurl.com&advertising_id=b5a3-78d9b5-0f12345-xxxx
生成链接后,将归属链接发送给自己,然后单击,重定向后,不用从应用商店安装,直接从本地安装带有 AppsFlyer 归因 SDK 的测试包,并启动。
测试预期效果:
单个应用面板 | 多个商店应用板 |
1、在“导出数据”页面上检查您的应用安装原始数据报告。您应该会看到带有测试媒体源的安装转换。在标题为“安装 App Store ”的列下**,**您应该会看到出现在 manifest.xml 文件中的商店名称。您还可以在安装日志中看到参数 “af_installstore”: “STORE_NAME”。 | 转到每个商店仪表板所需的应用程序。在“导出数据”页面下查看应用的安装原始数据报告或查看应用的概览页面。您应该会看到一个带有“测试”媒体源的安装转换。 |