Catch up on highlights from Firebase at Google I/O 2023. Learn more

Получение динамических ссылок Firebase в приложении Flutter

Чтобы получить созданные вами динамические ссылки Firebase, вы должны включить SDK динамических ссылок в свое приложение и вызвать метод FirebaseDynamicLinks.getDynamicLink() при загрузке приложения, чтобы получить данные, переданные в динамической ссылке.

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

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

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

Интеграция с платформой

Выполните следующие шаги по интеграции платформы для платформ, для которых вы создаете свое приложение.

Андроид

На Android вы должны добавить новый фильтр намерений, улавливающий глубокие ссылки вашего домена, поскольку динамическая ссылка будет перенаправлять на ваш домен, если ваше приложение установлено. Это необходимо для того, чтобы ваше приложение получало данные Dynamic Link после его установки/обновления из Play Store и нажатия кнопки «Продолжить». В AndroidManifest.xml :

<intent-filter>
    <action android:name="android.intent.action.VIEW"/>
    <category android:name="android.intent.category.DEFAULT"/>
    <category android:name="android.intent.category.BROWSABLE"/>
    <data
        android:host="example.com"
        android:scheme="https"/>
</intent-filter>

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

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

Платформы Apple

  1. Создайте учетную запись разработчика Apple, если у вас ее еще нет.

  2. На странице настроек проекта консоли Firebase убедитесь, что ваше приложение iOS правильно настроено с вашим идентификатором App Store и Team ID.

  3. На сайте Apple Developer создайте профиль подготовки для своего приложения с включенной функцией «Связанный домен».

  4. В Xcode сделайте следующее:

    1. Откройте свое приложение под заголовком TARGETS .

    2. На странице «Подписание и возможности» убедитесь, что ваша команда зарегистрирована и настроен ваш профиль подготовки.

    3. На странице «Подписание и возможности» включите «Связанные домены» и добавьте в список «Связанные домены» следующее (замените пример своим доменом):

      applinks:example.page.link
      
    4. На странице информации добавьте тип URL в свой проект. В поле Схемы URL укажите идентификатор пакета вашего приложения. (Идентификатор может быть Bundle ID или любым другим по вашему желанию.)

    5. Если вы настроили собственный домен для своего проекта Firebase, добавьте префикс URL-адреса динамической ссылки в файл Info.plist вашего проекта iOS с помощью ключа FirebaseDynamicLinksCustomDomains .

      <?xml version="1.0" encoding="UTF-8"?>
      <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
      <plist version="1.0">
      <dict>
      <key>FirebaseDynamicLinksCustomDomains</key>
      <array>
          <string>https://custom.domain.io/path1</string>
          <string>https://custom.domain.io/path2</string>
      </array>
      
      ...other settings
      
      </dict>
      </plist>
      
    6. Необязательно: отключите использование SDK Dynamic Links монтажного стола iOS.

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

      Недостатком этого является то, что использование монтажного стола вызывает уведомление на iOS 14 и более поздних версиях. Таким образом, когда пользователи впервые откроют ваше приложение, если монтажный стол содержит URL-адрес динамической ссылки, они увидят уведомление о том, что ваше приложение получило доступ к монтажному столу, что может вызвать путаницу.

      Чтобы отключить это поведение, отредактируйте файл Info.plist вашего проекта Xcode и установите для ключа FirebaseDeepLinkPasteboardRetrievalEnabled NO .

Для обработки динамической ссылки в приложении необходимо реализовать два сценария.

Прекращенное состояние

Настройте следующие методы:

  1. FirebaseDynamicLinks.getInitialLink — возвращает Future<PendingDynamicLinkData?>
  2. FirebaseDynamicLinks.onLink — обработчик событий, который возвращает Stream , содержащий PendingDynamicLinkData?

Android всегда будет получать ссылку через FirebaseDynamicLinks.getInitialLink из завершенного состояния, но на iOS это не гарантируется. Поэтому стоит настроить их обоих в следующем порядке, чтобы ваше приложение получило ссылку:

Future<void> main() async {
  WidgetsFlutterBinding.ensureInitialized();
  await Firebase.initializeApp(options: DefaultFirebaseConfig.platformOptions);

  // Check if you received the link via `getInitialLink` first
  final PendingDynamicLinkData? initialLink = await FirebaseDynamicLinks.instance.getInitialLink();

  if (initialLink != null) {
    final Uri deepLink = initialLink.link;
    // Example of using the dynamic link to push the user to a different screen
    Navigator.pushNamed(context, deepLink.path);
  }

  FirebaseDynamicLinks.instance.onLink.listen(
        (pendingDynamicLinkData) {
          // Set up the `onLink` event listener next as it may be received here
          if (pendingDynamicLinkData != null) {
            final Uri deepLink = pendingDynamicLinkData.link;
            // Example of using the dynamic link to push the user to a different screen
            Navigator.pushNamed(context, deepLink.path);
          }
        },
      );

  runApp(MyApp(initialLink));
}

Затем в логике вашего приложения вы можете проверить, была ли обработана ссылка, и выполнить действие, например:

if (initialLink != null) {
  final Uri deepLink = initialLink.link;
  // Example of using the dynamic link to push the user to a different screen
  Navigator.pushNamed(context, deepLink.path);
}

Состояние фона/переднего плана

Пока приложение открыто или работает в фоновом режиме, используйте геттер FirebaseDynamicLinks.onLink :

FirebaseDynamicLinks.instance.onLink.listen((dynamicLinkData) {
  Navigator.pushNamed(context, dynamicLinkData.link.path);
}).onError((error) {
  // Handle errors
});

В качестве альтернативы, если вы хотите определить, использовалась ли для открытия приложения конкретная динамическая ссылка, вместо этого передайте ее методу getDynamicLink :

String link = 'https://dynamic-link-domain/ke2Qa';

final PendingDynamicLinkData? initialLink = await FirebaseDynamicLinks.instance.getDynamicLink(Uri.parse(link));

Чтобы протестировать динамическую ссылку на iOS, необходимо использовать реальное устройство. Вам также потребуется запустить приложение в режиме выпуска (т. е. flutter run --release .), если вы тестируете динамическую ссылку из завершенного (т. е. приложение было закрыто) состояния приложения.