Как создавать динамические ссылки в приложении 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, откройте страницу Project settings (Настройки проекта) в консоли Firebase и убедитесь, что вы указали ключ подписи SHA-1. Если вы используете ссылки на приложения, также укажите ключ SHA-256.

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

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

      Если у вас уже есть домен 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, который может обрабатывать ваше приложение. Обычно это контент или полезная нагрузка приложения, которые инициируют логику, характерную для приложения (например, зачисление пользователю купона или показ экрана приветствия). Ссылка должна быть правильно отформатирована, закодирована и использовать протокол HTTP или HTTPS. Нельзя использовать другую динамическую ссылку.
setDomainUriPrefix Префикс URL динамической ссылки, который можно найти в консоли Firebase. Примеры доменов динамических ссылок:
https://example.com/link
https://example.page.link
AndroidParameters
setFallbackUrl Ссылка, которая открывается, если приложение не установлено. Укажите это значение, чтобы при отсутствии приложения на устройстве пользователя выполнялось другое действие, например открывалась мобильная версия контента или рекламная страница приложения.
setMinimumVersion versionCode минимальной версии приложения, которая может открыть ссылку. Если установлена более ранняя версия приложения, пользователь перенаправляется в Google Play, чтобы обновить его.
IosParameters
setAppStoreId Идентификатор приложения в App Store, который используется для перенаправления пользователей в App Store, если приложение не установлено.
setFallbackUrl Ссылка, которая открывается, если приложение не установлено. Укажите это значение, если хотите, чтобы при отсутствии приложения выполнялось другое действие, например открывалась мобильная версия контента или рекламная страница приложения.
setCustomScheme Специальная схема URL вашего приложения, если она отличается от идентификатора пакета приложения.
setIpadFallbackUrl Ссылка, которая будет открываться на iPad, если приложение не установлено. Укажите это значение, если хотите, чтобы при отсутствии приложения выполнялось другое действие, например открывалась веб-версия контента или рекламная страница приложения.
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`) передаются в магазин приложений.