Как получать динамические ссылки Firebase на Android

Чтобы получить Firebase Dynamic Links, который вы создали, необходимо добавить в приложение SDK Dynamic Links и вызвать метод FirebaseDynamicLinks.getDynamicLink() при загрузке приложения, чтобы получить данные, переданные в Dynamic Link.

  1. Если вы ещё этого не сделали, добавьте Firebase в проект для Android.

    При регистрации приложения укажите ключ подписи SHA-1. Если вы используете ссылки на приложения, также укажите ключ SHA-256.

  2. В файле Gradle на уровне модуля (приложения) (обычно это <project>/<app-module>/build.gradle.kts или <project>/<app-module>/build.gradle) добавьте зависимость для библиотеки Dynamic Links для Android. Для управления версиями библиотек рекомендуем использовать Firebase Android BoM.

    Чтобы использовать все возможности Dynamic Links, рекомендуем включить Google Analytics в проекте Firebase и добавить в приложение Firebase SDK для Google Аналитики.

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

    Благодаря Firebase Android BoM в вашем приложении всегда будут использоваться совместимые версии библиотек Firebase Android.

    (Альтернативный вариант) Добавьте зависимости библиотеки Firebase без использования BoM.

    Если вы не хотите использовать Firebase BoM, то должны указать версию каждой библиотеки Firebase в строке зависимости.

    Если вы используете в приложении несколько библиотек Firebase, настоятельно рекомендуем управлять их версиями с помощью BoM. Это обеспечит совместимость всех версий.

    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:24.0.0'
    }
  3. В консоли Firebase откройте раздел Dynamic Links. Примите Условия использования, если появится запрос.

Как и в случае с простыми ссылками на контент, вам нужно добавить новый фильтр интентов к действию, которое обрабатывает ссылки на контент в вашем приложении. Фильтр интентов должен перехватывать ссылки на контент вашего домена, поскольку Dynamic Link будет перенаправлять на ваш домен, если ваше приложение установлено. Это необходимо, чтобы приложение могло получать данные Dynamic Link после установки или обновления из Google Play и нажатия кнопки "Продолжить". В 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>

Когда пользователи открывают Dynamic Link со ссылкой на контент, которая ведет на указанные вами схему и хост, ваше приложение запускает действие с этим фильтром интентов, чтобы обработать ссылку.

Чтобы получить ссылку на контент, вызовите метод 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);
            }
        });

Вы должны вызывать getDynamicLink() в каждом действии, которое может быть запущено по ссылке, даже если ссылка может быть доступна из намерения с помощью getIntent().getData(). Вызов getDynamicLink() извлекает ссылку и очищает эти данные, чтобы они обрабатывались приложением только один раз.

Обычно метод getDynamicLink() вызывается в основном объекте Activity, а также в любых объектах Activity, запущенных фильтрами интентов, которые соответствуют ссылке.

Запись аналитики

В Google Analytics можно автоматически отслеживать перечисленные ниже события и просматривать их в консоли Firebase.

  • dynamic_link_app_open
  • dynamic_link_first_open
  • dynamic_link_app_update

Чтобы регистрировать эти события, необходимо настроить Google Analytics до получения ссылки на контент. Убедитесь, что выполняются следующие условия:

  • Вызовите FirebaseDynamicLinks.getDynamicLink() в точках входа приложения:
    • Действия на панели запуска, например: action="android.intent.action.MAIN", category="android.intent.category.LAUNCHER".
    • Точки входа в занятия, например: onStart(), onCreate().
    • Действия со ссылками на контент.
  • Как настроить и использовать Google Analytics:

В Android 6.0 (уровень API 23) и более поздних версиях можно настроить приложение так, чтобы оно обрабатывало Dynamic Links напрямую, если оно уже установлено. Для этого используются ссылки на приложения для Android.

Убедитесь, что вы добавили цифровой отпечаток сертификата SHA256 для приложения в проект в консоли Firebase. Dynamic Links настроит связь сайта со ссылками на приложение для домена Dynamic Links.

Добавьте автоматически подтвержденный фильтр интентов в объект Activity, который будет обрабатывать Dynamic Link, и укажите в качестве хоста домен Dynamic Links вашего проекта, как указано в консоли Firebase. В 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>

Обратите внимание, что в качестве android:host должен быть указан домен Dynamic Links, а не домен ссылки на контент.

Чтобы ссылки на приложение работали, необходимо зарегистрировать все фильтры интентов autoVerify в манифесте. Firebase делает это автоматически для доменов Dynamic Links, но вы можете проверить это, открыв файл assetlinks.json, размещенный в домене Dynamic Links:

https://YOUR_DOMAIN/.well-known/assetlinks.json
Добавьте названия пакетов всех приложений Firebase.

Теперь Dynamic Links будет отправляться напрямую в приложение. Вы сможете получить ссылку на контент и другие данные Dynamic Link, вызвав getDynamicLink() в Activity, к которому вы добавили фильтр интентов для ссылок на приложение (как описано в разделе Обработка ссылок на контент).

Примечание. Поскольку при вызове через ссылки на приложение пользователь переходит непосредственно в приложение, динамическая ссылка не может учитывать требуемую минимальную версию. Поэтому после открытия приложения вам нужно сравнить минимальную версию динамической ссылки ( getminimumappversion) с PackageInfo.versionCode и при необходимости перенаправить пользователя на страницу обновления приложения с помощью getUpdateAppIntent.