Dữ liệu chuyển đổi
Trong hướng dẫn này, bạn sẽ tìm hiểu cách lấy dữ liệu chuyển đổi bằng AppsFlyerConversionListener
cũng như ví dụ về cách sử dụng dữ liệu chuyển đổi.
Tìm hiểu thêm về dữ liệu chuyển đổi là gì.
Trước khi bạn bắt đầu
Các ví dụ đoạn mã sau đây yêu cầu bạn phải nhập AppsFlyerLib
and AppsFlyerConversionListener
:
import com.appsflyer.AppsFlyerLib;
import com.appsflyer.AppsFlyerConversionListener;
Thiết lập AppsFlyerConversionListener trong SDK Android
AppsFlyerConversionListener overview
The AppsFlyerConversionListener
cho phép bạn xác định được lượt chuyển đổi.
Nếu bạn triển khai và đăng ký AppsFlyerConversionListener
Khi gọi ra init
, lệnh gọi lại onConversionDataSuccess
được gọi ra bất cứ khi nào:
- Người dùng mở ứng dụng
- Người dùng chuyển ứng dụng sang chế độ chạy nổi
Nếu vì bất kỳ lý do gì mà SDK không tìm nạp được dữ liệu chuyển đổi, onConversionDataFail
is invoked.
Truy cập dữ liệu phân bổ
Khi được gọi ra, onConversionDataSuccess
trả về một Map
(được gọi là conversionDataMap
trong ví dụ) chứa dữ liệu chuyển đổi cho lượt cài đặt đó. Dữ liệu chuyển đổi được lưu vào bộ nhớ tạm lần đầu tiên onConversionDataSuccess
được gọi ra và sẽ giống hệt nhau trong các lệnh gọi liên tiếp.
Organic vs. Non-organic conversions
Một lượt chuyển đổi có thể là tự nhiên hoặc không tự nhiên:
- Lượt chuyển đổi tự nhiên là lượt chuyển đổi không được phân bổ thường là kết quả của một lượt cài đặt trực tiếp từ cửa hàng ứng dụng.
- Lượt chuyển đổi không tự nhiên là lượt chuyển đổi được phân bổ cho một nguồn truyền thông.
Bạn có thể nhận loại chuyển đổi bằng cách kiểm tra giá trị của af_status
trong tải trọng của onConversionDataSuccess
. Nó có thể là một trong các giá trị sau:
Organic
Non-organic
Ví dụ:
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)
}
}
Deferred deep linking (phương thức cũ)
Khi ứng dụng được mở thông qua liên kết sâu bị trì hoãn, tải trọng của onConversionDataSuccess
trả về dữ liệu liên kết sâu cũng như dữ liệu phân bổ.
- Phương thức hay nhất được đề xuất là triển khai liên kết sâu với Liên kết Sâu Hợp nhất (UDL)
- Đối với khách hàng hiện có và để tham khảo, đây là hướng dẫn liên kết sâu Android cũ của chúng tôi, sử dụng
AppsFlyerConversionListener
.
Đã cập nhật 4 tháng trước