Deferred Deep Linking Android yang Diperluas

Overview

Deferred deep linking yang diperluas memungkinkan deep linking untuk pengguna baru dalam skenario tertentu:

  • Saat UDL kembali NOT_FOUND even though a relevant install occurred.
    Main example for such a scenario:
    • Waktu antara klik dan penginstalan melebihi lookback window UDL (15 menit).
  • Saat UDL kembali FOUND tetapi data deep linking tidak memiliki parameter, yang tidak deep_link_value and deep_link_sub1-10.
    Contoh utama untuk skenario tersebut:
    • Clicking a link in a Self Reporting Network (SRN), like Meta ads or Twitter.
    • Mengeklik tautan yang tidak berisi deep_link_value or deep_link_sub1-10 digunakan untuk deep-linking, misalnya tautan lama yang dibuat sebelumnya deep_link_value ada yang masih digunakan.

Untuk mengizinkan deferred deep linking saat UDL kembali NOT_FOUND, onConversionDataSuccess callback harus memeriksa apakah harus menangani deferred deep linking.
onConversionDataSuccess adalah bagian dari API Dapatkan Data Konversi (GCD). Tujuan utamanya adalah untuk mengumpulkan data konversi di dalam perangkat.
Dalam kasus penggunaan yang diuraikan di sini onConversionDataSuccess memanfaatkan fakta bahwa semua parameter deep linking yang ditangguhkan diteruskan ke callback, selain data konversi.

Prasyarat

Penerapan

  1. onConversionDataSuccess harus mendeteksi kasus di mana deferred deep linking harus terjadi yang tidak ditangani oleh UDL.

    Lihat diseksi kode terperinci

  2. onConversionDataSuccess harus merutekan pengguna ke tujuan deferred deep linking berdasarkan parameter deep linking yang diteruskan ke callback.

Contoh kode

Code dissect

  1. Terapkan pendengar Get Conversion Data API AppsFlyerConversionListener.

    Semua metode pendengar harus dilaksanakan, meskipun onAppOpenAttribution and onAttributionFailure saling eksklusif dengan UDL, dan tidak akan dipanggil.

  2. Deteksi skenario deferred deep linking dengan memfilter payload data konversi dengan:
    • af_status == Non-organic
    • is_first_launch == true
  3. Saat deferred deep linking terdeteksi, filter kasus yang sudah ditangani oleh UDL.
    Dalam contoh berikut, semua tautan berisi deep_link_value.
    UDL disarankan untuk memberi sinyal dengan tanda bahwa deferred deep linking sudah ditangani, dan onConversionDataSuccess harus dilewati.
  4. onConversionDataSuccess harus memverifikasi data konversi menyimpan parameter yang digunakan untuk merutekan pengguna di dalam aplikasi. Contohnya fruit_name dalam contoh berikut.
  5. Arahkan pengguna ke tujuan deferred deep linking.

Code snippet

    AppsFlyerConversionListener conversionListener =  new AppsFlyerConversionListener() {
        @Override
        public void onConversionDataSuccess(Map<String, Object> conversionDataMap) {
            String status = Objects.requireNonNull(conversionDataMap.get("af_status")).toString();
            if(status.equals("Non-organic")){
                if( Objects.requireNonNull(conversionDataMap.get("is_first_launch")).toString().equals("true")){
                    Log.d(LOG_TAG,"Conversion: First Launch");
                    //Deferred deep link in case of a legacy link
                    if(conversionDataMap.containsKey("fruit_name")){
                        if (conversionDataMap.containsKey("deep_link_value")) { //Not legacy link
                            Log.d(LOG_TAG,"onConversionDataSuccess: Link contains deep_link_value, deep linking with UDL");
                        }
                        else{ //Legacy link
                            conversionDataMap.put("deep_link_value", conversionDataMap.get("fruit_name"));
                            String fruitNameStr = (String) conversionDataMap.get("fruit_name");
                            DeepLink deepLinkData = mapToDeepLinkObject(conversionDataMap);
                            goToFruit(fruitNameStr, deepLinkData);
                        }
                    }
                } else {
                    Log.d(LOG_TAG,"Conversion: Not First Launch");
                }
            } else {
                Log.d(LOG_TAG, "Conversion: This is an organic install.");
            }
        }

        @Override
        public void onConversionDataFail(String errorMessage) {
            Log.d(LOG_TAG, "error getting conversion data: " + errorMessage);
        }

        @Override
        public void onAppOpenAttribution(Map<String, String> attributionData) {
            Log.d(LOG_TAG, "onAppOpenAttribution: This is fake call.");
        }

        @Override
        public void onAttributionFailure(String errorMessage) {
            Log.d(LOG_TAG, "error onAttributionFailure : " + errorMessage);
        }
    };

⇲ Tautan Github: Java

Pengujian

📘

Penting

Skenario pengujian berikut menunjukkan penanganan deferred deep linking dari tautan yang berisi parameter kustom tetapi tidak deep_link_value and deep_link_sub1-10 parameter.
Skenario pengujian ini juga relevan untuk semua deferred deep linking yang diperluas, dijelaskan sebelumnya .

Before you begin

Test link

Anda dapat menggunakan tautan OneLink yang ada atau meminta pemasar Anda untuk membuat tautan baru untuk pengujian. URL OneLink pendek dan panjang dapat digunakan.

Menambahkan parameter ad-hoc ke tautan

  • Gunakan hanya domain dan templat OneLink dari tautan Anda, misalnya: https://onelink-basic-app.onelink.me/H5hv.
  • Tambahkan parameter khusus OneLink selain deep_link_value and deep_link_sub1-10, seperti yang diharapkan oleh aplikasi Anda.
  • Parameter harus ditambahkan sebagai parameter kueri.
    • Contoh: https://onelink-basic-app.onelink.me/H5hv?deep_link_value=apples&deep_link_sub1=23

Perform the test

  1. Klik tautan di perangkat Anda.
  2. OneLink mengarahkan Anda sesuai dengan pengaturan tautan, baik ke Google Play atau situs web.
  3. Instal aplikasi.

    Penting

    • Jika aplikasi masih dalam pengembangan dan belum diunggah ke toko, gambar berikut akan ditampilkan:
      drawing
    • Instal aplikasi dari Android Studio atau IDE lain yang Anda gunakan.
  4. UDL mendeteksi penautan dalam yang ditangguhkan, mencocokkan penginstalan dengan klik, dan mengambil parameter OneLink ke onDeepLinking callback. UDL tidak akan menemukan parameter apa pun untuk mengarahkan dan keluar .
  5. onConversionDataSuccess callback dipanggil dengan data konversi, yang menyimpan parameter khusus dan data atribusi.
  6. onConversionDataSuccess mengatur parameter khusus untuk mengarahkan pengguna di dalam aplikasi.

Expected logs results

📘

Log berikut hanya tersedia bila mode debug diaktifkan.

  • SDK diinisialisasi:

    D/AppsFlyer_6.9.0: Initializing AppsFlyer SDK: (v6.9.0.126)
    
  • Log berikut mengacu pada deep linking langsung, dan dapat diabaikan dalam skenario deferred deep linking:

    D/AppsFlyer_6.9.0: No deep link detected
    
  • UDL API mulai:

    D/AppsFlyer_6.9.0: [DDL] start
    
  • UDL mengirimkan kueri ke AppsFlyer untuk menanyakan kecocokan dengan penginstalan ini:

    D/AppsFlyer_6.9.0: [DDL] Preparing request 1
    ...
    I/AppsFlyer_6.9.0: call = https://dlsdk.appsflyer.com/v1.0/android/com.appsflyer.onelink.appsflyeronelinkbasicapp?af_sig=<>&sdk_version=6.9; size = 239 bytes; body = {
          ...
          TRUNCATED
          ...
    }
    
  • UDL mendapat tanggapan dan panggilan onDeepLinking callback dengan status=FOUND dan data tautan OneLink:

    D/AppsFlyer_6.9.0: [DDL] Calling onDeepLinking with:
      {"deepLink":"{\"campaign_id\":\"\",\"af_sub3\":\"\",\"match_type\":\"probabilistic\",\"af_sub1\":\"\",\"deep_link_value\":\"\",\"campaign\":\"\",\"af_sub4\":\"\",\"timestamp\":\"2022-12-07T09:32:52.256\",\"click_http_referrer\":\"\",\"af_sub5\":\"\",\"media_source\":\"\",\"af_sub2\":\"\",\"is_deferred\":true}","status":"FOUND"}
    
  • GCD sedang mengambil data konversi:

GET:https://gcdsdk.appsflyer.com/install_data/v4.0/com.appsflyer.onelink.appsflyeronelinkbasicapp?devkey=XXXXXXXXX&device_id=1670405582645-822555416155480367
  • onConversionDataSuccess dipanggil dengan data konversi sebagai input:
 D/AppsFlyer_6.9.0: [GCD-A02] Calling onConversionDataSuccess with:
    {
        ...
        is_first_launch=true, 
        ...
        fruit_amount=56,
        fruit_name=apples, 
        ...
        af_status=Non-organic,
        ...
    }