Pobieranie Linków dynamicznych Firebase na Androida

Aby odebrać utworzony przez siebie Firebase Dynamic Links, musisz umieścić w aplikacji pakiet SDK Dynamic Links i wywołać metodę FirebaseDynamicLinks.getDynamicLink() podczas wczytywania aplikacji w celu pobrania danych przekazywanych w Dynamic Link.

  1. Jeśli jeszcze tego nie zrobiono, dodaj Firebase do projektu na Androida.

    Podczas rejestracji aplikacji podaj klucz podpisywania SHA-1. Jeśli używasz linków aplikacji, podaj też klucz SHA-256.

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

    Aby uzyskać optymalne wyniki w przypadku Dynamic Links, zalecamy włączenie Google Analytics w projekcie Firebase i dodanie do aplikacji pakietu SDK Firebase dla Google Analytics.

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

    Dzięki użyciu Firebase Android BoMaplikacja zawsze będzie używać zgodnych wersji bibliotek Firebase na Androida.

    (Alternatywnie)  Dodaj zależności biblioteki Firebase bez używania pakietu BoM

    Jeśli zdecydujesz się nie używać Firebase BoM, musisz określić każdą wersję biblioteki Firebase w jej wierszu zależności.

    Pamiętaj, że jeśli w swojej aplikacji używasz wielu bibliotek Firebase, zdecydowanie zalecamy korzystanie z BoM do zarządzania wersjami bibliotek. Dzięki temu będziesz mieć pewność, że wszystkie wersje są zgodne.

    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:22.1.2'
    }
    Szukasz modułu biblioteki dla Kotlina? Od października 2023 r. (Firebase BoM 32.5.0) zarówno deweloperzy aplikacji Kotlin, jak i języki Java mogą korzystać z modułu głównego biblioteki (szczegółowe informacje znajdziesz w najczęstszych pytaniach na temat tej inicjatywy).
  3. W konsoli Firebase otwórz sekcję Dynamic Links. Zaakceptuj warunki korzystania z usługi, jeśli pojawi się taka prośba.

Tak jak w przypadku zwykłych precyzyjnych linków, do działania, które obsługuje precyzyjne linki w Twojej aplikacji, musisz dodać nowy filtr intencji. Filtr intencji powinien wychwytywać precyzyjne linki w Twojej domenie, ponieważ po zainstalowaniu aplikacji Dynamic Link przekierowuje do Twojej domeny. Jest to wymagane, aby aplikacja mogła otrzymywać dane Dynamic Link po zainstalowaniu lub zaktualizowaniu jej ze Sklepu Play i kliknięciu przycisku „Dalej”. W aplikacji 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 określonego przez Ciebie schematu i hosta, aplikacja rozpocznie działanie z tym filtrem intencji w celu obsługi linku.

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

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

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

Funkcję getDynamicLink() musisz wywołać w przypadku każdej aktywności, która może zostać uruchomiona przez link, nawet jeśli link jest dostępny z intencji za pomocą getIntent().getData(). Wywołanie funkcji getDynamicLink() odwołuje połączenie i wyczyści te dane, aby aplikacja przetwarzała je tylko raz.

Zwykle wywołujesz funkcję getDynamicLink() w głównym działaniu oraz w innych działaniach uruchamianych przez filtry intencji, które pasują do linku.

Statystyki nagrywania

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

  • dynamic_link_app_open
  • dynamic_link_first_open
  • dynamic_link_app_update

Aby rejestrować te zdarzenia, przed pobraniem precyzyjnego linku musisz skonfigurować Google Analytics. Sprawdź, czy są spełnione te warunki:

  • Wywołaj funkcję FirebaseDynamicLinks.getDynamicLink() w punktach wejścia do aplikacji:
    • Aktywności w Menu z aplikacjami, np. action="android.intent.action.MAIN", category="android.intent.category.LAUNCHER".
    • Punkty wejścia do aktywności, np. onStart(), onCreate().
    • Aktywności z precyzyjnymi linkami.
  • Konfigurowanie i używanie Google Analytics:

W Androidzie 6.0 (poziom interfejsu API 23) lub nowszym możesz skonfigurować aplikację tak, aby obsługiwała Dynamic Links bezpośrednio po zainstalowaniu, korzystając z linków do aplikacji na Androida.

Upewnij się, że dodasz odciski cyfrowe certyfikatu SHA-256 swojej aplikacji do projektu w konsoli Firebase. Dynamic Links skonfiguruje powiązanie witryny z usługą Linki do aplikacji w domenie Dynamic Links.

Dodaj do aktywności, która będzie obsługiwać Dynamic Link, filtr intencji z automatyczną weryfikacją, ustawiając hosta na domenę Dynamic Links projektu, jak wyświetla się w konsoli Firebase. W 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 wartość android:host musi być ustawiona na domenę Dynamic Links, a nie na domenę precyzyjnego linku.

Aby linki aplikacji działały, musisz zarejestrować wszystkie filtry intencji autoVerify w pliku manifestu. Firebase obsługuje to automatycznie w przypadku domen Dynamic Links, ale możesz to sprawdzić, otwierając plik assetlinks.json hostowany w domenie Dynamic Links:

https://YOUR_DOMAIN/.well-known/assetlinks.json
Uwzględnij wszystkie nazwy pakietów aplikacji Firebase.

Dynamic Links zostanie teraz wysłany bezpośrednio do Twojej aplikacji. Aby uzyskać precyzyjny link i inne dane Dynamic Link, wywołaj funkcję getDynamicLink() w działaniu, do którego dodano filtr intencji Linki do aplikacji (jak opisano w sekcji Praca z precyzyjnymi linkami).

Uwaga: wywołanie linku aplikacji przenosi użytkownika bezpośrednio do aplikacji, więc link dynamiczny nie może uwzględniać wymaganej wersji minimalnej. Dlatego po otwarciu aplikacji musisz porównać minimalną wersję linku dynamicznego (getminimumappversion) z PackageInfo.versionCode i w razie potrzeby przekierować użytkownika do aktualizacji aplikacji za pomocą metody getUpdateAppIntent.