Catch up on everthing we announced at this year's Firebase Summit. 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 Банка Москвы , объявить зависимость для библиотеки динамической ссылки Android в вашем модуле (приложение уровня) Gradle файл (обычно app/build.gradle ).

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

    Джава

    dependencies {
        // Import the BoM for the Firebase platform
        implementation platform('com.google.firebase:firebase-bom:29.0.0')
    
        // 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 Банка Москвы , ваше приложение будет всегда использовать совместимые версии библиотек Firebase Android.

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

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

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

    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.0'
        implementation 'com.google.firebase:firebase-analytics:20.0.0'
    }
    

    Котлин + KTX

    dependencies {
        // Import the BoM for the Firebase platform
        implementation platform('com.google.firebase:firebase-bom:29.0.0')
    
        // 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 Банка Москвы , ваше приложение будет всегда использовать совместимые версии библиотек Firebase Android.

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

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

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

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

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

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

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

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

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

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

Джава

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

Котлин + 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

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

Джава

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

Котлин + 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 методе :

Джава

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

Котлин + KTX

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

Вы можете использовать API построителя динамических ссылок для создания динамических ссылок с любым из поддерживаемых параметров. Смотрите ссылку API для получения подробной информации.

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

Джава

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

Котлин + 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!"
    }
}

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

Параметры DynamicLink
setLink

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

setDomainUriPrefix Префикс URL-адреса динамической ссылки, который вы можете найти в консоли Firebase. Динамическая 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 Номер версии минимальной версии приложения , которое может открыть ссылку. Этот флаг передается вашему приложению при его открытии, и ваше приложение должно решить, что с ним делать.
NavigationInfoParameters
setForcedRedirectEnabled Если установлено значение «1», пропускать страницу предварительного просмотра приложения при открытии динамической ссылки и вместо этого выполнять перенаправление в приложение или магазин. Страница предварительного просмотра приложения (включена по умолчанию) может более надежно отправлять пользователей в наиболее подходящее место назначения, когда они открывают динамические ссылки в приложениях; однако, если вы ожидаете, что динамическая ссылка будет открываться только в приложениях, которые могут надежно открывать динамические ссылки без этой страницы, вы можете отключить ее с помощью этого параметра. Этот параметр повлияет на поведение динамической ссылки только на iOS.
SocialMetaTagParameters
setTitle Заголовок, который следует использовать, когда динамическая ссылка публикуется в сообщении в социальной сети.
setDescription Описание, которое следует использовать, когда динамическая ссылка публикуется в сообщении в социальной сети.
setImageUrl URL-адрес изображения, связанного с этой ссылкой. Размер изображения должен быть не менее 300x200 пикселей и не более 300 КБ.
GoogleAnalyticsParameters
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 вместо установки параметров с другими методами строителя:

Джава

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

Котлин + 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
    // ...
}