Чтобы получить созданные вами Firebase Dynamic Links , вы должны включить SDK Dynamic Links в свое приложение и вызвать методы handleUniversalLink:
и dynamicLinkFromCustomSchemeURL:
при загрузке приложения, чтобы получить данные, передаваемые в Dynamic Link .
Предварительные условия
Прежде чем начать, обязательно добавьте Firebase в свой проект iOS .
Настройка Firebase и SDK Dynamic Links
Используйте Swift Package Manager для установки зависимостей Firebase и управления ими.
- В Xcode, открыв проект приложения, выберите «Файл» > «Добавить пакеты» .
- При появлении запроса добавьте репозиторий Firebase SDK для платформ Apple:
- Выберите библиотеку Dynamic Links .
- Добавьте флаг
-ObjC
в раздел «Другие флаги компоновщика» настроек сборки вашей цели. - Для оптимальной работы с Dynamic Links мы рекомендуем включить Google Analytics в вашем проекте Firebase и добавить Firebase SDK для Google Analytics в ваше приложение. Вы можете выбрать библиотеку без коллекции IDFA или с коллекцией IDFA.
- По завершении 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
пусто, еще раз проверьте, указали ли вы префикс идентификатора приложения. Обратите внимание, что префикс вашего идентификатора приложения может не совпадать с вашим идентификатором команды.Необязательно : отключите использование монтажного стола iOS в Dynamic Links SDK.
По умолчанию пакет 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 // ...
Цель-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()
Цель-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 }
Цель-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<UIUserActivityRestoring>> *_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 }
Цель-C
Примечание. Этот продукт недоступен для macOS, Mac Catalyst, tvOS или watchOS.- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<NSString *, id> *)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; }