deferred deep linking yang diperluas di iOS

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.
    • Waktu antara klik dan penginstalan melebihi lookback window UDL (15 menit).

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 delegasi API Get Conversion Data AppsFlyerLibDelegate.

    Terapkan saja onConversionDataSuccess and onConversionDataFail.
    Metode 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 telah 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

extension AppDelegate: AppsFlyerLibDelegate {
     
    // Handle Organic/Non-organic installation
    func onConversionDataSuccess(_ data: [AnyHashable: Any]) {
        ConversionData = data
        print("onConversionDataSuccess data:")
        for (key, value) in data {
            print(key, ":", value)
        }
        if let conversionData = data as NSDictionary? as! [String:Any]? {
        
            if let status = conversionData["af_status"] as? String {
                if (status == "Non-organic") {
                    if let sourceID = conversionData["media_source"],
                        let campaign = conversionData["campaign"] {
                        NSLog("[AFSDK] This is a Non-Organic install. Media source: \(sourceID)  Campaign: \(campaign)")
                    }
                } else {
                    NSLog("[AFSDK] This is an organic install.")
                }
                
                if let is_first_launch = conversionData["is_first_launch"] as? Bool,
                    is_first_launch {
                    NSLog("[AFSDK] First Launch")
                    if !conversionData.keys.contains("deep_link_value") && conversionData.keys.contains("fruit_name"){
                        switch conversionData["fruit_name"] {
                            case let fruitNameStr as String:
                            NSLog("This is a deferred deep link opened using conversion data")
                            walkToSceneWithParams(fruitName: fruitNameStr, deepLinkData: conversionData)
                            default:
                                NSLog("Could not extract deep_link_value or fruit_name from deep link object using conversion data")
                                return
                        }
                    }
                } else {
                    NSLog("[AFSDK] Not First Launch")
                }
            }
        }
    }
    
    func onConversionDataFail(_ error: Error) {
        NSLog("[AFSDK] \(error)")
    }
}

⇲ Tautan Github Swift

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

The 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

  • Klik tautan di perangkat Anda.
  • OneLink mengarahkan Anda sesuai dengan pengaturan tautan untuk menghapus App Store atau situs web.
  • Instal aplikasi.

    Penting

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

Expected logs results

📘

Log berikut hanya tersedia ketika [mode debug diaktifkan].(https://id.dev.appsflyer.com/hc/docs/integrate-ios-sdk#enabling-debug-mode)

  • SDK diinisialisasi:

    [AppsFlyerSDK] [com.apple.main-thread] AppsFlyer SDK version 6.6.0 started build 
    
  • UDL API mulai:

    [AppsFlyerSDK] [com.appsflyer.serial] [DDL] Start DDL
    
  • UDL mengirimkan kueri ke layanan AppsFlyer untuk menanyakan kecocokan dengan penginstalan ini:

    [AppsFlyerSDK] [com.appsflyer.serial] [DDL] URL: https://dlsdk.appsflyer.com/v1.0/ios/id1512793879?sdk_version=6.6&af_sig=c9a1d5b34d68e584d0db2a20f4049fb7cd2e785c3383bXXXXXXXXXXXXXXXXXXXXXXXX
    
  • UDL mendapat tanggapan dan panggilan didResolveDeepLink callback dengan status=FOUND dan data tautan OneLink:

    [AppsFlyerSDK] [com.appsflyer.serial] [DDL] Calling didResolveDeepLink with: {"af_sub4":"","click_http_referrer":"","af_sub1":"","click_event":{"af_sub4":"","click_http_referrer":"","af_sub1":"","af_sub3":"","deep_link_value":"","campaign":"","match_type":"probabilistic","af_sub5":"","campaign_id":"","media_source":"","af_sub2":""},"af_sub3":"","deep_link_value":"","campaign":"","match_type":"probabilistic","af_sub5":"","media_source":"","campaign_id":"","af_sub2":""}
    
  • GCD sedang mengambil data konversi:

[AppsFlyerSDK] [com.appsflyer.serial] [GCD-B01] GCD 4.0 URL: https://gcdsdk.appsflyer.com/install_data/v4.0/id1512793879?devkey=s*****4&device_id=1672050642148-9221195
  • onConversionDataSuccess dipanggil dengan data konversi sebagai input:
[AppsFlyerSDK] [com.appsflyer.serial] [GCD-A02] -[basic_app.AppDelegate onConversionDataSuccess:]:
    {
        ...
        is_first_launch=true, 
        ...
        fruit_amount=56,
        fruit_name=apples, 
        ...
        af_status=Non-organic,
        ...
    }