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
meskipun pemasangan yang relevan terjadi. - Saat UDL kembali
FOUND
tetapi data deep linking tidak memiliki parameter, yang tidakdeep_link_value
anddeep_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
ordeep_link_sub1-10
digunakan untuk deep-linking, misalnya tautan lama yang dibuat sebelumnyadeep_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
- Menerapkan Unified Deep Linking untuk menangani deferred deep linking dan deep linking langsung.
- Terapkan
onConversionDataSuccess
untuk menangani deferred deep linking menggunakan API GCD .
Penerapan
onConversionDataSuccess
harus mendeteksi kasus di mana deferred deep linking harus terjadi yang tidak ditangani oleh UDL.Lihat diseksi kode terperinci
onConversionDataSuccess
harus merutekan pengguna ke tujuan deferred deep linking berdasarkan parameter deep linking yang diteruskan ke callback.
Contoh kode
Code dissect
- Terapkan delegasi API Get Conversion Data
AppsFlyerLibDelegate
.Terapkan saja
onConversionDataSuccess
andonConversionDataFail
.
MetodeonAppOpenAttribution
andonAttributionFailure
saling eksklusif dengan UDL, dan tidak akan dipanggil. - Deteksi skenario deferred deep linking dengan memfilter payload data konversi dengan:
af_status == Non-organic
is_first_launch == true
- Saat deferred deep linking terdeteksi, filter kasus yang sudah ditangani oleh UDL.
Dalam contoh berikut, semua tautan berisideep_link_value
.
UDL disarankan untuk memberi sinyal dengan tanda bahwa deferred deep linking telah ditangani, danonConversionDataSuccess
harus dilewati. onConversionDataSuccess
harus memverifikasi data konversi menyimpan parameter yang digunakan untuk merutekan pengguna di dalam aplikasi. Contohnyafruit_name
dalam contoh berikut.- 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
anddeep_link_sub1-10
parameter.
Skenario pengujian ini juga relevan untuk semua deferred deep linking yang diperluas, dijelaskan sebelumnya .
Before you begin
- Selesaikan implementasi yang dijelaskan sebelumnya.
- Daftarkan perangkat pengujian Anda .
- Aktifkan mode debug di aplikasi.
- Pastikan aplikasi tidak terpasang di perangkat Anda.
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
anddeep_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
- Contoh:
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:
- Instal aplikasi dari Xcode atau IDE lain yang Anda gunakan.
- Jika aplikasi masih dalam pengembangan dan belum diunggah ke toko, gambar berikut akan ditampilkan:
- 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 denganstatus=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,
...
}
Diperbarui sekitar 1 bulan yang lalu