Dalam panduan ini, Anda akan pelajari cara mendapatkan data konversi menggunakan AppsFlyerConversionListener, serta contoh untuk menggunakan data konversi.

Pelajari lebih lanjut tentang apa itu data konversi.

Sebelum Anda memulai:

Contoh kode berikut mengharuskan Anda mengimpor AppsFlyerLib and AppsFlyerConversionListener:

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

Mengatur AppsFlyerConversionListener di SDK Android

AppsFlyerConversionListener overview

The AppsFlyerConversionListener antarmuka memungkinkan Anda mendengarkan konversi.

Jika Anda menerapkan dan mendaftar AppsFlyerConversionListener Saat memanggil init, nya onConversionDataSuccess callback dipanggil setiap kali:

  • Seorang pengguna membuka aplikasi
  • Seorang pengguna memindahkan aplikasi ke latar depan

Jika karena alasan apa pun SDK gagal mengambil data konversi, onConversionDataFail is invoked.

Mengakses data atribusi

Saat dipanggil, onConversionDataSuccess mengembalikan Map (yang dipanggil conversionDataMap dalam contoh) yang berisi data konversi untuk penginstalan tersebut. Data konversi di-cache pertama kali onConversionDataSuccess dipanggil dan akan identik pada panggilan berturut-turut.

Organic vs. Non-organic conversions

Konversi dapat berupa Organik atau Non-organik:

  • Konversi Organik adalah konversi yang tidak diatribusikan, yang biasanya merupakan hasil penginstalan langsung dari app store.
  • Konversi Non-organik adalah konversi yang diatribusikan ke sumber media.

Anda bisa mendapatkan jenis konversi dengan memeriksa nilai af_status pada onConversionDataSuccesspayload-nya. Hal ini dapat berupa salah satu dari nilai berikut:

  • Organic
  • Non-organic

Contoh

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

}

Tautan Github

Tautan langsung tertunda/deferred deep linking (Metode lama)

Saat aplikasi dibuka melalui deferred deep linking (penautan langsung tertunda), onConversionDataSuccesspayload mengembalikan data deep linking, serta data atribusi.