Check out what’s new from Firebase at Google I/O 2022. Learn more

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

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

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

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

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

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

  2. Используя Firebase Android BoM , объявите зависимость для библиотеки Dynamic Links Android в файле Gradle вашего модуля (на уровне приложения) (обычно app/build.gradle ).

    Для оптимальной работы с динамическими ссылками мы рекомендуем включить Google Analytics в вашем проекте Firebase и добавить Firebase SDK для Google Analytics в ваше приложение.

    Java

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

    Kotlin+KTX

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

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

    (Альтернатива) Объявите зависимости библиотеки Firebase без использования BoM

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

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

    dependencies {
        // Declare 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.0.1'
        implementation 'com.google.firebase:firebase-analytics-ktx:21.0.0'
    }
    
  3. В консоли Firebase откройте раздел « Динамические ссылки ».
  4. Если вы еще не приняли условия обслуживания и не установили домен для своих динамических ссылок, сделайте это при появлении запроса.

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

  5. Рекомендуется . Укажите шаблоны URL, разрешенные для ссылок на контент и резервных ссылок. Тем самым вы предотвращаете создание динамических ссылок неавторизованными сторонами, которые перенаправляют вас с вашего домена на сайты, которые вы не контролируете. См. раздел Разрешить определенные шаблоны URL .

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

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

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

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

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

Kotlin+KTX

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

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

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

Kotlin+KTX

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.ktx.component1 and
    // com.google.firebase.dynamiclinks.ktx.component2

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

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

Java

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

Kotlin+KTX

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

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

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

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

Kotlin+KTX

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!"
    }
}

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

Параметры DynamicLink
установить ссылку

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

setDomainUriPrefix Префикс URL-адреса динамической ссылки, который вы можете найти в консоли Firebase. Домен Dynamic Link выглядит следующим образом:
https://example.com/link
https://example.page.link
AndroidПараметры
setFallbackURL Ссылка для открытия, когда приложение не установлено. Укажите это, чтобы сделать что-то, кроме установки вашего приложения из Play Store, когда приложение не установлено, например открыть мобильную веб-версию контента или отобразить рекламную страницу для вашего приложения.
setMinimumVersion versionCode минимальной версии вашего приложения, которая может открыть ссылку. Если установленное приложение является более старой версией, пользователь перенаправляется в Play Store для обновления приложения.
IosПараметры
setAppStoreId Идентификатор App Store вашего приложения, используемый для отправки пользователей в App Store, когда приложение не установлено.
setFallbackURL Ссылка для открытия, когда приложение не установлено. Укажите это, чтобы сделать что-то кроме установки вашего приложения из App Store, когда приложение не установлено, например открыть мобильную веб-версию содержимого или отобразить рекламную страницу для вашего приложения.
setCustomScheme Настраиваемая схема URL-адреса вашего приложения, если она определена как нечто отличное от идентификатора пакета вашего приложения.
setIpadFallbackUrl Ссылка для открытия на iPad, когда приложение не установлено. Укажите это, чтобы сделать что-то, кроме установки вашего приложения из App Store, когда приложение не установлено, например открыть веб-версию содержимого или отобразить рекламную страницу для вашего приложения.
setIpadBundleId Идентификатор пакета приложения iOS для использования на iPad для открытия ссылки. Приложение должно быть подключено к вашему проекту на странице обзора консоли Firebase.
setMinimumVersion Номер версии минимальной версии вашего приложения, которая может открыть ссылку. Этот флаг передается вашему приложению при его открытии, и ваше приложение должно решить, что с ним делать.
НавигацияИнформацияПараметры
setForcedRedirectEnabled Если установлено значение «1», пропустить страницу предварительного просмотра приложения при открытии динамической ссылки и вместо этого перенаправить в приложение или магазин. Страница предварительного просмотра приложения (включена по умолчанию) может более надежно направлять пользователей в наиболее подходящее место назначения, когда они открывают динамические ссылки в приложениях; однако, если вы ожидаете, что динамическая ссылка будет открываться только в приложениях, которые могут надежно открывать динамические ссылки без этой страницы, вы можете отключить ее с помощью этого параметра. Этот параметр повлияет на поведение Dynamic Link только на iOS.
SocialMetaTagParameters
setTitle Заголовок, используемый при публикации динамической ссылки в публикации в социальной сети.
setDescription Описание, используемое при публикации динамической ссылки в публикации в социальной сети.
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.

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

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

Kotlin+KTX

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.ktx.component1 and
    // com.google.firebase.dynamiclinks.ktx.component2

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