To receive the Firebase Dynamic Links that you created , you must include the Dynamic Links SDK in your app and call the handleUniversalLink: and dynamicLinkFromCustomSchemeURL: methods when your app loads to get the data passed in the Dynamic Link .
Предварительные требования
Прежде чем начать, обязательно добавьте Firebase в свой iOS-проект .
Настройте Firebase и Dynamic Links SDK.
Используйте Swift Package Manager для установки и управления зависимостями Firebase.
- В Xcode, открыв проект приложения, перейдите в меню File > Add Packages .
- При появлении запроса добавьте репозиторий Firebase Apple Platforms SDK:
- Выберите библиотеку Dynamic Links .
- Добавьте флаг
-ObjCв раздел «Другие флаги компоновщика» в настройках сборки вашей целевой системы. - For an optimal experience with Dynamic Links , we recommend enabling Google Analytics in your Firebase project and adding the Firebase SDK for Google Analytics to your app. You can select either the library without IDFA collection or with IDFA collection. See our FAQ on the latest organization of modules in the Google Analytics for Firebase SDK .
- После завершения Xcode автоматически начнет разрешение и загрузку ваших зависимостей в фоновом режиме.
https://github.com/firebase/firebase-ios-sdk.git
Теперь выполните несколько шагов по настройке:
- В консоли Firebase откройте раздел Dynamic Links . Примите условия использования, если появится соответствующий запрос.
Ensure that your app's App Store ID and your App ID prefix is specified in your app's settings. To view and edit your app's settings, go to your Firebase project's Settings page and select your iOS app.
Вы можете убедиться в правильности настройки 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 .
By default, the Dynamic Links SDK uses the pasteboard to improve the reliability of post-install deep links. By using the pasteboard, Dynamic Links can make sure that when a user opens a Dynamic Link but needs to install your app first, the user can go immediately to the original linked content when opening the app for the first time after installation.
The downside of this is that use of the pasteboard triggers a notification on iOS 14 and later. So, the first time users open your app, if the pasteboard contains a URL, they will see a notification that your app accessed the pasteboard, which can cause confusion.
Чтобы отключить это поведение, отредактируйте файл
Info.plistвашего проекта Xcode и установите для параметраFirebaseDeepLinkPasteboardRetrievalEnabledзначениеNO.
Откройте Dynamic Links в своем приложении
- In the Info tab of your app's Xcode project, create a new URL type to be used for Dynamic Links . Set the Identifier field to a unique value and the URL scheme field to be your bundle identifier, which is the default URL scheme used by Dynamic Links .
- На вкладке «Возможности» проекта Xcode вашего приложения включите параметр «Связанные домены» и добавьте в список связанных доменов следующее:
applinks:your_dynamic_links_domain
- If you want to receive Dynamic Links with a fully-custom domain , in your Xcode project's
Info.plistfile, create a key calledFirebaseDynamicLinksCustomDomainsand set it to your app's Dynamic Links URL prefixes. For example: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 вашего приложения. Этот метод вызывается при первом открытии приложения после установки.If the Dynamic Link isn't found on your app's first launch, this method will be called with the
DynamicLink'surlset tonil, indicating that the SDK failed to find a matching pending 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; }