Deep Linking Terpadu Android
Sekilas: Tautan langsung terpadu/Unified deep linking (UDL) memungkinkan Anda untuk mengirim pengguna yang sudah ada dan yang baru ke aktivitas in-app tertentu (misalnya, laman tertentu di dalam aplikasi) segera setelah aplikasi dibuka.
Perlindungan privasi UDL
For new users, the UDL method only returns parameters relevant to deferred deep linking:
deep_link_value
anddeep_link_sub1-10
. If you try to get any other parameters (media_source
,campaign
,af_sub1-5
, dll.), mereka kembali ke null.
Alur
Alur kerjanya adalah sebagai berikut:
- Pengguna mengklik tautan OneLink.
- Jika pengguna telah menginstal aplikasi, Tautan Aplikasi Android atau skema URI akan membuka aplikasi.
- Jika pengguna tidak menginstal aplikasi, mereka diarahkan ke app store, dan setelah mengunduh, pengguna membuka aplikasi.
- Pembukaan aplikasi memicu SDK AppsFlyer.
- SDK AppsFlyer menjalankan API UDL.
- API UDL mengambil data OneLink dari server AppsFlyer.
- The UDL API calls back the
onDeepLinking()
metode dalamDeepLinkingListener
class. - The
onDeepLinking()
method gets aDeepLinkResult
object. - The
DeepLinkResult
object includes:- Status (Ditemukan/Tidak Ditemukan/Kesalahan (error))
- A
DeepLink
object that carries thedeep_link_value
anddeep_link_sub1-10
parameter, yang digunakan pengembang untuk mengarahkan pengguna ke aktivitas dalam aplikasi tertentu, yang merupakan tujuan utama OneLink.
Perencanaan
- UDL mewajibkan SDK AppsFlyer Android V6.1+.
Saat mengatur OneLinks, pemasar menggunakan parameter untuk membuat tautan, dan programmer menyesuaikan perilaku aplikasi berdasarkan nilai yang diterima. Programmer bertanggung jawab untuk memastikan parameter ditangani dengan benar di aplikasi, baik untuk perutean dalam aplikasi dan mempersonalisasi data pada tautan.
Untuk merencanakan OneLink:
- Dapatkan dari pemasar perilaku dan pengalaman pribadi yang diinginkan pengguna saat mereka mengklik URL.
- Based on the desired behavior, plan the
deep_link_value
and other parameters that are needed to give the user the desired personal experience.- The
deep_link_value
is set by the marketer in the URL and used by the developer to redirect the user to a specific place inside the app. For example, if you have a fruit store and want to direct users to apples, the value ofdeep_link_value
can beapples
. - The
deep_link_sub1-10
parameters can also be added to the URL to help personalize the user experience. For example, to give a 10% discount, the value ofdeep_link_sub1
can be10
.
- The
Penerapan
Let's save you some time >>
Set Deep Linking with our SDK integration wizard
Menerapkan logika API UDL berdasarkan parameter dan nilai yang dipilih.
- Gunakan
subscribeForDeepLink()
metode (dariAppsFlyerLib
), before calling start, to register theDeepLinkListener
pendengar antarmuka. - Pastikan Anda mengganti fungsi callback
onDeepLinking()
.
onDeepLinking()
menerima sebagai argumenDeepLinkResult
object. - Use
getStatus()
to query whether the deep linking match is found. - For when the status is an error, call
getError()
and run your error flow. - For when the status is found, use
getDeepLink()
to retrieve theDeepLink
object.
TheDeepLink
Objek berisi informasi deep linking dan fungsi asisten untuk mengambil nilai dengan mudah dari kode OneLink yang dikenal, misalnya,getDeepLinkValue()
. - Use
getDeepLinkValue()
to retrieve thedeep_link_value
. - Use
getStringValue("deep_link_sub1")
to retrievedeep_link_sub1
. Do the same fordeep_link_sub2-10
parameters, changing the string value as required. - Once
deep_link_value
anddeep_link_sub1-10
are retrieved, pass them to an in-app router and use them to personalize the user experience.
Catatan
onDeepLinking
tidak dipanggil saat aplikasi berjalan di latar belakang dan Application LaunchMode tidak standar.
Untuk memperbaikinya, hubungisetIntent(intent)
metode untuk mengatur nilai maksud di dalam metode yang digantionNewIntent
jika aplikasi menggunakan LaunchMode non-standar.import android.content.Intent; ... ... ... @Override protected void onNewIntent(Intent intent) { super.onNewIntent(intent); setIntent(intent); }
Supporting legacy OneLink links
Legacy OneLink merupakan tautan yang tidak berisi parameter yang direkomendasikan untuk UDL: deep_link_value
and deep_link_sub1-10
.
Biasanya ini adalah tautan yang sudah ada dan sedang digunakan saat bermigrasi dari metode lama ke UDL.
Pengguna berita yang menggunakan tautan lama ditangani oleh onConversionDataSuccess
dalam konteks Deferred Deep Linking yang Diperluas.
UDL menangani deep linking untuk pengguna yang sudah ada. Dalam hal ini, disarankan untuk menambahkan dukungan di callback UDL onDeepLinking
untuk parameter lama.
Contoh kode Java
Code example
appsflyer.subscribForDeepLink(new DeepLinkListen
@Override
public void onDeepLinking(@NonNull DeepLinkResult deepLinkResult) {
DeepLinkResult.Status dlStatus = deepLinkResult.getStatus();
if (dlStatus == DeepLinkResult.Status.FOUND) {
Log.d(LOG_TAG, "Deep link found");
} else if (dlStatus == DeepLinkResult.Status.NOT_FOUND) {
Log.d(LOG_TAG, "Deep link not found");
return;
} else {
// dlStatus == DeepLinkResult.Status.ERROR
DeepLinkResult.Error dlError = deepLinkResult.getError();
Log.d(LOG_TAG, "There was an error getting Deep Link data: " + dlError.toString());
return;
}
DeepLink deepLinkObj = deepLinkResult.getDeepLink();
try {
Log.d(LOG_TAG, "The DeepLink data is: " + deepLinkObj.toString());
} catch (Exception e) {
Log.d(LOG_TAG, "DeepLink data came back null");
return;
}
// An example for using is_deferred
if (deepLinkObj.isDeferred()) {
Log.d(LOG_TAG, "This is a deferred deep link");
} else {
Log.d(LOG_TAG, "This is a direct deep link");
}
// ** Next if statement is optional **
// Our sample app's user-invite carries the referrerID in deep_link_sub2
// See the user-invite section in FruitActivity.java
if (dlData.has("deep_link_sub2")){
referrerId = deepLinkObj.getStringValue("deep_link_sub2");
Log.d(LOG_TAG, "The referrerID is: " + referrerId);
} else {
Log.d(LOG_TAG, "deep_link_sub2/Referrer ID not found");
}
// An example for using a generic getter
String fruitName = "";
try {
fruitName = deepLinkObj.getDeepLinkValue();
Log.d(LOG_TAG, "The DeepLink will route to: " + fruitName);
} catch (Exception e) {
Log.d(LOG_TAG, "Custom param fruit_name was not found in DeepLink data");
return;
}
goToFruit(fruitName, deepLinkObj);
}
});
AppsFlyerLib.getInstance().subscribeForDeepLink(object : DeepLinkListener{
override fun onDeepLinking(deepLinkResult: DeepLinkResult) {
when (deepLinkResult.status) {
DeepLinkResult.Status.FOUND -> {
Log.d(
LOG_TAG,"Deep link found"
)
}
DeepLinkResult.Status.NOT_FOUND -> {
Log.d(
LOG_TAG,"Deep link not found"
)
return
}
else -> {
// dlStatus == DeepLinkResult.Status.ERROR
val dlError = deepLinkResult.error
Log.d(
LOG_TAG,"There was an error getting Deep Link data: $dlError"
)
return
}
}
var deepLinkObj: DeepLink = deepLinkResult.deepLink
try {
Log.d(
LOG_TAG,"The DeepLink data is: $deepLinkObj"
)
} catch (e: Exception) {
Log.d(
LOG_TAG,"DeepLink data came back null"
)
return
}
// An example for using is_deferred
if (deepLinkObj.isDeferred == true) {
Log.d(LOG_TAG, "This is a deferred deep link");
} else {
Log.d(LOG_TAG, "This is a direct deep link");
}
try {
val fruitName = deepLinkObj.deepLinkValue
Log.d(LOG_TAG, "The DeepLink will route to: $fruitName")
} catch (e:Exception) {
Log.d(LOG_TAG, "There's been an error: $e");
return;
}
}
})
⇲ Tautan Github: Java
Menguji deferred deep linking
Prerequisites
- Selesaikan integrasi UDL
- Daftarkan perangkat pengujian Anda
- Aktifkan mode debug di aplikasi
- Pastikan aplikasi tidak terpasang di perangkat Anda
- Minta pemasar Anda untuk templat OneLink.
- Ini akan terlihat seperti ini:
https://onelink-basic-app.onelink.me/H5hv
. - Contoh ini menggunakan subdomain OneLink
onelink-basic-app.onelink.me
dan ID templat OneLinkH5hv
- Ini akan terlihat seperti ini:
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 yang ada
- Gunakan hanya domain dan templat OneLink dari tautan Anda, misalnya:
https://onelink-basic-app.onelink.me/H5hv
. - Tambahkan parameter OneLink
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?pid=my_media_source&deep_link_value=apples&deep_link_sub1=23
- Contoh:
Perform the test
- Klik tautan di perangkat Anda.
- OneLink mengarahkan Anda sesuai dengan pengaturan tautan, antara ke Google Play atau situs web.
- Instal aplikasi.
Penting
- Jika aplikasi masih dalam pengembangan, dan belum diunggah ke toko, Anda akan melihat gambar ini:
- Instal aplikasi dari Android Studio atau IDE lain yang Anda gunakan.
- Jika aplikasi masih dalam pengembangan, dan belum diunggah ke toko, Anda akan melihat gambar ini:
- UDL mendeteksi deferred deep linking, mencocokkan penginstalan dengan klik, dan mengambil parameter OneLink ke
onDeepLinking
callback.
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\":\"apples\",\"campaign\":\"\",\"af_sub4\":\"\",\"timestamp\":\"2022-12-06T11:47:40.037\",\"click_http_referrer\":\"\",\"af_sub5\":\"\",\"media_source\":\"\",\"af_sub2\":\"\",\"deep_link_sub1\":\"23\",\"is_deferred\":true}","status":"FOUND"}
Menguji deep linking (Tautan Aplikasi Android)
Prerequisites
- Selesaikan integrasi UDL
- Daftarkan perangkat pengujian Anda
- Aktifkan mode debug di aplikasi
- Pastikan aplikasi sudah diinstal di perangkat Anda
- Minta pemasar Anda untuk templat OneLink.
- Ini akan terlihat seperti ini:
https://onelink-basic-app.onelink.me/H5hv
. - Contoh ini menggunakan subdomain OneLink
onelink-basic-app.onelink.me
dan ID templat OneLinkH5hv
.
- Ini akan terlihat seperti ini:
- Konfigurasikan Tautan Aplikasi Android.
Create the test link
Gunakan metode yang sama seperti pada deferred deep linking.
Perform the test
- Klik tautan di perangkat Anda.
- UDL mendeteksi Tautan Aplikasi Android dan mengambil parameter OneLink ke
onDeepLinking
callback.
Expected logs results
Log berikut hanya tersedia bila mode debug diaktifkan.
- Jika tautannya adalah tautan pendek OneLink (mis. https://onelink-basic-app.onelink.me/H5hv/apple)
D/AppsFlyer_6.9.0: HTTP: [258990367] GET:https://onelink.appsflyer.com/shortlink-sdk/v2/H5hv?id=apples
- UDL memanggil
onDeepLinking
callback denganstatus=FOUND
dan data tautan OneLink:D/AppsFlyer_6.9.0: [DDL] Calling onDeepLinking with: {"deepLink":"{\"path\":\"\\\/H5hv\",\"scheme\":\"https\",\"link\":\"https:\\\/\\\/onelink-basic-app.onelink.me\\\/H5hv?deep_link_value=apples&deep_link_sub1=23\",\"host\":\"onelink-basic-app.onelink.me\",\"deep_link_sub1\":\"23\",\"deep_link_value\":\"apples\",\"is_deferred\":false}","status":"FOUND"}
Tips
> Jika saat mengeklik Tautan Aplikasi Android, OS menampilkan Dialog Disambiguasi atau dialihkan ke Google Play atau situs web, periksa apakah tanda tangan SHA256 sudah benar.
- Use
adb
untuk mendapatkan tanda tangan aplikasi di perangkat:adb shell pm get-app-links <PACKAGE_NAME>
-2. Pastikan subdomainnya
verified
.
- Jika subdomain tidak diverifikasi, akan ditampilkan
1024
.
Diperbarui 8 hari yang lalu