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