Direct deep linking

Overview

Deep linking langsung mengarahkan pengguna seluler ke aktivitas atau konten tertentu di aplikasi, saat aplikasi sudah diinstal.

Perutean dalam aplikasi ke aktivitas tertentu dalam aplikasi ini dimungkinkan karena parameter diteruskan ke aplikasi saat OS membuka aplikasi dan onAppOpenAttribution method is called. AppsFlyer's OneLink ensures that the correct value is passed along with the user's click, thus personalizing the user’s app experience.

Only the deep_link_value is required for deep linking. However, other parameters and values (such as custom attribution parameters) can also be added to the link and returned by the SDK as deep linking data.

Alur deep linking langsung berfungsi sebagai berikut :
Direct Deep Linking flow

  1. Pengguna mengklik URL pendek OneLink.

  2. iOS membaca Kepemilikan Domain Terkait aplikasi.

  3. iOS membuka aplikasi.

  4. SDK AppsFlyer dipicu di aplikasi.

  5. SDK AppsFlyer mengambil data OneLink.

    • Dalam URL pendek, data diambil dari API penyelesai URL pendek di server AppsFlyer.
    • Di URL yang panjang, data diambil langsung dari URL yang panjang.
  6. AppsFlyer SDK triggers onAppOpenAttribution() with the retrieved parameters and cached attribution parameters (e.g.install_time).

  7. Asynchronously, onConversionDataSuccess() is called, holding the full cached attribution data. (You can exit this function by checking if is_first_launch is true.)

  8. onAppOpenAttribution() menggunakan attributionData peta untuk mengirimkan aktivitas lain di aplikasi dan meneruskan data yang relevan.

    • Ini menciptakan pengalaman yang dipersonalisasi bagi pengguna, yang merupakan tujuan utama OneLink.

Procedures

To implement the onAppOpenAttribution metode dan mengatur perilaku parameter, daftar periksa tindakan berikut dari prosedur harus diselesaikan.

Daftar periksa prosedur

  1. Memutuskan perilaku aplikasi dan deep_link_value (and other parameter names and values) - with the marketer
  2. Input metode perencanaan, yaitu deep_link_value (and other parameter names and values) - with the marketer
  3. Menerapkan onAppOpenAttribution() logic
  4. Menerapkan onAttributionFailure() logic

Menentukan perilaku aplikasi

Untuk menentukan perilaku aplikasi saat tautan diklik :

Dapatkan dari pemasar: Perilaku yang diharapkan dari tautan saat diklik.

Input metode perencanaan

When a OneLink is clicked and the user has the app installed on their device, the onAppOpenAttribution method is called by the AppsFlyer SDK. This is referred to as a retargeting re-engagement.

The onAppOpenAttribution metode mendapatkan variabel sebagai masukan seperti ini: AnyHashable: Any.
Struktur data masukan dijelaskan di sini.

Menerapkan logika onAppOpenAttribution()

The deep link opens the onAppOpenAttribution metode dalam kegiatan utama. Parameter OneLink dalam input metode digunakan untuk mengimplementasikan pengalaman pengguna tertentu saat aplikasi dibuka.

Contoh Kode:

func onAppOpenAttribution(_ attributionData: [AnyHashable: Any]) {
    //Handle Deep Link Data
    print("onAppOpenAttribution data:")
    for (key, value) in attributionData {
        print(key, ":",value)
    }
    walkToSceneWithParams(params: attributionData)
}

// User logic
fileprivate func walkToSceneWithParams(params: [AnyHashable:Any]) {
    let storyBoard: UIStoryboard = UIStoryboard(name: "Main", bundle: nil)
    UIApplication.shared.windows.first?.rootViewController?.dismiss(animated: true, completion: nil)

    var fruitNameStr = ""

    if let thisFruitName = params["deep_link_value"] as? String {
        fruitNameStr = thisFruitName
    } else if let linkParam = params["link"] as? String {
        guard let url = URLComponents(string: linkParam) else {
            print("Could not extract query params from link")
            return
        }
        if let thisFruitName = url.queryItems?.first(where: { $0.name == "deep_link_value" })?.value {
            fruitNameStr = thisFruitName
        }
    }

    let destVC = fruitNameStr + "_vc"
    if let newVC = storyBoard.instantiateVC(withIdentifier: destVC) {

        print("AppsFlyer routing to section: \(destVC)")
        newVC.attributionData = params

        UIApplication.shared.windows.first?.rootViewController?.present(newVC, animated: true, completion: nil)
    } else {
        print("AppsFlyer: could not find section: \(destVC)")
    }
}

⇲ Tautan Github Swift

Menerapkan logika onAttributionFailure()

The onAttributionFailure method is called whenever the call to onAppOpenAttribution fails. The function should report the error and create an expected experience for the user.

func onAppOpenAttributionFailure(_ error: Error) {
    print("\(error)")
}

⇲ Tautan Github Swift

Deferred Deep Linking

❗️

Penting

Deferred deep linking yang menggunakan metode lawas onConversionDataSuccess mungkin tidak berfungsi untuk iOS 14.5+, karena memerlukan data atribusi yang mungkin tidak tersedia karena perlindungan privasi.
Sebaiknya gunakan deep linking terpadu (UDL). UDL sesuai dengan standar privasi iOS 14.5+ dan hanya mengembalikan parameter yang relevan dengan deep linking dan deferred deep linking: deep_link_value and deep_link_sub1-10. Parameter atribusi (seperti misalnya media_source, campaign, af_sub1-5, dll.), kembali null dan tidak dapat digunakan untuk tujuan deep linking.
Pelajari lebih lanjut

Overview

Deferred deep linking mengarahkan pengguna baru terlebih dahulu ke toko aplikasi yang benar untuk menginstal aplikasi, dan kemudian, setelah pembukaan pertama, ke pengalaman aplikasi tertentu (misalnya halaman tertentu di aplikasi).

When the user first launches the app, the onConversionDataSuccess callback function receives both the conversion data of the new user, and OneLink data. The OneLink data makes in-app routing possible due to the deep_link_value atau lainnya yang diteruskan ke aplikasi saat OS membuka aplikasi.

Only the deep_link_value is required for deep linking. However, other parameters and values (such as custom attribution parameters) can also be added to the link and returned by the SDK as deep linking data. The AppsFlyer OneLink ensures that the correct parameters are passed along with the user's click, thus personalizing the user’s app experience.

The marketer and developer must coordinate regarding desired app behavior and deep_link_value. The marketer uses the parameters to create deep links, and the developer customizes the behavior of the app based on the value received.

Programmer bertanggung jawab untuk memastikan parameter ditangani dengan benar di aplikasi, baik untuk perutean dalam aplikasi dan mempersonalisasi data di tautan.

Alur deferred deep linking berfungsi sebagai berikut:
Deferred Deep Linking flow!

  1. Pengguna mengklik OneLink di perangkat yang tidak menginstal aplikasi.
  2. AppsFlyer mendaftarkan klik dan mengarahkan pengguna ke app store atau halaman arahan yang benar.
  3. Pengguna menginstal aplikasi dan meluncurkannya.
  4. SDK AppsFlyer diinisialisasi dan pemasangan diatribusikan di server AppsFlyer.
  5. The SDK triggers the onConversionDataSuccess method. The function receives input that includes both the deep_link_value, and the attribution data/parameters defined in the OneLink data.
  6. Parameter is_first_launch has the value true, yang menandakan alur deferred deep link.
    Pengembang menggunakan data yang didapatkan di onConversionDataSuccess berfungsi untuk menciptakan pengalaman yang dipersonalisasi bagi pengguna untuk peluncuran pertama aplikasi.

Procedures

To implement the onConversionDataSuccess method and set up the parameter behaviors, the following action checklist of procedures need to be completed.

  1. Memutuskan perilaku aplikasi pada peluncuran pertama, dan deep_link_value (and other parameter names and values) - with the marketer
  2. Input metode perencanaan, yaitu deep_link_value (and other parameter names and values) - with the marketer
  3. Menerapkan onConversionDataSuccess() logic
  4. Menerapkan onConversionDataFail() logic

Menentukan perilaku aplikasi pada peluncuran pertama

Menentukan perilaku aplikasi pada peluncuran pertama:

Dapatkan dari pemasar: Perilaku tautan yang diharapkan saat diklik dan aplikasi dibuka untuk pertama kalinya.

Input metode perencanaan

For deferred deep linking, the onConversionDataSuccess method input must be planned and the input decided in the previous section (for deep linking) is made relevant for the first time the app is launched.

The onConversionDataSuccess method gets the deep_link_value dan variabel lainnya sebagai masukan seperti ini: AnyHashable: Any.

Peta menyimpan dua jenis data:

  • Data atribusi
  • Data defined by the marketer in the link (deep_link_value and other parameters and values)
    Other parameters can be either:
    • Parameter resmi AppsFlyer.
    • Parameter dan nilai khusus yang dipilih oleh pemasar dan programmer.
    • Struktur data input dijelaskan di sini .

The marketer and developers need to plan the deep_link_value (and other possible parameters and values) together based on the desired app behavior when the link is clicked.

To plan the deep_link_value, and other parameter names and values based on the expected link behavior:

  1. Beri tahu pemasar parameter dan nilai apa yang diperlukan untuk menerapkan perilaku aplikasi yang diinginkan.
  2. Decide on naming conventions for the deep_link_value and other parameters and values.
    Note:
    • Parameter kustom tidak akan muncul dalam data lengkap yang dikumpulkan di AppsFlyer.
    • Data konversi tidak akan mengembalikan parameter kustom yang disebut "nama, " dengan huruf kecil "n".

Menerapkan logika onConversionDataSuccess()

When the app is opened for the first time, the onConversionDataSuccess method is triggered in the main activity. The deep_link_value and other parameters in the method input are used to implement the specific user experience when the app is first launched.

Untuk menerapkan logika :

  1. Menerapkan logika berdasarkan parameter dan nilai yang dipilih. Lihat contoh kode berikut.
  2. Setelah selesai, kirim konfirmasi ke pemasar bahwa aplikasi berperilaku sesuai.

Kode sampel

// Handle Organic/Non-organic installation
func onConversionDataSuccess(_ data: [AnyHashable: Any]) {

    print("onConversionDataSuccess data:")
    for (key, value) in data {
        print(key, ":", value)
    }

    if let status = data["af_status"] as? String {
        if (status == "Non-organic") {
            if let sourceID = data["media_source"],
                let campaign = data["campaign"] {
                print("This is a Non-Organic install. Media source: \(sourceID)  Campaign: \(campaign)")
            }
        } else {
            print("This is an organic install.")
        }
        if let is_first_launch = data["is_first_launch"] as? Bool,
            is_first_launch {
            print("First Launch")
            if let fruit_name = data["deep_link_value"]
            {
                // The key 'deep_link_value' exists only in OneLink originated installs
                print("deferred deep-linking to \(fruit_name)")
                walkToSceneWithParams(params: data)
            }
            else {
                print("Install from a non-owned media")
            }
        } else {
            print("Not First Launch")
        }
    }
}

⇲ Tautan Github Swift

Menerapkan logika onConversionDataFailure()

The onConversionDataFailure method is called whenever the call to onConversionDataSuccess fails. The function should report the error and create an expected experience for the user.

To implement the onConversionDataFailure metode :

func onConversionDataFail(_ error: Error) {
    print("\(error)")
}

⇲ Tautan Github Swift

Payload sampel iOS

Lihat contoh payload berikut untuk Tautan Universal, skema URI, dan deferred deep linking. Sampel berisi payload penuh, relevan ketika semua parameter di halaman pengaturann tautan kustom Onelink berisi data.

Catatan : Payload kembali sebagai peta. Namun, untuk kejelasan, contoh payload berikut ditampilkan dalam bentuk JSON.

Universal Links

Input ke onAppOpenAttribution(_ attributionData: [AnyHashable: Any])

{
   "af_ad": "my_adname",
   "af_adset": "my_adset",
   "af_android_url": "https://isitchristmas.com/",
   "af_channel": "my_channel",
   "af_click_lookback": "20d",
   "af_cost_currency": "USD",
   "af_cost_value": 6,
   "af_dp": "afbasicapp://mainactivity",
   "af_ios_url": "https://isitchristmas.com/",
   "af_sub1": "my_sub1",
   "af_sub2": "my_sub2",
   "c": "fruit_of_the_month",
   "campaign": "fruit_of_the_month",
   "fruit_amount": 26,
   "fruit_name": "apples",
   "is_retargeting": true,
   "link": "https://onelink-basic-app.onelink.me/H5hv/6d66214a",
   "media_source": "Email",
   "pid": "Email"
}
{
   "path": "/H5hv",
   "af_android_url": "https://my_android_lp.com",
   "af_channel": "my_channel",
   "host": "onelink-basic-app.onelink.me",
   "af_adset": "my_adset",
   "pid": "Email",
   "scheme": "https",
   "af_dp": "afbasicapp://mainactivity",
   "af_sub1": "my_sub1",
   "fruit_name": "apples",
   "af_ad": "my_adname",
   "af_click_lookback": "20d",
   "fruit_amount": 16,
   "af_sub2": "my_sub2",
   "link": "https://onelink-basic-app.onelink.me/H5hv?pid=Email&c=fruit_of_the_month&af_channel=my_channel&af_adset=my_adset&af_ad=my_adname&af_sub1=my_sub1&af_sub2=my_sub2&fruit_name=apples&fruit_amount=16&af_cost_currency=USD&af_cost_value=6&af_click_lookback=20d&af_dp=afbasicapp%3A%2F%2Fmainactivity&af_ios_url=https%3A%2F%2Fmy_ios_lp.com&af_android_url=https%3A%2F%2Fmy_android_lp.com",
   "af_cost_currency": "USD",
   "c": "fruit_of_the_month",
   "af_ios_url": "https://my_ios_lp.com",
   "af_cost_value": 6
}

URI scheme

Input ke onAppOpenAttribution(_ attributionData: [AnyHashable: Any])

{
  "af_click_lookback ": "25d",
  "af_sub1 ": "my_sub1",
  "shortlink ": "9270d092",
  "af_deeplink ": true,
  "media_source ": "Email",
  "campaign ": "my_campaign",
  "af_cost_currency ": "NZD",
  "host ": "mainactivity",
  "af_ios_url ": "https://my_ios_lp.com",
  "scheme ": "afbasicapp",
  "path ": "",
  "af_cost_value ": 5,
  "af_adset ": "my_adset",
  "af_ad ": "my_adname",
  "af_android_url ": "https://my_android_lp.com",
  "af_sub2 ": "my_sub2",
  "af_force_deeplink ": true,
  "fruit_amount ": 15,
  "af_dp ": "afbasicapp://mainactivity",
  "link ": "afbasicapp://mainactivity?af_ad=my_adname&af_adset=my_adset&af_android_url=https%3A%2F%2Fmy_android_lp.com&af_channel=my_channel&af_click_lookback=25d&af_cost_currency=NZD&af_cost_value=5&af_deeplink=true&af_dp=afbasicapp%3A%2F%2Fmainactivity&af_force_deeplink=true&af_ios_url=https%3A%2F%2Fmy_ios_lp.com&af_sub1=my_sub1&af_sub2=my_sub2&af_web_id=56441f02-377b-47c6-9648-7a7f88268130-o&campaign=my_campaign&fruit_amount=15&fruit_name=apples&is_retargeting=true&media_source=Email&shortlink=9270d092",
  "af_channel ": "my_channel",
  "is_retargeting ": true,
  "af_web_id ": "56441f02-377b-47c6-9648-7a7f88268130-o",
  "fruit_name ": "apples"
}
{
  "af_ad ": "my_adname",
  "fruit_name ": "apples",
  "host ": "mainactivity",
  "af_channel ": "my_channel",
  "link ": "afbasicapp://mainactivity?af_ad=my_adname&af_adset=my_adset&af_android_url=https%3A%2F%2Fmy_android_lp.com&af_channel=my_channel&af_click_lookback=25d&af_cost_currency=NZD&af_cost_value=5&af_deeplink=true&af_dp=afbasicapp%3A%2F%2Fmainactivity&af_force_deeplink=true&af_ios_url=https%3A%2F%2Fmy_ios_lp.com&af_sub1=my_sub1&af_sub2=my_sub2&af_web_id=56441f02-377b-47c6-9648-7a7f88268130-o&campaign=my_campaign&fruit_amount=15&fruit_name=apples&is_retargeting=true&media_source=Email",
  "af_deeplink ": true,
  "campaign ": "my_campaign",
  "af_sub1 ": "my_sub1",
  "af_click_lookback ": "25d",
  "af_web_id ": "56441f02-377b-47c6-9648-7a7f88268130-o",
  "path ": "",
  "af_sub2 ": "my_sub2",
  "af_ios_url ": "https://my_ios_lp.com",
  "af_cost_value ": 5,
  "fruit_amount ": 15,
  "is_retargeting ": true,
  "scheme ": "afbasicapp",
  "af_force_deeplink ": true,
  "af_adset ": "my_adset",
  "media_source ": "Email",
  "af_cost_currency ": "NZD",
  "af_dp ": "afbasicapp://mainactivity",
  "af_android_url ": "https://my_android_lp.com"
}

Deferred deep linking

Input ke onConversionDataSuccess(_ data: [AnyHashable: Any])

{
  "adgroup": null,
  "adgroup_id": null,
  "adset": null,
  "adset_id": null,
  "af_ad": "my_adname",
  "af_adset": "my_adset",
  "af_android_url": "https://isitchristmas.com/",
  "af_channel": "my_channel",
  "af_click_lookback": "20d",
  "af_cost_currency": "USD",
  "af_cost_value": 6,
  "af_cpi": null,
  "af_dp": "afbasicapp://mainactivity",
  "af_ios_url": "https://isitchristmas.com/",
  "af_siteid": null,
  "af_status": "Non-organic",
  "af_sub1": "my_sub1",
  "af_sub2": "my_sub2",
  "af_sub3": null,
  "af_sub4": null,
  "af_sub5": null,
  "agency": null,
  "campaign": "fruit_of_the_month ",
  "campaign_id": null,
  "click_time": "2020-08-12 15:08:00.770",
  "cost_cents_USD": 600,
  "engmnt_source": null,
  "esp_name": null,
  "fruit_amount": 26,
  "fruit_name": "apples",
  "http_referrer": null,
  "install_time": "2020-08-12 15:08:33.335",
  "is_branded_link": null,
  "is_first_launch": 1,
  "is_retargeting": true,
  "is_universal_link": null,
  "iscache": 1,
  "match_type": "probabilistic",
  "media_source": "Email",
  "orig_cost": "6.0",
  "redirect_response_data": null,
  "retargeting_conversion_type": "none",
  "shortlink": "6d66214a"
}