Чтобы получить созданные вами Firebase Dynamic Links , необходимо включить SDK Dynamic Links в ваше приложение и вызвать методы handleUniversalLink: и dynamicLinkFromCustomSchemeURL: при загрузке приложения, чтобы получить данные, переданные в Dynamic Link .
Предварительные требования
Прежде чем начать, обязательно добавьте Firebase в свой iOS-проект .
Настройте Firebase и Dynamic Links SDK.
Используйте Swift Package Manager для установки и управления зависимостями Firebase.
- В Xcode, открыв проект приложения, перейдите в меню File > Add Packages .
- При появлении запроса добавьте репозиторий Firebase Apple Platforms SDK:
- Выберите библиотеку Dynamic Links .
- Добавьте флаг
-ObjCв раздел «Другие флаги компоновщика» в настройках сборки вашей целевой системы. - Для оптимальной работы с Dynamic Links мы рекомендуем включить Google Analytics в вашем проекте Firebase и добавить Firebase SDK для Google Analytics в ваше приложение. Вы можете выбрать библиотеку без сбора IDFA или со сбором IDFA. См. раздел часто задаваемых вопросов (FAQ) о последней организации модулей в Google Analytics для Firebase SDK .
- После завершения Xcode автоматически начнет разрешение и загрузку ваших зависимостей в фоновом режиме.
https://github.com/firebase/firebase-ios-sdk.git
Теперь выполните несколько шагов по настройке:
- В консоли Firebase откройте раздел Dynamic Links . Примите условия использования, если появится соответствующий запрос.
Убедитесь, что в настройках вашего приложения указаны идентификатор приложения в App Store и префикс вашего идентификатора приложения. Чтобы просмотреть и отредактировать настройки приложения, перейдите на страницу настроек вашего проекта Firebase и выберите ваше iOS-приложение.
Вы можете убедиться в правильности настройки Dynamic Links в вашем iOS-приложении для вашего проекта Firebase, открыв следующую ссылку:
https://your_dynamic_links_domain/apple-app-site-association
Если ваше приложение подключено, файл
apple-app-site-associationсодержит ссылку на префикс App ID и идентификатор пакета вашего приложения. Например:{"applinks":{"apps":[],"details":[{"appID":"1234567890.com.example.ios","paths":["NOT /_/*","/*"]}]}}Если поле
detailsпустое, убедитесь, что вы указали префикс идентификатора приложения. Обратите внимание, что префикс идентификатора приложения может не совпадать с префиксом идентификатора вашей команды.Необязательно : Отключить использование буфера обмена iOS в SDK Dynamic Links .
По умолчанию SDK Dynamic Links использует буфер обмена для повышения надежности прямых ссылок после установки приложения. Благодаря использованию буфера обмена 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 не будет найдена при первом запуске вашего приложения, этот метод будет вызван с
urlDynamicLink, установленным в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; }