Как создавать динамические ссылки в приложении Flutter

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

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

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

  1. Установите и инициализируйте Firebase SDK для Flutter, если вы ещё этого не сделали.

  2. Чтобы установить плагин Dynamic Links, в корневом каталоге проекта Flutter выполните следующую команду:

    flutter pub add firebase_dynamic_links
    
  3. Если вы создаете приложение для Android, откройте страницу Настройки проекта в консоли Firebase и убедитесь, что указали ключ подписи SHA-1. Если вы используете ссылки на приложения, также укажите ключ SHA-256.

  4. В консоли Firebase откройте раздел Dynamic Links.

    1. Если вы ещё не настроили домен для динамических ссылок, нажмите кнопку Начать и следуйте инструкциям.

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

    2. Рекомендуется. В меню "Ещё" (⋮) укажите шаблоны URL, разрешенные для ссылок на контент и резервных ссылок. Это не позволит посторонним лицам создавать динамические ссылки, которые перенаправляют с вашего домена на сайты, вам не принадлежащие.

      Подробнее о том, как разрешить определенные шаблоны URL…

Чтобы создать динамическую ссылку, создайте новый объект DynamicLinkParameters и передайте его в buildLink() или buildShortLink().

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

final dynamicLinkParams = DynamicLinkParameters(
  link: Uri.parse("https://www.example.com/"),
  uriPrefix: "https://example.page.link",
  androidParameters: const AndroidParameters(packageName: "com.example.app.android"),
  iosParameters: const IOSParameters(bundleId: "com.example.app.ios"),
);
final dynamicLink =
    await FirebaseDynamicLinks.instance.buildLink(dynamicLinkParams);

Чтобы создать короткую динамическую ссылку, передайте объект DynamicLinkParameters в buildShortLink(). Для создания короткой ссылки требуется сетевой запрос. Пример:

final dynamicLinkParams = DynamicLinkParameters(
  link: Uri.parse("https://www.example.com/"),
  uriPrefix: "https://example.page.link",
  androidParameters: const AndroidParameters(packageName: "com.example.app.android"),
  iosParameters: const IOSParameters(bundleId: "com.example.app.ios"),
);
final dynamicLink =
    await FirebaseDynamicLinks.instance.buildShortLink(dynamicLinkParams);

По умолчанию короткие динамические ссылки создаются с суффиксами длиной всего в несколько символов. Хотя это делает ссылки более компактными, также появляется вероятность того, что кто-то может угадать действительную короткую ссылку. Часто в этом нет ничего страшного, поскольку ссылка ведет на общедоступную информацию.

Однако если короткие ссылки ведут к информации, относящейся к определенному пользователю, вам следует создавать более длинные ссылки с 17-символьными суффиксами, чтобы снизить вероятность того, что кто-то сможет угадать действительную динамическую ссылку. Для этого передайте значение ShortDynamicLinkType.unguessable методу buildShortLink():

final unguessableDynamicLink = await FirebaseDynamicLinks.instance.buildShortLink(
    dynamicLinkParams,
    shortLinkType: ShortDynamicLinkType.unguessable,
);

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

В примере ниже показано, как создать динамическую ссылку с несколькими распространенными параметрами:

final dynamicLinkParams = DynamicLinkParameters(
  link: Uri.parse("https://www.example.com/"),
  uriPrefix: "https://example.page.link",
  androidParameters: const AndroidParameters(
    packageName: "com.example.app.android",
    minimumVersion: 30,
  ),
  iosParameters: const IOSParameters(
    bundleId: "com.example.app.ios",
    appStoreId: "123456789",
    minimumVersion: "1.0.1",
  ),
  googleAnalyticsParameters: const GoogleAnalyticsParameters(
    source: "twitter",
    medium: "social",
    campaign: "example-promo",
  ),
  socialMetaTagParameters: SocialMetaTagParameters(
    title: "Example of a Dynamic Link",
    imageUrl: Uri.parse("https://example.com/image.png"),
  ),
);
final dynamicLink =
    await FirebaseDynamicLinks.instance.buildShortLink(dynamicLinkParams);

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

Параметры DynamicLink
setLink Ссылка, которую откроет ваше приложение. Укажите URL, который может обработать ваше приложение. Обычно это контент или полезная нагрузка приложения, которая запускает логику приложения (например, начисление пользователю купона или показ экрана приветствия). Ссылка должна быть правильно отформатирована, закодирована с помощью URL, использовать протокол HTTP или HTTPS и не быть динамической ссылкой.
setDomainUriPrefix Префикс URL динамической ссылки, который можно найти в консоли Firebase. Домен динамической ссылки выглядит примерно так:
https://example.com/link
https://example.page.link
AndroidParameters
setFallbackUrl Ссылка, которая откроется, если приложение не установлено. Укажите этот параметр, чтобы при отсутствии приложения в Google Play выполнялось другое действие, например открывалась мобильная веб-версия контента или страница с рекламой приложения.
setMinimumVersion Значение versionCode минимальной версии приложения, которая может открыть ссылку. Если установлена более старая версия приложения, пользователь будет перенаправлен в Google Play, чтобы обновить приложение.
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 изображения, связанного с этой ссылкой. Размер изображения должен быть не менее 300 x 200 пикселей, а размер файла – не более 300 КБ.
GoogleAnalyticsParameters
setSource
setMedium
setCampaign
setTerm
setContent
Параметры аналитики Google Play. Эти параметры (utm_source, utm_medium, utm_campaign, utm_term, utm_content) передаются в Google Play и добавляются в полезную нагрузку ссылки.
ItunesConnectAnalyticsParameters
setProviderToken
setAffiliateToken
setCampaignToken
Параметры аналитики iTunes Connect. Эти параметры (`pt`, `at`, `ct`) передаются в App Store.