一、AppsFlyer 简介
作为AppsFlyer完整归因解决方案的一部分,AppsFlyer Android SDK提供了应用程序安装和事件记录功能。该SDK经过市场验证,安全,轻便且易于嵌入。
应用程序嵌入SDK后,您可以记录安装,会话和其他应用内事件(例如,应用内购买,游戏级别等)来评估用户参与度,甚至投资回报率!
AppsFlyer提供了以下解决方案:
- 适配主流厂商OAID
- 鉴于国内安卓生态不会使用GAID,将根据 OAID 或设备IMEI进行归因,以替代GAID
- 除了提供归因的媒体渠道字段,还会提供商店/渠道包字段,保证每一条激活数据包含用户完整转化路径:从渠道的点击/曝光数据,到最终APK下载来源,可以轻松识别商店劫持。
- 配置为中国市场专门制定的归因链接(即点击监测链接)。
二、集成AppsFlyer
1、将SDK添加到应用, 使用Gradle
(1)、将以下代码添加到 dependencies 之前的 /app/build.gradle
模块:
repositories { mavenCentral() }
(2)、添加最新版本的AppsFlyer SDK 为dependency。
dependencies { //make sure to use the latest SDK version: https://mvnrepository.com/artifact/com.appsflyer/af-android-sdk implementation 'com.appsflyer:af-android-sdk:5.0.0' }
(3)、同步项目以检索依赖项-请参见以下截图:
2、添加Android Install Referrer 到您的App中
Android Install Referrer可提高归因准确性,防止安装欺诈等。从AppsFlyer Android SDK版本4.8.6开始受支持。
(1)、把安卓安装Referrer添加为dependency.您可以在 此处找到最新版本
dependencies { //make sure to use the latest SDK version: https://mvnrepository.com/artifact/com.appsflyer/af-android-sdk implementation 'com.appsflyer:af-android-sdk:5.+' implementation 'com.android.installreferrer:installreferrer:1.0' }
(2)、同步项目以检索依赖项-请参见以下截图:
(3)、设置所需权限
添加permissions有助于提高指纹归因的比率。它还允许SDK发送更多数据,例如Wifi和运营商网络数据。您可以在原始数据报告找到此数据,并将其用于分析和优化活动。
将以下权限添加到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" />
(4)、设置BroadcastReceiver以从Google Play获取数据
Google 在2020年3月份弃用了 BroadcastReceiver 为了不影响归因准确性,请您参考文档2.2部分,实施接入installreferrer。您可能仍需要使用BroadcastReceiver进行Google市场外商店的归因。请您与上架应用程序的Google市场外商店进行核对。
如果您没有在AndroidManifest.xml的INSTALL_REFERRER
上设置receiver监听,则在application标签内添加以下接收器:
<application> <receiver android:name="com.appsflyer.SingleInstallBroadcastReceiver" android:exported="true"> <intent-filter> <action android:name="com.android.vending.INSTALL_REFERRER" /> </intent-filter> </receiver> </application>
3、SDK初始化
(1)、检索dev key (开发者密钥)
AppsFlyer使用唯一的dev key来标识您的帐户。dev key是强制性的,因为它允许SDK安全地发送和检索属于您AppsFlyer帐户的数据。
重要提示:初始化SDK时,使用正确的dev key至关重要。使用错误的dev key会影响从SDK发送的所有流量,并导致归因和报告问题。
获取您的dev key:
- 转到应用控制面板。
- 在控制面板的 配置 单击 应用设置 。
- 复制您的dev key。
(2)、初始化SDK
我们建议在应用程序的全局应用程序类(global application state)中初始化SDK。这使SDK可以在所有方案中进行初始化,包括深度链接。
下述步骤发生在应用的全局类(global application class)中。
- 在应用的global class中,导入以下库
import android.app.Application;
import android.util.Log;
import com.appsflyer.AppsFlyerLib;
import com.appsflyer.AppsFlyerConversionListener;
import java.util.Map;
- 在全局类内,设一个变量记录您的dev key,推荐命名为AF_DEV_KEY。
重要:初始化SDK时,使用正确的dev key至关重要。使用错误的dev key会影响从SDK发送的所有流量,并导致归因和报告问题。
public class AFApplication extends Application { private static final String AF_DEV_KEY = "qrdZGj123456789"; //... }
- 在global class内部,在调用
super.onCreate()
后 ,实施AppsFlyerConversionListener
.请参阅下面步骤4中的代码。 - 在全局类中,在
ConversionListener
,初始化SDK并调用startTracking
方法。
public class AFApplication extends Application { private static final String AF_DEV_KEY = "qrdZGj123456789"; @Override public void onCreate() { super.onCreate(); AppsFlyerConversionListener conversionListener = new AppsFlyerConversionListener() { @Override public void onConversionDataSuccess(Map<String, Object> conversionData) { for (String attrName : conversionData.keySet()) { Log.d("LOG_TAG", "attribute: " + attrName + " = " + conversionData.get(attrName)); } } @Override public void onConversionDataFail(String errorMessage) { Log.d("LOG_TAG", "error getting conversion data: " + errorMessage); } @Override public void onAppOpenAttribution(Map<String, String> conversionData) { for (String attrName : conversionData.keySet()) { Log.d("LOG_TAG", "attribute: " + attrName + " = " + conversionData.get(attrName)); } } @Override public void onAttributionFailure(String errorMessage) { Log.d("LOG_TAG", "error onAttributionFailure : " + errorMessage); } }; AppsFlyerLib.getInstance().init(AF_DEV_KEY, conversionListener, getApplicationContext()); AppsFlyerLib.getInstance().startTracking(this); } }
(3)、注册该global application class
在AndroidManifest.xml文件的application
标签内,添加以下行:
android:name="APP.PACKAGE.NAME.AFApplication"
- APP.PACAKGE.NAME-用应用包名替换。
- AFApplication-用应用global class中设置的名称替换它
manifest.xml中的这一行告诉应用程序什么是全局应用程序。如上所述,这样做使AppsFlyer SDK可以在整个应用程序中全局访问。
4、测试安装
(1)、将设备加入白名单
将设备列入白名单可让您多次使用同一设备进行安装归因测试。本文介绍如何通过添加和删除设备来管理白名单。
在执行归因测试时,“重新归因”窗口会将安装归因限制为每90天窗口一次。因此,如果您反复使用同一设备测试安装归因,则不会记录任何内容。通过将设备列入白名单可以解决此问题。
以下作为参考
- 白名单测试设备会忽略重新归因规则
- 白名单中的设备适用于帐户中的所有应用
- 广告平台和代理商需要要求广告主添加设备
- 每个帐户最多可以将40台设备列入白名单
- 只有管理员可以删除设备
管理白名单
通过添加和删除设备来管理您的白名单。
有两种方法可以将设备添加到白名单。
要下载AppsFlyer设备ID应用程序:
- 使用二维码(Google Play商店)或提供的链接之一下载并安装该应用。
Android iOS Windows
- 在Android / iOS / Windows屏幕上,点击白名单按钮。
- 输入您的AppsFlyer登录凭证。该设备现已列入白名单。
- 点击共享以使用系统共享对话框共享设备ID信息。
通过用户界面手动添加设备
团队成员可以手动将设备标识符添加到测试设备列表中。
将设备添加到白名单:
- 在AppsFlyer中,单击您的电子邮件地址会有下拉列表。
- 选择测试设备 。 将打开“测试设备”页面。
- 点击 Add device
- 根据需要完成:
- 操作系统:选择一个操作系统。
- 名称(仅使用英文字母):输入设备的标识名。
- 标识符:根据操作系统(OS)提供设备标识符:Android iOS Windows使用AppsFlyer设备ID应用获取设备标识符通过将代码拨入设备或使用链接来获取标识符:
- IMEI
#06# - 安卓ID
##8255## (可能不适用于更新的设备) - Google Ad ID
获取Google Advertising ID
(2)、模拟自然安装
自然安装是未被归因的安装,通常是直接前往应用商店安装的用户。
要模拟自然安装:
- 确保已将移动设备连接到计算机。
- 在Android Studio中,打开Logcat。
- 在Android Studio中,将应用安装到设备或模拟器上。
- 等待应用启动。
- 在Logcat中,查找该应用的包名。
您应该看到以下内容:
屏幕截图中突出显示的部分表示SDK报告了自然安装。此数据来自AFApplication类中的onConversionDataSuccess
方法。
注意: 从SDK Version5开始, onConversionDataSuccess
是获取转换数据的方法的名称。如果使用的SDK版本低于5.0.0,则该方法的名称为onInstallConversionDataLoaded
。
(3)、模拟非自然安装
非自然安装通常是在广告互动之后的可归因安装。您可以使用归因链接模拟非自然安装。
模拟非自然安装:
- 在manifest中,找出您的应用包名,例如com.company.app。
- 在下面的URL中,将<PACKAGE_NAME>替换为您的应用包名:
https://app.appsflyer.com/<PACKAGE_NAME>?pid=sdk_test&c=sdk_test
参数 pid 代表媒体渠道名称。
参数 c 表示广告系列名称。- 将此URL发送到设备。可以通过电子邮件或WhatsApp发送
- 在设备上,单击URL。
- 如果该应用已在应用商店上架,那您将跳转至应用商店。不要从应用商店下载并安装该应用。继续执行步骤5。
- 如果该应用未在应用商店上架并且仍在开发中,则屏幕会显示‘在应用商店中找不到这个应用’。继续执行步骤5。
- 在Android Studio中,打开Logcat。
- 使用USB数据线将设备连接到计算机。
- 通过Android Studio在设备上安装该应用。
- 在Logcat中,查找该应用的包名。
您应该看到以下内容:
三、集成SDK常见问题
1、ProGuard警告
如果您使用的是ProGuard,并且遇到有关我们的 AFKeystoreWrapper
类的警告,则将以下代码添加到ProGuard规则文件中:
-keep class com.appsflyer.** { *; }
2、备份规则
如果您在AndroidManifest.xml的<application>标签内添加android:fullBackupContent="true"
,您可能会收到错误提示:
Manifest merger failed : Attribute application@fullBackupContent value=(true)
要解决此错误,请在AndroidManifest.xml文件的<application>标签中添加 tools:replace="android:fullBackupContent
。
如果您指定了自己的备份规则,请通过添加以下规则将它们与AppsFlyer规则手动合并:
<full-backup-content> ...//your custom rules <exclude domain="sharedpref" path="appsflyer-data"/> </full-backup-content>
3、缺少资源文件
如果您使用的Android SDK 为5.0.0或更高版本,请确保在APK中,除了 classes.dex 和 resources 文件外,您的文件夹 com > appsflyer > internal 中同样包含文件 a. 和 b. 。
如果这些文件丢失,则SDK无法向我们的服务器发出网络请求。
在Android Studio中打开您的APK来检查您是否有必须的文件。
请参阅以下屏幕截图以供参考。