Чтобы получить созданные вами динамические ссылки Firebase, вы должны включить SDK динамических ссылок в свое приложение и вызвать метод FirebaseDynamicLinks.getDynamicLink()
при загрузке приложения, чтобы получить данные, переданные в динамической ссылке.
Настройте Firebase и Dynamic Links SDK
Установите и инициализируйте пакеты 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 и Team ID.
На сайте Apple Developer создайте профиль подготовки для своего приложения с включенной функцией «Связанный домен».
В 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>
Необязательно: отключите использование SDK Dynamic Links монтажного стола iOS.
По умолчанию 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
.), если тестируется динамическая ссылка из завершенного (т. е. приложение было закрыто) состояния приложения.