Catch up on highlights from Firebase at Google I/O 2023. Learn more

Otrzymuj dynamiczne linki Firebase na Androida

Aby otrzymać utworzone przez siebie linki dynamiczne Firebase , musisz umieścić pakiet SDK linków dynamicznych w swojej aplikacji i wywoływać metodę FirebaseDynamicLinks.getDynamicLink() podczas ładowania aplikacji, aby uzyskać dane przekazane w linku dynamicznym.

  1. Jeśli jeszcze tego nie zrobiłeś, dodaj Firebase do swojego projektu na Androida .

    Podczas rejestrowania aplikacji podaj klucz podpisywania SHA-1. Jeśli korzystasz z linków do aplikacji, podaj również swój klucz SHA-256.

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

    Aby optymalnie korzystać z Linków dynamicznych, zalecamy włączenie Google Analytics w projekcie Firebase i dodanie pakietu Firebase SDK dla Google Analytics do swojej aplikacji.

    Kotlin+KTX

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

    Korzystając z Firebase Android BoM , Twoja aplikacja będzie zawsze korzystać ze zgodnych wersji bibliotek Firebase Android.

    (Alternatywnie) Dodaj zależności biblioteki Firebase bez korzystania z BoM

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

    Pamiętaj, że jeśli używasz w swojej aplikacji wielu bibliotek Firebase, zdecydowanie zalecamy korzystanie z 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-ktx:21.1.0'
        implementation 'com.google.firebase:firebase-analytics-ktx:21.3.0'
    }
    

    Java

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

    Korzystając z Firebase Android BoM , Twoja aplikacja będzie zawsze korzystać ze zgodnych wersji bibliotek Firebase Android.

    (Alternatywnie) Dodaj zależności biblioteki Firebase bez korzystania z BoM

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

    Pamiętaj, że jeśli używasz w swojej aplikacji wielu bibliotek Firebase, zdecydowanie zalecamy korzystanie z 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:21.1.0'
        implementation 'com.google.firebase:firebase-analytics:21.3.0'
    }
    
  3. W konsoli Firebase otwórz sekcję Linki dynamiczne . Zaakceptuj warunki korzystania z usługi, jeśli zostaniesz o to poproszony.

Podobnie jak w przypadku zwykłych precyzyjnych linków , musisz dodać nowy filtr intencji do działania obsługującego precyzyjne linki do Twojej aplikacji. Filtr intencji powinien przechwytywać precyzyjne linki z Twojej domeny, ponieważ link dynamiczny przekieruje do Twojej domeny, jeśli Twoja aplikacja jest zainstalowana. Jest to wymagane, aby Twoja aplikacja mogła odbierać dane Dynamic Link po jej zainstalowaniu/aktualizacji ze Sklepu Play i dotknięciu przycisku Kontynuuj. W 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ą link dynamiczny z precyzyjnym linkiem do określonego schematu i hosta, aplikacja rozpocznie działanie z tym filtrem intencji, aby obsłużyć link.

Aby otrzymać 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);
            }
        });

Musisz wywołać getDynamicLink() w każdym działaniu, które może zostać uruchomione przez łącze, nawet jeśli łącze może być dostępne z intencji przy użyciu getIntent().getData() . Wywołanie metody getDynamicLink() pobiera łącze i czyści te dane, dzięki czemu aplikacja przetwarza je tylko raz.

Zwykle wywołujesz getDynamicLink() w głównym działaniu, jak również we wszystkich działaniach uruchamianych przez filtry intencji, które pasują do łącza.

Analityka rekordów

Następujące 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, musisz skonfigurować Google Analytics przed pobraniem precyzyjnego linku. Sprawdź, czy spełnione są następujące warunki:

  • Wywołaj FirebaseDynamicLinks.getDynamicLink() w punktach wejścia aplikacji:
    • Działania Launchera. np.: action="android.intent.action.MAIN" , category="android.intent.category.LAUNCHER" .
    • Punkty wejścia aktywności. np.: onStart() , onCreate() .
    • Działania związane z głębokimi linkami.
  • Skonfiguruj i korzystaj z Google Analytics:
    • Uwzględnij zależność Google Analytics. Zwykle jest to automatycznie dodawane przez wtyczkę google-services Gradle.
    • Dołącz plik konfiguracyjny google-services.json do swojej aplikacji.
    • Wywołaj FirebaseAnalytics.getInstance() przed wywołaniem FirebaseDynamicLinks.getDynamicLink() .

W systemie Android 6.0 (poziom interfejsu API 23) i nowszych możesz skonfigurować aplikację tak, aby obsługiwała linki dynamiczne bezpośrednio, gdy aplikacja jest już zainstalowana, korzystając z funkcji Android App Links .

Upewnij się, że odcisk cyfrowy certyfikatu SHA256 dla Twojej aplikacji został dodany do projektu w konsoli Firebase . Dynamic Links zajmie się konfiguracją powiązania witryny App Links dla Twojej domeny Dynamic Links.

Dodaj automatycznie weryfikowany filtr intencji do działania, który będzie obsługiwał link dynamiczny, ustawiając hosta na domenę linków dynamicznych twojego projektu, tak jak jest to widoczne 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 android:host musi być ustawiony na domenę Twoich linków dynamicznych, a nie domenę precyzyjnego linku.

Wszystkie filtry intencji autoVerify w Twoim manifeście muszą być zarejestrowane, aby linki do aplikacji działały. Firebase obsługuje to automatycznie dla Twoich domen z Linkami dynamicznymi, ale możesz to sprawdzić, otwierając plik assetlinks.json hostowany w Twojej domenie z Linkami dynamicznymi:

https://YOUR_DOMAIN/.well-known/assetlinks.json
Wszystkie nazwy pakietów Twoich aplikacji Firebase powinny zostać uwzględnione.

Linki dynamiczne będą teraz wysyłane bezpośrednio do Twojej aplikacji. Możesz uzyskać precyzyjny link i inne dane dynamicznego łącza, wywołując funkcję getDynamicLink() w działaniu, do którego dodano filtr intencji łączy aplikacji (zgodnie z opisem w sekcji Obsługa głębokich łączy ).

Uwaga: ponieważ wywoływanie za pośrednictwem linków aplikacji przenosi użytkownika bezpośrednio do aplikacji, link dynamiczny nie może honorować wymaganej wersji minimalnej. Dlatego po otwarciu aplikacji należy porównać minimalną wersję łącza dynamicznego ( getminimumappversion ) z PackageInfo.versionCode i przekierować użytkownika do uaktualnienia aplikacji, jeśli jest to wymagane, za pomocą funkcji getUpdateAppIntent .