转化数据
In this guide you will learn how to get conversion data using AppsFlyerConversionListener
, as well as examples for using the conversion data.
更多了解什么是转化数据。
开始之前
The following code examples require you import AppsFlyerLib
and AppsFlyerConversionListener
:
import com.appsflyer.AppsFlyerLib;
import com.appsflyer.AppsFlyerConversionListener;
在Android SDK中设置AppsFlyerConversionListener
AppsFlyerConversionListener overview
The AppsFlyerConversionListener
interface lets you listen to conversions.
If you implement and register AppsFlyerConversionListener
when calling init
, its onConversionDataSuccess
callback is invoked whenever:
- 用户打开应用程序
- 用户将应用程序移至前台
If for whatever reason the SDK fails to fetch the conversion data, onConversionDataFail
is invoked.
访问归因数据
When invoked, onConversionDataSuccess
returns a Map
(called conversionDataMap
in the example) that contains the conversion data for that install. The conversion data is cached the first time onConversionDataSuccess
is called and will be identical on consecutive calls.
Organic vs. Non-organic conversions
转换可以是自然或非自然 :
- 自然转化是一种未归因的转化,通常是从应用商店直接安装的结果。
- 非自然转化是归因于媒体渠道的转化。
You can get the conversion type by checking the value of af_status
in onConversionDataSuccess
's payload. It can be one of the following values:
Organic
Non-organic
举例
import com.appsflyer.AppsFlyerConversionListener;
import com.appsflyer.AppsFlyerLib;
import com.appsflyer.AppsFlyerLibCore.LOG_TAG;
AppsFlyerConversionListener conversionListener = new AppsFlyerConversionListener() {
@Override
public void onConversionDataSuccess(Map<String, Object> conversionDataMap) {
for (String attrName : conversionDataMap.keySet())
Log.d(LOG_TAG, "Conversion attribute: " + attrName + " = " + conversionDataMap.get(attrName));
String status = Objects.requireNonNull(conversionDataMap.get("af_status")).toString();
if(status.equals("Organic")){
// Business logic for Organic conversion goes here.
}
else {
// Business logic for Non-organic conversion goes here.
}
}
@Override
public void onConversionDataFail(String errorMessage) {
Log.d(LOG_TAG, "error getting conversion data: " + errorMessage);
}
@Override
public void onAppOpenAttribution(Map<String, String> attributionData) {
// Must be overriden to satisfy the AppsFlyerConversionListener interface.
// Business logic goes here when UDL is not implemented.
}
@Override
public void onAttributionFailure(String errorMessage) {
// Must be overriden to satisfy the AppsFlyerConversionListener interface.
// Business logic goes here when UDL is not implemented.
Log.d(LOG_TAG, "error onAttributionFailure : " + errorMessage);
}
};
import com.appsflyer.AppsFlyerConversionListener
import com.appsflyer.AppsFlyerLib
import com.appsflyer.AppsFlyerLibCore.LOG_TAG
class AFApplication : Application() {
// ...
override fun onCreate() {
super.onCreate()
val conversionDataListener = object : AppsFlyerConversionListener{
override fun onConversionDataSuccess(data: MutableMap<String, Any>?) {
// ...
}
override fun onConversionDataFail(error: String?) {
Log.e(LOG_TAG, "error onAttributionFailure : $error")
}
override fun onAppOpenAttribution(data: MutableMap<String, String>?) {
// Must be overriden to satisfy the AppsFlyerConversionListener interface.
// Business logic goes here when UDL is not implemented.
data?.map {
Log.d(LOG_TAG, "onAppOpen_attribute: ${it.key} = ${it.value}")
}
}
override fun onAttributionFailure(error: String?) {
// Must be overriden to satisfy the AppsFlyerConversionListener interface.
// Business logic goes here when UDL is not implemented.
Log.e(LOG_TAG, "error onAttributionFailure : $error")
}
}
AppsFlyerLib.getInstance().init(devKey, conversionDataListener, applicationContext)
AppsFlyerLib.getInstance().start(this)
}
}
延迟深度链接(传统方法)
When the app is opened via deferred deep linking, onConversionDataSuccess
's payload returns deep linking data, as well as attribution data.
- 推荐的最佳做法是使用统一深度链接(UDL)实现深度链接
- For existing clients and reference, here is our legacy Android deep linking guide, using
AppsFlyerConversionListener
.
已更新 3 months ago