Menerima Firebase Dynamic Links di Android

Untuk menerima Firebase Dynamic Links yang Anda buat, Anda harus menyertakan Dynamic Links SDK dalam aplikasi dan memanggil metode FirebaseDynamicLinks.getDynamicLink() saat aplikasi tersebut dimuat, agar data diteruskan dalam Dynamic Link.

  1. Tambahkan Firebase ke project Android jika Anda belum melakukannya.

    Saat mendaftarkan aplikasi, tentukan kunci penandatanganan SHA-1 Anda. Jika Anda menggunakan App Links, tentukan juga kunci SHA-256 Anda.

  2. Dengan Firebase Android BoM, deklarasikan dependensi untuk library Android Dynamic Links dalam file Gradle modul (level aplikasi), biasanya app/build.gradle.

    Untuk mengoptimalkan penggunaan Dynamic Links, sebaiknya aktifkan Google Analytics di project Firebase dan tambahkan Firebase SDK untuk Google Analytics ke aplikasi Anda.

    Java

    dependencies {
        // Import the BoM for the Firebase platform
        implementation platform('com.google.firebase:firebase-bom:30.3.1')
    
        // Declare the dependencies for the Dynamic Links and Analytics libraries
        // When using the BoM, you don't specify versions in Firebase library dependencies
        implementation 'com.google.firebase:firebase-dynamic-links'
        implementation 'com.google.firebase:firebase-analytics'
    }
    

    Dengan menggunakan Firebase Android BoM, aplikasi Anda akan selalu menggunakan versi library Android Firebase yang kompatibel.

    (Alternatif) Deklarasikan dependensi library Firebase tanpa menggunakan BoM

    Jika memilih untuk tidak menggunakan Firebase BoM, Anda harus menentukan setiap versi library Firebase di baris dependensinya.

    Perlu diperhatikan bahwa jika Anda menggunakan beberapa library Firebase di aplikasi, sebaiknya gunakan BoM untuk mengelola versi library, yang memastikan bahwa semua versi kompatibel.

    dependencies {
        // Declare the dependencies for the Dynamic Links and Analytics libraries
        // When NOT using the BoM, you must specify versions in Firebase library dependencies
        implementation 'com.google.firebase:firebase-dynamic-links:21.0.1'
        implementation 'com.google.firebase:firebase-analytics:21.1.0'
    }
    

    Kotlin+KTX

    dependencies {
        // Import the BoM for the Firebase platform
        implementation platform('com.google.firebase:firebase-bom:30.3.1')
    
        // Declare the dependencies for the Dynamic Links and Analytics libraries
        // When using the BoM, you don't specify versions in Firebase library dependencies
        implementation 'com.google.firebase:firebase-dynamic-links-ktx'
        implementation 'com.google.firebase:firebase-analytics-ktx'
    }
    

    Dengan menggunakan Firebase Android BoM, aplikasi Anda akan selalu menggunakan versi library Android Firebase yang kompatibel.

    (Alternatif) Deklarasikan dependensi library Firebase tanpa menggunakan BoM

    Jika memilih untuk tidak menggunakan Firebase BoM, Anda harus menentukan setiap versi library Firebase di baris dependensinya.

    Perhatikan bahwa jika Anda menggunakan beberapa library Firebase di aplikasi, sebaiknya gunakan BoM untuk mengelola versi library, yang memastikan bahwa semua versi kompatibel.

    dependencies {
        // Declare the dependencies for the Dynamic Links and Analytics libraries
        // When NOT using the BoM, you must specify versions in Firebase library dependencies
        implementation 'com.google.firebase:firebase-dynamic-links-ktx:21.0.1'
        implementation 'com.google.firebase:firebase-analytics-ktx:21.1.0'
    }
    
  3. Di Firebase console, buka bagian Dynamic Links. Setujui persyaratan layanan jika diminta.

Seperti halnya deep link biasa, Anda harus menambahkan filter intent baru ke aktivitas yang menangani deep link untuk aplikasi Anda. Filter intent tersebut harus menangkap deep link domain Anda, karena Dynamic Link akan dialihkan ke domain Anda jika aplikasi diinstal. Hal ini diperlukan agar aplikasi Anda dapat menerima data Dynamic Link setelah diinstal/diupdate dari Play Store dan pengguna mengetuk tombol Continue. Di AndroidManifest.xml:

<intent-filter>
    <action android:name="android.intent.action.VIEW"/>
    <category android:name="android.intent.category.DEFAULT"/>
    <category android:name="android.intent.category.BROWSABLE"/>
    <data
        android:host="example.com"
        android:scheme="https"/>
</intent-filter>

Ketika pengguna membuka Dynamic Link dengan deep link ke skema dan host yang Anda tentukan, aplikasi Anda akan memulai aktivitas dengan filter intent ini untuk menangani link tersebut.

Untuk menerima deep link, panggil metode getDynamicLink():

Java

FirebaseDynamicLinks.getInstance()
        .getDynamicLink(getIntent())
        .addOnSuccessListener(this, new OnSuccessListener<PendingDynamicLinkData>() {
            @Override
            public void onSuccess(PendingDynamicLinkData pendingDynamicLinkData) {
                // Get deep link from result (may be null if no link is found)
                Uri deepLink = null;
                if (pendingDynamicLinkData != null) {
                    deepLink = pendingDynamicLinkData.getLink();
                }

                // Handle the deep link. For example, open the linked
                // content, or apply promotional credit to the user's
                // account.
                // ...

                // ...
            }
        })
        .addOnFailureListener(this, new OnFailureListener() {
            @Override
            public void onFailure(@NonNull Exception e) {
                Log.w(TAG, "getDynamicLink:onFailure", e);
            }
        });

Kotlin+KTX

Firebase.dynamicLinks
    .getDynamicLink(intent)
    .addOnSuccessListener(this) { pendingDynamicLinkData: PendingDynamicLinkData? ->
        // Get deep link from result (may be null if no link is found)
        var deepLink: Uri? = null
        if (pendingDynamicLinkData != null) {
            deepLink = pendingDynamicLinkData.link
        }

        // Handle the deep link. For example, open the linked
        // content, or apply promotional credit to the user's
        // account.
        // ...

    }
    .addOnFailureListener(this) { e -> Log.w(TAG, "getDynamicLink:onFailure", e) }

Anda harus memanggil getDynamicLink() di setiap aktivitas yang mungkin diluncurkan oleh link tersebut, meskipun link ini mungkin tersedia dari intent dengan menggunakan getIntent().getData(). Ketika getDynamicLink() dipanggil, link akan diambil dan data akan dihapus, sehingga aplikasi Anda hanya akan memprosesnya satu kali.

Biasanya, getDynamicLink() dipanggil di aktivitas utama serta aktivitas apa pun yang diluncurkan oleh filter intent yang cocok dengan link tersebut.

Mencatat analisis

Peristiwa berikut dapat dilacak secara otomatis di Google Analytics dan ditampilkan di Firebase console.

  • dynamic_link_app_open
  • dynamic_link_first_open
  • dynamic_link_app_update

Untuk mendaftarkan peristiwa ini, Anda harus mengonfigurasi Google Analytics sebelum mengambil deep link. Pastikan kondisi berikut terpenuhi:

  • Panggil FirebaseDynamicLinks.getDynamicLink() di titik entri aplikasi Anda:
    • Aktivitas peluncur, misalnya: action="android.intent.action.MAIN", category="android.intent.category.LAUNCHER".
    • Titik entri aktivitas, misalnya: onStart(), onCreate().
    • Aktivitas deep link.
  • Siapkan dan gunakan Google Analytics:
    • Sertakan dependensi Google Analytics. Dependensi ini biasanya ditambahkan secara otomatis oleh plugin Gradle google-services.
    • Sertakan file konfigurasi google-services.json di aplikasi Anda.
    • Panggil FirebaseAnalytics.getInstance() sebelum memanggil FirebaseDynamicLinks.getDynamicLink().

Di Android 6.0 (API level 23) dan yang lebih tinggi, jika aplikasi Anda telah diinstal, Anda dapat menyiapkannya untuk menangani Dynamic Links secara langsung menggunakan Android App Links.

Pastikan Anda telah menambahkan sidik jari sertifikat SHA256 untuk aplikasi Anda ke dalam project di Firebase console. Dynamic Links akan menangani penyiapan pengaitan situs App Links untuk domain Dynamic Links Anda.

Tambahkan filter intent yang terverifikasi otomatis ke Aktivitas yang akan menangani Dynamic Link, dengan menyetel host ke domain Dynamic Links project Anda seperti yang bisa dilihat di Firebase console. Di AndroidManifest.xml:

<intent-filter android:autoVerify="true">
    <action android:name="android.intent.action.VIEW"/>
    <category android:name="android.intent.category.DEFAULT"/>
    <category android:name="android.intent.category.BROWSABLE"/>
    <data android:host="example.com/link" android:scheme="http"/>
    <data android:host="example.com/link" android:scheme="https"/>
</intent-filter>

Perlu diperhatikan bahwa android:host harus disetel ke domain Dynamic Links Anda, bukan domain dari deep link Anda.

Semua filter intent autoVerify di manifes Anda harus terdaftar agar App Links berfungsi. Firebase menangani hal ini secara otomatis untuk domain Dynamic Links Anda, tetapi Anda dapat memeriksanya dengan membuka file assetlinks.json yang dihosting di domain Dynamic Links tersebut:

https://YOUR_DOMAIN/.well-known/assetlinks.json
Semua nama paket aplikasi Firebase Anda harus disertakan.

Dynamic Links kini akan dikirim langsung ke aplikasi Anda. Anda akan bisa memperoleh deep link dan data Dynamic Link lainnya dengan memanggil getDynamicLink() di Aktivitas yang telah ditambahi filter intent App Links (seperti yang dijelaskan di bagian Menangani deep link).

Catatan: Karena pemanggilan melalui App Links mengarahkan pengguna langsung ke aplikasi, Dynamic Link tidak dapat memenuhi versi minimum yang disyaratkan. Jadi, setelah aplikasi dibuka, Anda harus membandingkan versi minimum Dynamic Link ( getminimumappversion) dengan PackageInfo.versionCode dan, jika diperlukan, alihkan pengguna untuk mengupgrade aplikasi menggunakan getUpdateAppIntent.