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 and deep_link_sub1-10. If you try to get any other parameters (media_source, campaign, af_sub1-5, dll.), mereka kembali ke null.

Contoh langkah demi langkah

Alur

Android UDL flow!

Alur kerjanya adalah sebagai berikut:

  1. 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.
  2. Pembukaan aplikasi memicu SDK AppsFlyer.
  3. SDK AppsFlyer menjalankan API UDL.
  4. API UDL mengambil data OneLink dari server AppsFlyer.
  5. The UDL API calls back the onDeepLinking() metode dalam DeepLinkingListener class.
  6. The onDeepLinking() method gets a DeepLinkResult object.
  7. The DeepLinkResult object includes:
    • Status (Ditemukan/Tidak Ditemukan/Kesalahan (error))
    • A DeepLink object that carries the deep_link_value and deep_link_sub1-10 parameter, yang digunakan pengembang untuk mengarahkan pengguna ke aktivitas dalam aplikasi tertentu, yang merupakan tujuan utama OneLink.

Prasyarat

  • UDL mewajibkan SDK AppsFlyer Android V6.1+.

Perencanaan

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:

  1. Dapatkan dari pemasar perilaku dan pengalaman pribadi yang diinginkan pengguna saat mereka mengklik URL.
  2. 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 of deep_link_value can be apples.
    • 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 of deep_link_sub1 can be 10.

Penerapan

Menerapkan logika API UDL berdasarkan parameter dan nilai yang dipilih.

  1. Gunakan subscribeForDeepLink() metode (dari AppsFlyerLib), before calling start, to register the DeepLinkListener pendengar antarmuka.
  2. Pastikan Anda mengganti fungsi callback onDeepLinking().
    onDeepLinking() menerima sebagai argumen DeepLinkResult object.
  3. Use getStatus() to query whether the deep linking match is found.
  4. For when the status is an error, call getError() and run your error flow.
  5. For when the status is found, use getDeepLink() to retrieve the DeepLink object.
    The DeepLink Objek berisi informasi deep linking dan fungsi asisten untuk mengambil nilai dengan mudah dari kode OneLink yang dikenal, misalnya, getDeepLinkValue().
  6. Use getDeepLinkValue() to retrieve the deep_link_value.
  7. Use getStringValue("deep_link_sub1") to retrieve deep_link_sub1. Do the same for deep_link_sub2-10 parameters, changing the string value as required.
  8. Once deep_link_value and deep_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, hubungi setIntent(intent) metode untuk mengatur nilai maksud di dalam metode yang diganti onNewIntent 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

Before you begin

  • 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 OneLink H5hv

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 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

  1. Klik tautan di perangkat Anda.
  2. OneLink mengarahkan Anda sesuai dengan pengaturan tautan, antara ke Google Play atau situs web.
  3. Instal aplikasi.

    Penting

    • Jika aplikasi masih dalam pengembangan, dan belum diunggah ke toko, Anda akan melihat gambar ini:
      drawing
    • Instal aplikasi dari Android Studio atau IDE lain yang Anda gunakan.
  4. 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 dengan status=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)

Before you begin

Create the test link

Gunakan metode yang sama seperti pada deferred deep linking.

Perform the test

  1. Klik tautan di perangkat Anda.
  2. 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 dengan status=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.

  1. Use adb untuk mendapatkan tanda tangan aplikasi di perangkat:
adb shell pm get-app-links <PACKAGE_NAME>

-2. Pastikan subdomainnya verified.
adb verified!

  1. Jika subdomain tidak diverifikasi, akan ditampilkan 1024.
    adb verified!