Как создавать динамические ссылки в приложении 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, который может обрабатывать ваше приложение. Обычно это контент или полезная нагрузка приложения, которая запускает логику приложения (например, начисление пользователю купона или показ экрана приветствия). Ссылка должна быть правильно отформатированным 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`) передаются в магазин приложений.