Чтобы получить созданные вами динамические ссылки Firebase, необходимо включить Dynamic Links SDK в свое приложение и вызвать метод FirebaseDynamicLinks.getDynamicLink()
при загрузке приложения, чтобы получить данные, переданные в динамической ссылке.
Настройка Firebase и Dynamic Links SDK
Установите и инициализируйте Firebase SDKs для Flutter, если вы еще этого не сделали.
Из корневого каталога вашего проекта Flutter выполните следующую команду, чтобы установить плагин Dynamic Links:
flutter pub add firebase_dynamic_links
Если вы разрабатываете приложение для Android, откройте страницу настроек проекта в консоли Firebase и убедитесь, что вы указали ключ подписи SHA-1. Если вы используете App Links, укажите также ключ SHA-256.
Интеграция платформы
Выполните следующие шаги по интеграции платформ, для которых вы создаете свое приложение.
Андроид
На Android необходимо добавить новый фильтр намерений (Intent Filter), который будет перехватывать внешние ссылки вашего домена, поскольку динамическая ссылка будет перенаправлять на ваш домен при установке приложения. Это необходимо для того, чтобы ваше приложение получало данные динамической ссылки после установки/обновления из 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 сделайте следующее:
Откройте приложение под заголовком ЦЕЛИ .
На странице «Подписание и возможности» убедитесь, что ваша команда зарегистрирована и ваш профиль обеспечения настроен.
На странице «Подписание и возможности» включите «Связанные домены» и добавьте следующее в список «Связанные домены» (замените в примере свой домен):
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 ссылок на монтажный стол iOS.
По умолчанию Dynamic Links SDK использует буфер обмена для повышения надёжности глубоких ссылок после установки. Благодаря буферу обмена Dynamic Links гарантирует, что когда пользователь открывает динамическую ссылку, но сначала ему необходимо установить ваше приложение, он сразу же переходит к исходному связанному контенту при первом открытии приложения после установки.
Недостатком этого является то, что использование буфера обмена вызывает уведомление в 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
.), если вы тестируете динамическую ссылку из завершённого состояния приложения (например, после свайпа).