Чтобы получить Firebase Dynamic Links, который
вы создали, необходимо добавить в приложение SDK Dynamic Links и вызвать методы handleUniversalLink: и dynamicLinkFromCustomSchemeURL: при загрузке приложения, чтобы получить данные, переданные в Dynamic Link.
Требования
Прежде всего добавьте Firebase в проект iOS.
Настройте Firebase и SDK Dynamic Links
Для установки зависимостей Firebase и управления ими используйте Swift Package Manager.
- Откройте проект приложения в Xcode и перейдите в меню File (Файл) > Add Packages (Добавить пакеты).
- Когда появится запрос, добавьте хранилище Firebase SDK для платформ Apple:
- Выберите библиотеку Dynamic Links.
- Добавьте флаг
-ObjCв раздел Other Linker Flags (Другие флаги компоновщика) в настройках сборки целевого объекта. - Чтобы использовать все возможности Dynamic Links, рекомендуем включить Google Analytics в проекте Firebase и добавить в приложение Firebase SDK для Google Аналитики. Вы можете выбрать подходящую библиотеку в зависимости от того, нужно ли собирать IDFA. Ознакомьтесь с разделом часто задаваемых вопросов о последней организации модулей в Google Analytics для Firebase SDK.
- После этого Xcode автоматически начнет распознавать и скачивать зависимости в фоновом режиме.
https://github.com/firebase/firebase-ios-sdk.git
Затем выполните настройку:
- В консоли Firebase откройте раздел Dynamic Links. Примите Условия использования, если появится запрос.
-
Убедитесь, что в настройках приложения указаны его идентификатор в магазине приложений и префикс идентификатора. Чтобы посмотреть и изменить настройки приложения, перейдите на страницу настроек проекта 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.
По умолчанию SDK Dynamic Links использует буфер обмена, чтобы повысить надежность ссылок на контент после установки. Благодаря буферу обмена Dynamic Links может гарантировать, что если пользователь открывает Dynamic Link, но ему сначала нужно установить ваше приложение, то после установки и первого запуска приложения он сразу перейдет к исходному контенту, на который ведет ссылка.
Недостаток этого подхода в том, что использование буфера обмена вызывает уведомление в iOS 14 и более поздних версиях. Поэтому при первом запуске приложения, если в буфере обмена есть URL, пользователи увидят уведомление о том, что приложение получило доступ к буферу обмена. Это может вызвать у них вопросы.
Чтобы отключить эту функцию, отредактируйте файл
Info.plistпроекта Xcode и задайте для ключаFirebaseDeepLinkPasteboardRetrievalEnabledзначениеNO.
Открыть Dynamic Links в приложении
- На вкладке Info (Информация) проекта Xcode создайте новый тип URL для Dynamic Links. В поле Identifier (Идентификатор) укажите уникальное значение, а в поле URL scheme (Схема URL) – идентификатор пакета, который является схемой URL по умолчанию для Dynamic Links.
- На вкладке Capabilities (Возможности) проекта Xcode включите параметр Associated Domains (Связанные домены) и добавьте в список Associated Domains (Связанные домены) следующее:
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 // ...
Swift
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()
Swift
// 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:обработайте ссылки, полученные как универсальные ссылки, когда приложение уже установлено:Swift
Примечание. Этот продукт недоступен для 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 не будет найден, этот метод будет вызван с параметром
DynamicLinkurl, для которого задано значениеnil. Это означает, что SDK не удалось найти соответствующий ожидающий Dynamic Link.Swift
Примечание. Этот продукт недоступен для 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; }