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 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.
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 pendengar Get Conversion Data API
AppsFlyerConversionListener
.Semua metode pendengar harus dilaksanakan, meskipun
onAppOpenAttribution
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 sudah 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
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
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.
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, baik ke Google Play atau situs web.
- Instal aplikasi.
Penting
- Jika aplikasi masih dalam pengembangan dan belum diunggah ke toko, gambar berikut akan ditampilkan:
- Instal aplikasi dari Android Studio 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
onDeepLinking
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 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 denganstatus=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,
...
}
Diperbarui 9 bulan yang lalu