AppsFlyer SDK 对接 - Android

  • 广告商
  • 开发商

android.pngSDK Version:  4.8.17 (Release Notes)

1. 概述

AppsFlyer SDK为移动应用提供安装和应用内事件的追踪。我们所开发的 SDK 不但非常强大(目前 SDK 安装量已经超过 70 亿)、安全、轻量化,而且可以轻松内嵌。

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

AppsFlyer Android SDK与Android 操作系统版本 2.3及以上兼容

如果您要把 AppsFlyer Android SDK 从3.3.x 升级到更高版本,请点击此处

 提示

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

2. 快速开始

2.1 SDK Download

下载最新的AppsFlyer Android SDK jar,点击这里.


验证SDK下载,点击这里.

如需了解 AppsFlyer 样本应用的详细信息,请点击此处

2.2 将 SDK 嵌入应用

您可以使用 Gradle 的 Dependency Management 自动对接 AppsFlyer SDK,也可以将其作为 SDK.jar 手动对接。

2.3 将 SDK 添加到项目中

将 SDK 对接到您的项目的最简单的方式就是使用 Gradle 的 Dependency Management。如需了解版本信息,请点击此处

如果您使用的不是 Gradle,下载 AF-Android-SDK.jar 并将其添加到项目的类路径中。

添加 AppsFlyer 的 Android SDK Dependency:

  1.  打开项目(或创建新项目),接着打开 your_app | build.gradle
  2.  Add this to Module-level /app/build.gradle before dependencies:
repositories { 
    mavenCentral()
}
  1. 添加最新版本AppsFlyer SDK到implementation dependency.
  2. 在repository之后,添加到Module-level /app/build.gradle:
dependencies {
	implementation 'com.appsflyer:af-android-sdk:4+@aar'
	implementation 'com.android.installreferrer:installreferrer:1.0'
}

 重要信息!

  • 如果需要支持 Google Play Install referrer API,必须添加 'com.android.installreferrer:installreferrer:1.0' 依赖项。使用此 API 可提高归因的准确性,能有效预防安装作弊等现象。
  • AppsFlyer Android SDK 4.8.6 及以上版本均支持该 API。若从较旧的 SDK 版本更新到新版,则需更新 3. SDK 的初始化方法来完成依赖项的集成。
  • 使用ProGuard的开发者想要使用Google new referrer API,必须设定以下ProGuard Rule: -dontwarn com.android.installreferrer
  • 非使用gradle build或aar的开发者想要使用Google new referrer API,必须手动添加com.android.installreferrer jar 档案,并确保加上以下权限: com.google.android.finsky.permission.BIND_GET_INSTALL_REFERRER_SERVICE

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" />

2.5 在 AndroidManifest.xml 中设置 BroadcastReceiver

执行 install referrer broadcast receiver 可以使用下面的两个选项:

使用单个 Broadcast Receiver 使用多个 Broadcast Receiver

在AndroidManifest.xml中,请添加以下监听器作为 INSTALL_REFERRER 中第一个监听器,并确保监听器在application tag中:

<application
...
...

	<receiver android:name="com.appsflyer.SingleInstallBroadcastReceiver" android:exported="true">
		<intent-filter>
			 <action android:name="com.android.vending.INSTALL_REFERRER" />
		 </intent-filter>
	</receiver>

...
...
</application>

 提示

在添加receiver到AndroidManifest.xml后,如果有报错"Unresolved class SingleInstallBroadcastReceiver",请先build the app

3. SDK 初始化

Initialization of the SDK is completed in two stages. In the first stage the DevKey is supplied along with an optional conversionDataListener. In the second stage the call to startTracking indicates that all relevant preparations are complete (e.g. call setCustomerUserId) and the SDK can start tracking all events.

要初始化 SDK,将下列代码添加到您的应用的 onCreate() 函数中:

import com.appsflyer.AppsFlyerLib;
import com.appsflyer.AppsFlyerConversionListener;

public class AFApplication extends Application {
   private static final String AF_DEV_KEY = "";
   @Override
   public void onCreate() {
       super.onCreate();
       AppsFlyerConversionListener conversionDataListener = 
       new AppsFlyerConversionListener() {
           ...
       };
       AppsFlyerLib.getInstance().init(AF_DEV_KEY, conversionDataListener, getApplicationContext());
       AppsFlyerLib.getInstance().startTracking(this);   }
}

 注意

您还可以延迟调用 startTracking,并将其放到任何相关的 Activity OnCreate() 函数内。

 提示

compile 'com.android.installreferrer:installreferrer:1.0'getApplicationContext() 通过以下方法:AppsFlyerLib.getInstance().init(AF_DEV_KEY, getConversionListener(), getApplicationContext()); 传递,是向 AppsFlyer 上报 Google New Referrer API 的前提条件。

您可以在AppsFlyer 控制面板左栏“配置(Configuration)”下的“应用设置(App Settings)“处,找到您账户的 Dev Key:

该 API 确保 AppsFlyer 可以成功检测安装、事件、回话和应用更新。

4. 追踪应用内事件

应用内事件能够为您提供应用内所发生情况的深入分析。强烈建议花些时间定义需要监测的应用内事件,以追踪投资回报率 (ROI) 和用户生命周期价值 (LTV)等数据。

追踪应用内事件是透过呼叫包含事件名称和参数值的trackRichEvent代码实现。可以查看 In-App Events 文档获取更多细节。

 注意

应用内事件名称长度不得超过 45 个字符。超过 45 个字符的事件名称不会出现在控制面板中,只会出现在原始数据、Pull API 和 Push API 中。

//context - use getApplicationContext()
//eventName is any string to define the event name.
//eventValues is a map of event parameters that comprise a rich event.  
public static void trackEvent(Context context, String eventName, Map eventValues);


示例
:达到级别的应用内事件

Map<String, Object> eventValue = new HashMap<String, Object>();
eventValue.put(AFInAppEventParameterName.LEVEL,9);
eventValue.put(AFInAppEventParameterName.SCORE,100);
AppsFlyerLib.getInstance().trackEvent(context,AFInAppEventType.LEVEL_ACHIEVED,eventValue);

这样可以生成 af_level_achieved 类型的事件,包含下列事件值:
{af_level: 9, af_score: 100}

 注意

  • 从 Android SDK 4.8.1 版起,AppsFlyer 支持应用内事件或任何其他 SDK API 使用非英语字符。
  • 请勿向数字添加任何货币符号或逗号,以免识别不出。

 使用示例

Map<String,Object> eventValues = new HashMap<>();
eventValues.put(AFInAppEventParameterName.REVENUE, 1200);
eventValues.put(AFInAppEventParameterName.CURRENCY, "JPY");
AppsFlyerLib.getInstance().trackEvent(this, AFInAppEventType.PURCHASE, eventValues);

5. 追踪深度链接

 提示

我们强烈建议将深度链接与您的应用相对接。深度链接是访客找回营销活动的重要组成部分,强烈建议您在开展访客找回营销活动时使用这一功能。

对于可能会用于深度链接的各activity(如果需要的话,包括main activity),将下面的行添加到:onCreate():

AppsFlyerLib.getInstance().sendDeepLinkData(this);

通过 Deeplinking 开启的 activity 需在 manifest 文件中含有以下 activity 定义。 

<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="yourUniquescheme" />
</intent-filter>


配置的
Scheme 与您加入到追踪链接中的 af_dp 值相关联。

要接收您的深度链接数据,您必须执行通过 AppsFlyer SDK 调用的回调方法 onAppOpenAttribution。您可利用此回调获取OneLink/追踪链接中的参数信息,来自定义不用来源的用户在应用内深度跳转。

void onAppOpenAttribution(Map<String,String> attributionData);

如需了解更多信息,请点击此处,或查看本文章中的获取转化数据一节。

6. 追踪收入

作为应用内事件的一部分,使用 af_revenue (AFInAppEventParameterName.REVENUE) 事件参数来计算收入。您可以输入任意正负数值。

 注意

af_revenue 是 AppsFlyer 计算原始数据和控制面板上真实收入的唯一事件参数。如需了解更多详细信息,请点击此处

示例:付费收入类的应用内事件

Map<String, Object> eventValue = new HashMap<String, Object>();
eventValue.put(AFInAppEventParameterName.REVENUE,200);
eventValue.put(AFInAppEventParameterName.CONTENT_TYPE,"category_a");
eventValue.put(AFInAppEventParameterName.CONTENT_ID,"1234567");
eventValue.put(AFInAppEventParameterName.CURRENCY,"USD");
AppsFlyerLib.getInstance().trackEvent(getApplicationContext() , AFInAppEventType.PURCHASE , eventValue);

这样可以生成 af_purchase 类型的事件,包含下列事件值:

{af_content_id: “1234567”, af_content_type: “category_a”, af_revenue: 200, af_currency: “USD”}

上述购买事件包含 $200 的收入,展示在 AppsFlyer 控制面板中的收益(Revenue)里。 

 注意

Setting user local currency code for in-app purchases - the currency code should be a 3 character ISO 4217 code. (default is USD). 

您可以通过调用以下方法来为所有事件设置货币代码:AppsFlyer.setCurrencyCode("GBP");

 重要信息!

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

7. 获取转化数据

AppsFlyer 令您可以直接在 SDK 级别上实时访问每次新安装的用户归因数据。这样,您就可以为用户提供个性化内容或将内容发送到应用内的特定活动,这样可以大大增强与应用的互动。

要通过 Android SDK 访问 AppsFlyer 的转化数据,请执行 ConversionDataListener:

public interface AppsFlyerConversionListener {
       void onInstallConversionDataLoaded(Map<String,String> conversionData);
        void onInstallConversionFailure(String errorMessage);
}


示例

AppsFlyerLib.getInstance().registerConversionListener(this, new AppsFlyerConversionListener() {
  @Override
  public void onInstallConversionDataLoaded(Map<String, String> conversionData) {
      for (String attrName : conversionData.keySet()) {
          Log.d(AppsFlyerLib.LOG_TAG, "attribute: " + attrName + " = " + conversionData.get(attrName));
      }
  }
  @Override
  public void onInstallConversionFailure(String errorMessage) {
      Log.d(AppsFlyerLib.LOG_TAG, "error getting conversion data: " + errorMessage);
  }
  @Override
  public void onAppOpenAttribution(Map<String, String> conversionData) {
  }
  @Override
  public void onAttributionFailure(String errorMessage) {
      Log.d(AppsFlyerLib.LOG_TAG, "error onAttributionFailure : " + errorMessage);
  }
});

8. 用户标示符

获取 AppsFlyer Device ID

应用内的每次新安装都会创建一个 AppsFlyer 独有的 device ID。使用下列 API 获取 AppsFlyer 独有的 ID:

public String getAppsFlyerUID(Context context);


使用示例:

String appsFlyerId = AppsFlyerLib.getInstance().getAppsFlyerUID(this);

设置客户用户 ID

设置您自己的客户 ID 可以帮助您交叉引用自己的独有 ID 以及 AppsFlyer 的独有 ID 和其他设备的 ID。该 ID 可以通过 Postback API 在 AppsFlyer CSV 报告中得到,用于与您的内部 ID 交叉引用。

要设置您的客户用户 ID:

public void setCustomerUserId(String id);

 

用法示例:

AppsFlyerLib.getInstance().setCustomerUserId("myId");

 注意

建议您尽快设置自己的客户用户 ID,因为此 ID 只与设置后报告的事件关联。如果setCustomerUserId 在startTracking之前被调用,将可以看到Customer User ID在installs和events的原始数据报告,但如果是配置在之后,那只能够在event原始数据报告中看到。

客户用户 ID 还可以用于完成与 MixpanelSwrve 等分析平台的对接。

 

Getting Customer User ID:

避免设定customer user ID的值在first launch之外,可以用以下API检查该值是否为空: 

AppsFlyerProperties.getInstance().getString(AppsFlyerProperties.APP_USER_ID)

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

设置用户电子邮件

AppsFlyer 允许您报告一个或多个设备的关联电子邮件地址。您必须收集电子邮件地址并按照要求的加密方法报告给 AppsFlyer。

可以采用下列加密方法:SHA1、MD5、SHA256 和明文加密。

示例:

public void setUserEmails(String... emails);


使用示例:

AppsFlyerLib.getInstance().setUserEmails(AppsFlyerProperties.EmailsCryptType.MD5, "email1@domain.com","email2@domain.com",….);

 注意

AppsFlyer 不会保留电子邮件地址等个人可识别信息 (PII),此类信息不会出现在报告中。收集此类信息的目的仅限于向媒体渠道回传。

Google Advertising ID

从 SDK 4.8.0 版起,AppsFlyer 会自动收集 google_advertising_id。只有 SDK 4.7.X 及以下版本需要收集 Google Advertising ID。

IMEI 和 Android ID

如果操作系统版本高于 KitKat (4.4) 并且设备包含 Google Play Services(特定应用所需 GPS 的 SDK 版本 4.8.8 及更低版本),SDK 在默认情况下不会收集 IMEI 和 Android ID。 

要将这些 ID 显式发送到 AppsFlyer,开发者可使用以下 API 并将其置于 startTracking 代码前:

AppsFlyerLib.getInstance().setImeiData("IMEI_DATA_HERE");
AppsFlyerLib.getInstance().setAndroidIdData("ANDROID_ID_DATA_HERE");

如果应用不包含 Google Play Services,则 SDK 将收集 IMEI 和 Android ID。然而,采用 Google Play Services 的应用应避免收集 IMEI,以免违反 Google Play 政策

开发者可以使用这些 API 停止收集 IMEI 和 Android ID:

AppsFlyerLib.getInstance().setCollectIMEI(false);
AppsFlyerLib.getInstance().setCollectAndroidID(false);

 警告

为了进行正确归因,必须至少收集一个设备标示符,即 GAID、Android ID 或 IMEI。

9. 可选功能

追踪卸载

AppsFlyer 令您能够追踪应用的卸载。

要完整、正确地完成此过程,请务必点击此处阅读说明。

追踪推送通知

AppsFlyer 使您能够将推送通知作为找回营销广告进行监测。

要启用该功能,在每一个活动的 onCreate 方法调用以下方法,该方法在点击通知时会启动: 

AppsFlyerLib.getInstance().sendPushNotificationData(this);

数据有效载荷应包含一个对象:af,并具有相关联的键值字符串:

示例

{  
   "data":{  
      "score":"5x1",
      "time":"15:10",
      "af":{  
         "c":"test_campaign",
         "is_retargeting":"true",
         "pid":"push_provider_int"
      }
   }
}
{

{  
   "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

AFInAppEventParameterName.CURRENCY

未作为应用内事件的一部分发送时,则使用全局货币代码。

默认值为 USD。您可以在这里找到 API 可用的 ISO 货币代码。

使用以下 API 设置货币代码:

public void setCurrencyCode(String currencyCode);

用法示例:

AppsFlyerLib.getInstance().setCurrencyCode("GBP");

应用内购买验证

AppsFlyer 的 SDK 对于应用内购买提供服务器验证。要设置购买验证追踪,请在 onActivityResult 函数中调用 validateAndTrackInAppPurchase 方法。

该方法调用将自动生成一个 af_purchase 应用内事件。

public static void validateAndTrackInAppPurchase(Context context, 
String publicKey, String signature, String purchaseData, 
String price, String currency, HashMap<String, String> additionalParameters);

该方法调用有两个回调,一个是“成功”,另一个是“失败”(出于任何原因,包括验证失败)。

AppsFlyerLib.getInstance().registerValidatorListener(this,new
     AppsFlyerInAppPurchaseValidatorListener() {
          public void onValidateInApp() {
              Log.d(TAG, "Purchase validated successfully");
          }
          public void onValidateInAppFailure(String error) {
              Log.d(TAG, "onValidateInAppFailure called: " + error);
          }
});


使用示例:

protected void onActivityResult(int requestCode, int resultCode, Intent data) {
   if (requestCode == 1001) {
       String purchaseData = data.getStringExtra("INAPP_PURCHASE_DATA");
       String dataSignature = data.getStringExtra("INAPP_DATA_SIGNATURE");
       if (resultCode == RESULT_OK) {
           HashMap<String,String> event = new HashMap<>();
           event.put(AFInAppEventParameterName.PRICE,"9");
           AppsFlyerLib.getInstance().validateAndTrackInAppPurchase(getApplicationContext(),publicKey, dataSignature, purchaseData, "3.00", "ILS", event);
       }
   }
} 

 注意

调用validateAndTrackInAppPurchase 会自动产生 af_purchase应用内事件,所以不需要另外上报相同的事件。

匿名用户数据

AppsFlyer 为您提供在 AppsFlyer 分析中匿名特定用户标示符的方法。该方法符合最新的隐私要求并遵守 Facebook 数据和隐私政策。默认为 NO,表示默认未进行匿名。

在 SDK 初始化过程中,使用该 API 明确匿名用户安装、事件和互动:

public void setDeviceTrackingDisabled(boolean isDisabled);


使用示例:

AppsFlyerLib.getInstance().setDeviceTrackingDisabled(true);

可以通过再次调用 deviceTrackingDisabled,并设置为 false,重新启动追踪。

 警告

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

自定义互动之间的时间

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

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

工具类应用的后台互动

如果您的应用是在后台运行的工具类应用,您可在活动的 onCreate() 中使用该 API -

public void reportTrackSession(Context context);


使用示例:

AppsFlyerLib.getInstance().reportTrackSession(context);

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 的值。

将meta-data标签置于 </application> 标签前。

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

Opt-Out

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

AppsFlyerLib.getInstance().stopTracking(true,context);

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

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

 重要

如果isStopTracking設定為true,不要調用trackAppLaunch

要再次開始追蹤,且isStopTracking設定為false,使用以下SDK API

AppsFlyerLib.getInstance().trackAppLaunch(getApplicationContext(), AF_DEV_KEY);

 警告

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

为 customerUserID 延迟 SDK 初始化

可以延迟 SDK 的初始化,直到 customerUserID 设置完毕。此功能可确保在提供 customerUserID 之前,SDK 不会运行。如果使用此 API,所有应用内事件以及任何其他 SDK API 调用都被忽略,直到提供 customerUserID 并对其进行追踪。

为 customerUserID 延迟 SDK 初始化

AppsFlyerLib.getInstance().waitForCustomerUserId(true);

将以上API緊跟在init()方法之前,其餘的SDK初始化代碼應該保持不變,

一但customerUserID拿到後,調用

AppsFlyerLib.getInstance().setCustomerIdAndTrack("customer_id", this);

提供SDK相应的customer user id,并触发SDK开始正常的追踪

代码应如下所示:
public class AFApplication extends Application {
   private static final String AF_DEV_KEY = ;
   @Override
   public void onCreate() {
       super.onCreate();
AppsFlyerConversionListener conversionDataListener = 
       new AppsFlyerConversionListener() {
           ...
       };
       AppsFlyerLib.getInstance().waitForCustomerUserId(true); 
AppsFlyerLib.getInstance().init(AF_DEV_KEY,getConversionListener(), getApplicationContext());
       AppsFlyerLib.getInstance().startTracking(this);
// 正确设置以获取 customerUserID
       // ...
       // 此时对 AppsFlyer SDK 代码的任何调用都将被忽略
      //一旦 customerUserID 可用,调用以下 API:
 AppsFlyerLib.getInstance().setCustomerIdAndTrack("customer_id", this);⏎   }⏎}

 警告

仅在适合您的业务逻辑的情况下使用此 API。使用此 API 会提高数据差异的几率,并且可能使应用更容易暴露于诈骗中。

Setting Additional Custom Data

setAdditionalData API 需要在 SDK 级别与若干外部合作伙伴平台对接,包括 SegmentAdobe 和 Urban Airship。仅在平台对接文章明确说明需要 setAdditionalData API 时,才使用该 API。
以下为在 Android 上实施 setAdditionalData 的代码示例:

HashMap<String,Object> CustomDataMap = new HashMap<>();
CustomDataMap.put("custom_param_1","value_of_param_1");
AppsFlyerLib.getInstance().setAdditionalData(CustomDataMap);

预装应用的归因

有多种方法可用于预装应用的 Android 归因。

如需了解详情,请点击此处

Setting a Tracking Request Listener

If you want to receive a confirmation that the tracking request was successfully received by the AppsFlyer servers, it is possible to implement the AppsFlyerTrackingRequestListener listener.

The onTrackingRequestSuccess() callback method is invoked for every 200 response to an attribution request made by the SDK.

The onTrackingRequestFailure(String error) callback method is invoked for any other response and returns the response as the error string.

Implementation Example

AppsFlyerLib.getInstance().startTracking(this.getApplication(),"devKey", myListener());
private AppsFlyerTrackingRequestListener myListener() {   
    return new AppsFlyerTrackingRequestListener() {  
        @Override public void onTrackingRequestSuccess() { 
            Log.d("Debug", "Got 200 response from server");    
        }   @Override public void onTrackingRequestFailure(String error) { 
            Log.d("Debug", error); 
            }   
        }; 
    }

10. 测试 SDK 对接

要在提交到 Google Play 商店之前或之后测试 SDK 对接,请点击此处

Now you can start tracking the media sources you work with.

11. 已知问题

如果您使用的是 ProGuard 并且看到 AFKeystoreWrapper 类相关的警告信息,请将以下代码添加到您的 ProGuard 规则文件中:

-keep class com.appsflyer.** { *; }
这篇文章有帮助吗?
20 人中有 17 人觉得有帮助

评论

0 条评论

登录写评论。