Получите динамические ссылки 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 и идентификатора команды.

  3. На сайте разработчика Apple создайте профиль подготовки для своего приложения с включенной возможностью связанного домена.

  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. Необязательно: отключите использование монтажного стола iOS в Dynamic Links SDK.

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