Создание динамических ссылок на Android

С помощью API Firebase Dynamic Links Builder можно создавать короткие или длинные Dynamic Links . Этот API принимает либо длинную Dynamic Link , либо объект, содержащий параметры Dynamic Link , и возвращает URL-адреса, подобные приведенным ниже примерам:

https://example.com/link/WXYZ
https://example.page.link/WXYZ

Прежде чем создавать Dynamic Links в своем Android-приложении, необходимо подключить Firebase SDK. Если ваше приложение настроено на прием Dynamic Links , вы уже выполнили эти шаги и можете пропустить этот раздел.

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

    При регистрации приложения укажите ключ подписи SHA-1. Если вы используете App Links, укажите также ключ 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 Analytics в ваше приложение.

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

    Использование 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:23.0.0'
    }
  3. В консоли Firebase откройте раздел Dynamic Links .
  4. Если вы еще не приняли условия обслуживания и не указали домен для своих Dynamic Links , сделайте это, когда появится соответствующий запрос.

    Если у вас уже есть домен Dynamic Links , запишите его. Вам необходимо указать домен Dynamic Links при программном создании Dynamic Links .

  5. Рекомендуется : Укажите разрешенные шаблоны URL-адресов для ваших прямых ссылок и резервных ссылок. Это предотвратит создание неавторизованными лицами Dynamic Links , перенаправляющих с вашего домена на сайты, которые вы не контролируете. См. раздел «Разрешить определенные шаблоны URL-адресов» .

Используйте консоль Firebase

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

Для создания Dynamic Link создайте новый объект DynamicLink с его конструктором (Builder), указав параметры Dynamic Link с помощью методов конструктора. Затем вызовите buildDynamicLink или buildShortDynamicLink .

Следующий минимальный пример создает длинную Dynamic Link на https://www.example.com/ , которая открывается вашим приложением для Android и приложением com.example.ios для iOS:

Kotlin

val dynamicLink = Firebase.dynamicLinks.dynamicLink {
    link = Uri.parse("https://www.example.com/")
    domainUriPrefix = "https://example.page.link"
    // Open links with this app on Android
    androidParameters { }
    // Open links with com.example.ios on iOS
    iosParameters("com.example.ios") { }
}

val dynamicLinkUri = dynamicLink.uri

Java

DynamicLink dynamicLink = FirebaseDynamicLinks.getInstance().createDynamicLink()
        .setLink(Uri.parse("https://www.example.com/"))
        .setDomainUriPrefix("https://example.page.link")
        // Open links with this app on Android
        .setAndroidParameters(new DynamicLink.AndroidParameters.Builder().build())
        // Open links with com.example.ios on iOS
        .setIosParameters(new DynamicLink.IosParameters.Builder("com.example.ios").build())
        .buildDynamicLink();

Uri dynamicLinkUri = dynamicLink.getUri();

Чтобы создать короткую Dynamic Link , создайте DynamicLink аналогичным образом, а затем вызовите метод buildShortDynamicLink . Создание короткой ссылки требует сетевого вызова, поэтому вместо прямого возврата ссылки buildShortDynamicLink возвращает Task , который делает короткую ссылку доступной после завершения запроса. Например:

Kotlin

val shortLinkTask = Firebase.dynamicLinks.shortLinkAsync {
    link = Uri.parse("https://www.example.com/")
    domainUriPrefix = "https://example.page.link"
    // Set parameters
    // ...
}.addOnSuccessListener { (shortLink, flowchartLink) ->
    // You'll need to import com.google.firebase.dynamiclinks.component1 and
    // com.google.firebase.dynamiclinks.component2

    // Short link created
    processShortLink(shortLink, flowchartLink)
}.addOnFailureListener {
    // Error
    // ...
}

Java

Task<ShortDynamicLink> shortLinkTask = FirebaseDynamicLinks.getInstance().createDynamicLink()
        .setLink(Uri.parse("https://www.example.com/"))
        .setDomainUriPrefix("https://example.page.link")
        // Set parameters
        // ...
        .buildShortDynamicLink()
        .addOnCompleteListener(this, new OnCompleteListener<ShortDynamicLink>() {
            @Override
            public void onComplete(@NonNull Task<ShortDynamicLink> task) {
                if (task.isSuccessful()) {
                    // Short link created
                    Uri shortLink = task.getResult().getShortLink();
                    Uri flowchartLink = task.getResult().getPreviewLink();
                } else {
                    // Error
                    // ...
                }
            }
        });

По умолчанию короткие Dynamic Links генерируются с 17-символьными суффиксами, что делает крайне маловероятным угадывание допустимой Dynamic Link . Если в вашем случае нет ничего плохого в том, чтобы кто-то успешно угадал короткую ссылку, вы можете предпочесть генерировать суффиксы, длина которых соответствует необходимой для уникальности, что можно сделать, передав ShortDynamicLink.Suffix.SHORT методу buildShortDynamicLink :

Kotlin

val shortLinkTask = Firebase.dynamicLinks.shortLinkAsync(ShortDynamicLink.Suffix.SHORT) {
    // Set parameters
    // ...
}

Java

Task<ShortDynamicLink> shortLinkTask = FirebaseDynamicLinks.getInstance().createDynamicLink()
        // ...
        .buildShortDynamicLink(ShortDynamicLink.Suffix.SHORT);
        // ...

Вы можете использовать API Dynamic Link Builder для создания Dynamic Links с любым из поддерживаемых параметров. Подробности см. в справочнике API .

В следующем примере создается Dynamic Link с несколькими заданными общими параметрами:

Kotlin

val dynamicLink = Firebase.dynamicLinks.dynamicLink { // or Firebase.dynamicLinks.shortLinkAsync
    link = Uri.parse("https://www.example.com/")
    domainUriPrefix = "https://example.page.link"
    androidParameters("com.example.android") {
        minimumVersion = 125
    }
    iosParameters("com.example.ios") {
        appStoreId = "123456789"
        minimumVersion = "1.0.1"
    }
    googleAnalyticsParameters {
        source = "orkut"
        medium = "social"
        campaign = "example-promo"
    }
    itunesConnectAnalyticsParameters {
        providerToken = "123456"
        campaignToken = "example-promo"
    }
    socialMetaTagParameters {
        title = "Example of a Dynamic Link"
        description = "This link works whether the app is installed or not!"
    }
}

Java

DynamicLink dynamicLink = FirebaseDynamicLinks.getInstance().createDynamicLink()
        .setLink(Uri.parse("https://www.example.com/"))
        .setDomainUriPrefix("https://example.page.link")
        .setAndroidParameters(
                new DynamicLink.AndroidParameters.Builder("com.example.android")
                        .setMinimumVersion(125)
                        .build())
        .setIosParameters(
                new DynamicLink.IosParameters.Builder("com.example.ios")
                        .setAppStoreId("123456789")
                        .setMinimumVersion("1.0.1")
                        .build())
        .setGoogleAnalyticsParameters(
                new DynamicLink.GoogleAnalyticsParameters.Builder()
                        .setSource("orkut")
                        .setMedium("social")
                        .setCampaign("example-promo")
                        .build())
        .setItunesConnectAnalyticsParameters(
                new DynamicLink.ItunesConnectAnalyticsParameters.Builder()
                        .setProviderToken("123456")
                        .setCampaignToken("example-promo")
                        .build())
        .setSocialMetaTagParameters(
                new DynamicLink.SocialMetaTagParameters.Builder()
                        .setTitle("Example of a Dynamic Link")
                        .setDescription("This link works whether the app is installed or not!")
                        .build())
        .buildDynamicLink();  // Or buildShortDynamicLink()

Параметры Dynamic Link можно задать следующими способами:

Параметры DynamicLink
setLink

Ссылка, которую будет открывать ваше приложение. Укажите URL-адрес, который может обрабатывать ваше приложение, как правило, это содержимое или полезная нагрузка приложения, которая запускает специфическую для приложения логику (например, начисление пользователю купона или отображение приветственного экрана). Эта ссылка должна быть правильно отформатированным URL-адресом, корректно закодированным в формате URL, использовать протокол HTTP или HTTPS и не может быть другой динамической ссылкой.

setDomainUriPrefix Префикс вашего Dynamic Link , который можно найти в консоли Firebase . Домен Dynamic Link выглядит следующим образом:
https://example.com/link
https://example.page.link
AndroidParameters
setFallbackUrl Ссылка, которая будет открываться, если приложение не установлено. Укажите это, чтобы выполнить какое-либо действие, отличное от установки приложения из Play Store, если приложение не установлено, например, открыть мобильную веб-версию контента или отобразить рекламную страницу вашего приложения.
setMinimumVersion versionCode это минимальная версия вашего приложения, которая позволяет открыть ссылку. Если установленное приложение имеет более старую версию, пользователь будет перенаправлен в Play Store для обновления приложения.
IosParameters
setAppStoreId Идентификатор вашего приложения в App Store, используемый для перенаправления пользователей в App Store, если приложение не установлено.
setFallbackUrl Ссылка, которая будет открываться, если приложение не установлено. Укажите это, чтобы выполнить какое-либо действие, отличное от установки приложения из App Store, если приложение не установлено, например, открыть мобильную веб-версию контента или отобразить рекламную страницу вашего приложения.
setCustomScheme Схема пользовательских URL-адресов вашего приложения, если она определена как нечто отличное от идентификатора пакета вашего приложения.
setIpadFallbackUrl Ссылка, которая будет открываться на iPad, если приложение не установлено. Укажите это, чтобы выполнить какое-либо действие, отличное от установки приложения из App Store, если приложение не установлено, например, открыть веб-версию контента или отобразить рекламную страницу вашего приложения.
setIpadBundleId Идентификатор пакета iOS-приложения, которое будет использоваться на iPad для открытия ссылки. Приложение должно быть подключено к вашему проекту через страницу «Обзор» в консоли Firebase .
setMinimumVersion Номер версии минимальной версии вашего приложения, которая может открыть ссылку. Этот флаг передается вашему приложению при открытии ссылки, и ваше приложение должно решить, что с ним делать.
Параметры навигации
setForcedRedirectEnabled Если установлено значение «1», страница предварительного просмотра приложения будет пропущена при открытии Dynamic Link , и вместо этого будет осуществлено перенаправление в приложение или магазин. Страница предварительного просмотра приложения (включена по умолчанию) может более надежно направлять пользователей на наиболее подходящий ресурс при открытии Dynamic Links в приложениях; однако, если вы ожидаете, что Dynamic Link будет открываться только в приложениях, которые могут надежно открывать Dynamic Links без этой страницы, вы можете отключить ее с помощью этого параметра. Этот параметр повлияет на поведение Dynamic Link только на iOS.
SocialMetaTagParameters
setTitle Заголовок, используемый при публикации Dynamic Link в социальных сетях.
setDescription Описание, используемое при публикации Dynamic Link в социальных сетях.
setImageUrl URL изображения, связанного с этой ссылкой. Размер изображения должен быть не менее 300x200 пикселей, а размер файла — менее 300 КБ.
Параметры Google Analytics
setSource
setMedium
setCampaign
setTerm
setContent
Параметры аналитики Google Play. Эти параметры ( utm_source , utm_medium , utm_campaign , utm_term , utm_content ) передаются в Play Store, а также добавляются к полезной нагрузке ссылки.
ItunesConnectAnalyticsParameters
setProviderToken
setAffiliateToken
setCampaignToken
Параметры аналитики iTunes Connect. Эти параметры ( pt , at , ct ) передаются в App Store.

Чтобы сократить длинную Dynamic Link , укажите URL-адрес Dynamic Link с помощью метода setLongLink вместо установки параметров с помощью других методов конструктора:

Kotlin

val shortLinkTask = Firebase.dynamicLinks.shortLinkAsync {
    longLink = Uri.parse(
        "https://example.page.link/?link=" +
            "https://www.example.com/&apn=com.example.android&ibn=com.example.ios",
    )
}.addOnSuccessListener { (shortLink, flowChartLink) ->
    // You'll need to import com.google.firebase.dynamiclinks.component1 and
    // com.google.firebase.dynamiclinks.component2

    // Short link created
    processShortLink(shortLink, flowChartLink)
}.addOnFailureListener {
    // Error
    // ...
}

Java

Task<ShortDynamicLink> shortLinkTask = FirebaseDynamicLinks.getInstance().createDynamicLink()
        .setLongLink(Uri.parse("https://example.page.link/?link=https://www.example.com/&apn=com.example.android&ibn=com.example.ios"))
        .buildShortDynamicLink()
        .addOnCompleteListener(this, new OnCompleteListener<ShortDynamicLink>() {
            @Override
            public void onComplete(@NonNull Task<ShortDynamicLink> task) {
                if (task.isSuccessful()) {
                    // Short link created
                    Uri shortLink = task.getResult().getShortLink();
                    Uri flowchartLink = task.getResult().getPreviewLink();
                } else {
                    // Error
                    // ...
                }
            }
        });