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)
    }

}

Liên kết Github

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 onConversionDataSuccesstrả về dữ liệu liên kết sâu cũng như dữ liệu phân bổ.