Чтобы получить созданные вами динамические ссылки Firebase, вы должны включить SDK динамических ссылок в свое приложение и вызвать метод FirebaseDynamicLinks.getDynamicLink()
при загрузке вашего приложения, чтобы получить данные, передаваемые в динамической ссылке.
Настройка Firebase и SDK Dynamic Links
Установите и инициализируйте Firebase SDK для Flutter, если вы еще этого не сделали.
В корневом каталоге вашего проекта Flutter выполните следующую команду, чтобы установить плагин Dynamic Links:
flutter pub add firebase_dynamic_links
Если вы создаете приложение для 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
Создайте учетную запись разработчика Apple, если у вас ее еще нет.
На странице настроек проекта консоли Firebase убедитесь, что ваше приложение iOS правильно настроено с использованием вашего идентификатора App Store и идентификатора команды.
На сайте разработчика Apple создайте профиль подготовки для своего приложения с включенной возможностью связанного домена.
В Xcode выполните следующие действия:
Откройте свое приложение под заголовком TARGETS .
На странице «Подписание и возможности» убедитесь, что ваша команда зарегистрирована и настроен профиль обеспечения.
На странице «Подписание и возможности» включите «Связанные домены» и добавьте следующее в список «Связанные домены» (замените пример своим доменом):
applinks:example.page.link
На странице «Информация» добавьте тип URL-адреса в свой проект. Установите в поле «Схемы URL-адресов» идентификатор пакета вашего приложения. (Идентификатором может быть
Bundle ID
или любой другой, который вы пожелаете.)Если вы настроили собственный домен для своего проекта 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>
Необязательно: отключите использование монтажного стола iOS в Dynamic Links SDK.
По умолчанию пакет Dynamic Links SDK использует монтажный стол для повышения надежности глубоких ссылок после установки. Используя монтажный стол, динамические ссылки могут гарантировать, что, когда пользователь открывает динамическую ссылку, но ему необходимо сначала установить ваше приложение, он может сразу же перейти к исходному связанному содержимому при первом открытии приложения после установки.
Обратной стороной этого является то, что использование монтажного стола вызывает уведомление на iOS 14 и более поздних версиях. Таким образом, когда пользователи впервые открывают ваше приложение и монтажный стол содержит URL-адрес динамической ссылки, они увидят уведомление о том, что ваше приложение получило доступ к монтажному столу, что может вызвать путаницу.
Чтобы отключить это поведение, отредактируйте файл
Info.plist
вашего проекта Xcode и установите для ключаFirebaseDeepLinkPasteboardRetrievalEnabled
значениеNO
.
Обработка глубоких ссылок
Для обработки динамической ссылки в вашем приложении необходимо реализовать два сценария.
Прекращенное состояние
Настройте следующие методы:
-
FirebaseDynamicLinks.getInitialLink
— возвращаетFuture<PendingDynamicLinkData?>
-
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
Чтобы протестировать динамическую ссылку на iOS, необходимо использовать реальное устройство. Вам также потребуется запустить приложение в режиме выпуска (т. е. flutter run --release
.), если вы тестируете динамическую ссылку из завершенного (т. е. приложения было закрыто) состояния приложения.