Чтобы получить созданные вами Firebase Dynamic Links , необходимо включить Dynamic Links SDK в свое приложение и вызывать методы handleUniversalLink:
и dynamicLinkFromCustomSchemeURL:
при загрузке приложения, чтобы получить данные, переданные в Dynamic Link .
Предпосылки
Прежде чем начать, обязательно добавьте Firebase в свой проект iOS .
Настройка Firebase и Dynamic Links SDK
Используйте Swift Package Manager для установки и управления зависимостями Firebase.
- В Xcode откройте проект приложения и перейдите в Файл > Добавить пакеты .
- При появлении запроса добавьте репозиторий Firebase Apple Platforms SDK:
- Выберите библиотеку Dynamic Links .
- Добавьте флаг
-ObjC
в раздел «Другие флаги компоновщика» настроек сборки вашей целевой системы. - Для оптимальной работы с Dynamic Links рекомендуем включить Google Analytics в вашем проекте Firebase и добавить Firebase SDK для Google Analytics в приложение. Вы можете выбрать библиотеку без сбора IDFA или с его сбором. См. раздел часто задаваемых вопросов о новой организации модулей в Google Analytics для Firebase SDK .
- После завершения Xcode автоматически начнет разрешать и загружать ваши зависимости в фоновом режиме.
https://github.com/firebase/firebase-ios-sdk.git
Теперь выполните некоторые шаги по настройке:
- В консоли Firebase откройте раздел Dynamic Links . Примите условия обслуживания, если будет предложено это сделать.
Убедитесь, что идентификатор App Store и префикс идентификатора приложения указаны в настройках приложения. Чтобы просмотреть и изменить настройки приложения, перейдите на страницу настроек проекта Firebase и выберите приложение iOS.
Вы можете убедиться, что ваш проект Firebase правильно настроен для использования Dynamic Links в вашем приложении iOS, открыв следующий URL-адрес:
https://your_dynamic_links_domain/apple-app-site-association
Если ваше приложение подключено, файл
apple-app-site-association
содержит ссылку на префикс идентификатора приложения и идентификатор пакета вашего приложения. Например:{"applinks":{"apps":[],"details":[{"appID":"1234567890.com.example.ios","paths":["NOT /_/*","/*"]}]}}
Если поле
details
пустое, ещё раз проверьте, правильно ли вы указали префикс идентификатора приложения. Обратите внимание, что префикс идентификатора приложения может не совпадать с префиксом идентификатора вашей команды.Необязательно : отключите использование Dynamic Links SDK ссылок на монтажный стол iOS.
По умолчанию Dynamic Links SDK использует буфер обмена для повышения надёжности глубоких ссылок после установки. Благодаря буферу обмена Dynamic Links гарантирует, что когда пользователь открывает Dynamic Link , но сначала ему необходимо установить ваше приложение, он сразу же переходит к исходному связанному контенту при первом открытии приложения после установки.
Недостатком этого подхода является то, что использование буфера обмена вызывает уведомление в iOS 14 и более поздних версиях. Таким образом, при первом открытии приложения, если буфер обмена содержит URL, пользователи увидят уведомление о том, что ваше приложение обратилось к буферу обмена, что может вызвать путаницу.
Чтобы отключить это поведение, отредактируйте файл
Info.plist
вашего проекта Xcode и установите для ключаFirebaseDeepLinkPasteboardRetrievalEnabled
значениеNO
.
Откройте Dynamic Links в вашем приложении
- На вкладке «Информация» проекта Xcode вашего приложения создайте новый тип URL-адреса для использования в Dynamic Links . В поле «Идентификатор» укажите уникальное значение, а в поле «Схема URL» — идентификатор вашего пакета, который представляет собой схему URL-адресов по умолчанию, используемую Dynamic Links .
- На вкладке Возможности проекта Xcode вашего приложения включите Связанные домены и добавьте в список связанных доменов следующее:
applinks:your_dynamic_links_domain
- Если вы хотите получать Dynamic Links с полностью настраиваемым доменом , в файле
Info.plist
вашего проекта Xcode создайте ключFirebaseDynamicLinksCustomDomains
и укажите в нём префиксы URL-адресов Dynamic Links вашего приложения. Например:FirebaseDynamicLinksCustomDomains https://example.com/promos https://example.com/links/share - Импортируйте модуль
FirebaseCore
вUIApplicationDelegate
, а также любые другие модули Firebase, используемые вашим делегатом приложения. Например, чтобы использовать Cloud Firestore и Authentication :SwiftUI
import SwiftUI import FirebaseCore import FirebaseFirestore import FirebaseAuth // ...
Быстрый
import FirebaseCore import FirebaseFirestore import FirebaseAuth // ...
Objective-C
@import FirebaseCore; @import FirebaseFirestore; @import FirebaseAuth; // ...
- Настройте общий экземпляр
FirebaseApp
в методеapplication(_:didFinishLaunchingWithOptions:)
делегата вашего приложения:SwiftUI
// Use Firebase library to configure APIs FirebaseApp.configure()
Быстрый
// Use Firebase library to configure APIs FirebaseApp.configure()
Objective-C
// Use Firebase library to configure APIs [FIRApp configure];
- Если вы используете SwiftUI, необходимо создать делегат приложения и прикрепить его к структуре
App
черезUIApplicationDelegateAdaptor
илиNSApplicationDelegateAdaptor
. Также необходимо отключить подмену делегата приложения. Подробнее см. в инструкциях по SwiftUI .SwiftUI
@main struct YourApp: App { // register app delegate for Firebase setup @UIApplicationDelegateAdaptor(AppDelegate.self) var delegate var body: some Scene { WindowGroup { NavigationView { ContentView() } } } }
- Далее в
application:continueUserActivity:restorationHandler:
обрабатывайте ссылки, полученные как универсальные ссылки , когда приложение уже установлено:Быстрый
Примечание: этот продукт недоступен на платформах macOS, Mac Catalyst, tvOS или watchOS.func application(_ application: UIApplication, continue userActivity: NSUserActivity, restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void) -> Bool { let handled = DynamicLinks.dynamicLinks() .handleUniversalLink(userActivity.webpageURL!) { dynamiclink, error in // ... } return handled }
Objective-C
Примечание: этот продукт недоступен на платформах macOS, Mac Catalyst, tvOS или watchOS.- (BOOL)application:(UIApplication *)application continueUserActivity:(nonnull NSUserActivity *)userActivity restorationHandler: #if defined(__IPHONE_12_0) && (__IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_12_0) (nonnull void (^)(NSArray<id
> *_Nullable))restorationHandler { #else (nonnull void (^)(NSArray *_Nullable))restorationHandler { #endif // __IPHONE_12_0 BOOL handled = [[FIRDynamicLinks dynamicLinks] handleUniversalLink:userActivity.webpageURL completion:^(FIRDynamicLink * _Nullable dynamicLink, NSError * _Nullable error) { // ... }]; return handled; } - Наконец, в
application:openURL:options:
обрабатываются ссылки, полученные через собственную схему URL вашего приложения. Этот метод вызывается при первом открытии приложения после установки.Если при первом запуске приложения Dynamic Link не найдена, этот метод будет вызван с
url
DynamicLink
, установленным наnil
, что указывает на то, что SDK не удалось найти соответствующую ожидающую Dynamic Link .Быстрый
Примечание: этот продукт недоступен на платформах macOS, Mac Catalyst, tvOS или watchOS.@available(iOS 9.0, *) func application(_ app: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey: Any]) -> Bool { return application(app, open: url, sourceApplication: options[UIApplication.OpenURLOptionsKey .sourceApplication] as? String, annotation: "") } func application(_ application: UIApplication, open url: URL, sourceApplication: String?, annotation: Any) -> Bool { if let dynamicLink = DynamicLinks.dynamicLinks().dynamicLink(fromCustomSchemeURL: url) { // Handle the deep link. For example, show the deep-linked content or // apply a promotional offer to the user's account. // ... return true } return false }
Objective-C
Примечание: этот продукт недоступен на платформах macOS, Mac Catalyst, tvOS или watchOS.- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary
*)options { return [self application:app openURL:url sourceApplication:options[UIApplicationOpenURLOptionsSourceApplicationKey] annotation:options[UIApplicationOpenURLOptionsAnnotationKey]]; } - (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation { FIRDynamicLink *dynamicLink = [[FIRDynamicLinks dynamicLinks] dynamicLinkFromCustomSchemeURL:url]; if (dynamicLink) { if (dynamicLink.url) { // Handle the deep link. For example, show the deep-linked content, // apply a promotional offer to the user's account or show customized onboarding view. // ... } else { // Dynamic link has empty deep link. This situation will happens if // Firebase Dynamic Links iOS SDK tried to retrieve pending dynamic link, // but pending link is not available for this device/App combination. // At this point you may display default onboarding view. } return YES; } return NO; }