Pobieranie Linków dynamicznych Firebase na Androida

Aby otrzymywać Firebase Dynamic Links, które utworzyłeś, musisz dodać pakiet SDK Dynamic Links do swojej aplikacji i wywołać metodę FirebaseDynamicLinks.getDynamicLink() podczas wczytywania aplikacji, aby uzyskać dane przekazywane w Dynamic Link.

  1. Jeśli jeszcze tego nie zrobisz, dodaj Firebase do swojego projektu aplikacji na Androida.

    Podczas rejestracji aplikacji określ klucz podpisywania SHA-1. Jeśli używasz App Links, określ też klucz SHA-256.

  2. W pliku Gradle modułu (na poziomie aplikacji) (zwykle <project>/<app-module>/build.gradle.kts lub <project>/<app-module>/build.gradle), dodaj zależność od biblioteki Dynamic Links na Androida. Zalecamy używanie Firebase Android BoM do kontrolowania wersji biblioteki.

    Aby zapewnić optymalne działanie Dynamic Links, zalecamy włączenie Google Analytics w projekcie w Firebase i dodanie do aplikacji [pakiet] SDK Firebase dla Google Analytics.

    dependencies {
        // Import the BoM for the Firebase platform
        implementation(platform("com.google.firebase:firebase-bom:34.12.0"))
    
        // Add 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'
    }

    Gdy korzystamy z Firebase Android BoM, aplikacja zawsze używa zgodnych wersji bibliotek Firebase na Androida.

    (Alternatywa)  Dodaj zależności biblioteki Firebase bez użycia BoM

    Jeśli nie chcesz używać Firebase BoM, musisz określić wersję każdej biblioteki Firebase w wierszu zależności.

    Pamiętaj, że jeśli w aplikacji używasz kilku bibliotek Firebase, zdecydowanie zalecamy używanie BoM do zarządzania wersjami bibliotek, co zapewnia zgodność wszystkich wersji.

    dependencies {
        // Add 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:22.1.0'
        implementation 'com.google.firebase:firebase-analytics:23.2.0'
    }
  3. W konsoli Firebase otwórz sekcję Dynamic Links. Jeśli pojawi się odpowiedni komunikat, zaakceptuj warunki usługi.

Podobnie jak w przypadku zwykłych precyzyjnych linków, musisz dodać nowy filtr intencji do aktywności, która obsługuje precyzyjne linki w Twojej aplikacji. Filtr intencji powinien przechwytywać precyzyjne linki do Twojej domeny, ponieważ Dynamic Link przekieruje do Twojej domeny, jeśli aplikacja jest zainstalowana. Jest to wymagane, aby aplikacja mogła odbierać dane Dynamic Link po zainstalowaniu lub zaktualizowaniu ze Sklepu Play i kliknięciu przycisku Dalej. W pliku 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>

Gdy użytkownicy otworzą Dynamic Link z precyzyjnym linkiem do schematu i hosta, które określisz, Twoja aplikacja uruchomi aktywność z tym filtrem intencji, aby obsłużyć link.

Aby otrzymać precyzyjny link, wywołaj metodę getDynamicLink():

Kotlin

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

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);
            }
        });

Musisz wywołać getDynamicLink() w każdej aktywności, która może zostać uruchomiona przez link, nawet jeśli link może być dostępny z intencji za pomocą getIntent().getData(). Wywołanie getDynamicLink() pobiera link i czyści te dane, aby były przetwarzane tylko raz przez Twoją aplikację.

Zwykle wywołujesz getDynamicLink() w głównej aktywności oraz w każdej aktywności uruchamianej przez filtry intencji pasujące do linku.

Rejestrowanie danych analitycznych

Te zdarzenia mogą być automatycznie śledzone w Google Analytics i wyświetlane w Firebase konsoli.

  • dynamic_link_app_open
  • dynamic_link_first_open
  • dynamic_link_app_update

Aby zarejestrować te zdarzenia, musisz skonfigurować Google Analytics zanim pobierzesz precyzyjny link. Sprawdź, czy spełnione są te warunki:

  • Wywołaj FirebaseDynamicLinks.getDynamicLink() w punktach wejścia aplikacji:
    • Aktywności programu uruchamiającego, np.: action="android.intent.action.MAIN", category="android.intent.category.LAUNCHER".
    • Punkty wejścia aktywności, np.: onStart(), onCreate().
    • Aktywności precyzyjnych linków.
  • Skonfiguruj i używaj Google Analytics:

Na Androidzie 6.0 (poziom interfejsu API 23) i nowszym możesz skonfigurować aplikację tak, aby obsługiwała Dynamic Links bezpośrednio, gdy jest już zainstalowana, za pomocą App Links.

Upewnij się, że w konsoli Firebase dodano odcisk cyfrowy certyfikatu SHA256 aplikacji do projektu w Firebase konsoli. Dynamic Links skonfiguruje powiązanie witryny z App Links dla Twojej domeny Dynamic Links.

Dodaj automatycznie zweryfikowany filtr intencji do aktywności, która będzie obsługiwać Dynamic Link, ustawiając hosta na domenę Dynamic Links projektu, którą znajdziesz w konsoli Firebase. W pliku 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>

Pamiętaj, że android:host musi być ustawiony na domenę Dynamic Links, a nie na domenę precyzyjnego linku.

Aby linki aplikacji autoVerify mogły się włączyć, w pliku manifestu muszą być zarejestrowane wszystkie filtry intencji. Firebase robi to automatycznie w przypadku domen Dynamic Links, ale możesz sprawdzić to, otwierając plik assetlinks.json hostowany w domenie Dynamic Links:

https://YOUR_DOMAIN/.well-known/assetlinks.json
Powinny być uwzględnione nazwy pakietów wszystkich aplikacji Firebase.

Dynamic Links będą teraz wysyłane bezpośrednio do Twojej aplikacji. Będziesz mieć możliwość uzyskania precyzyjnego linku i innych Dynamic Link danych, wywołując getDynamicLink() w aktywności, do której dodano filtr intencji App Links (jak opisano w Obsługa precyzyjnych linków).

Uwaga: ponieważ wywołanie za pomocą linków aplikacji przenosi użytkownika bezpośrednio do aplikacji, link dynamiczny nie może uwzględniać wymaganej minimalnej wersji. Gdy aplikacja zostanie otwarta, musisz porównać minimalną wersję linku dynamicznego ( getminimumappversion) z PackageInfo.versionCode i przekierować użytkownika do aktualizacji aplikacji, jeśli jest to wymagane, za pomocą getUpdateAppIntent.