Join us for Firebase Summit on November 10, 2021. Tune in to learn how Firebase can help you accelerate app development, release with confidence, and scale with ease. Register

Получать динамические ссылки на iOS

Для того, чтобы получить Firebase динамические ссылки вы создали , вы должны включать в себя динамические ссылки SDK в вашем приложении и вызовите handleUniversalLink: и dynamicLinkFromCustomSchemeURL: методы , когда ваше приложение загружает , чтобы получить данные , передаваемые в Dynamic Link.

Предпосылки

Перед тем, как начать, убедитесь , чтобы добавить Firebase в свой проект IOS .

  1. Добавить Firebase в свой проект IOS .
  2. Включите следующий стручок в вашей Podfile :
    pod 'Firebase/Analytics'
    pod 'Firebase/DynamicLinks'
  3. Запуск pod install и откройте созданный .xcworkspace файл.
  4. В Firebase консоли откройте раздел Динамические ссылки. Примите условия обслуживания, если вам будет предложено это сделать.
  5. Убедитесь, что идентификатор вашего приложения в магазине приложений и префикс идентификатора приложения указаны в настройках вашего приложения. Для просмотра и редактирования настроек своего приложения, перейдите в раздел вашего проекта Firebase в странице Настройки и выберите приложение IOS.

    Вы можете убедиться, что ваш проект Firebase правильно настроен для использования динамических ссылок в вашем приложении iOS, открыв следующий URL:

    https://your_dynamic_links_domain/apple-app-site-association

    Если ваше приложение подключено, apple-app-site-association файл содержит ссылку на App ID префикса вашего приложения и расслоение ID. Например:

    {"applinks":{"apps":[],"details":[{"appID":"1234567890.com.example.ios","paths":["/*"]}]}}

    Если details поле пусто, дважды проверьте , что вы указали префикс App ID. Обратите внимание, что ваш префикс идентификатора приложения может не совпадать с идентификатором вашей группы.

  6. Дополнительно: использование отключить динамические ссылки SDK о монтажном столе IOS.

    По умолчанию SDK динамических ссылок использует монтажный стол для повышения надежности глубоких ссылок после установки. Используя монтажный стол, динамические ссылки могут гарантировать, что, когда пользователь открывает динамическую ссылку, но сначала ему нужно установить ваше приложение, пользователь может сразу перейти к исходному связанному содержимому при первом открытии приложения после установки.

    Обратной стороной этого является то, что использование монтажного стола вызывает уведомление в iOS 14 и более поздних версиях. Итак, когда пользователи впервые открывают ваше приложение, если на монтажном столе есть URL-адрес динамической ссылки, они увидят уведомление о том, что ваше приложение получило доступ к монтажному столу, что может вызвать путаницу.

    Чтобы отключить это поведение, отредактируйте Xcode проекта Info.plist файл и установить FirebaseDeepLinkPasteboardRetrievalEnabled ключ к NO .

  1. На вкладке Информация о проекте Xcode вашего приложения, создать новый тип URL , который будет использоваться для динамических ссылок. В поле Identifier уникального значения и поле схемы URL , чтобы быть вашим расслоение идентификатора, который является схемой по URL по умолчанию используется Dynamic Links.
  2. На вкладке Возможности проекта Xcode вашего приложения, позволяют Associated домены и добавьте следующую строку в списке Associated Domains:
    applinks:your_dynamic_links_domain
  3. Если вы хотите получить динамические ссылки с полностью персонализированным доменом , в вашем проект Xcode в Info.plist файл, создайте ключ называется FirebaseDynamicLinksCustomDomains и установить его на динамических ссылки URL префиксов вашего приложения. Например:
    FirebaseDynamicLinksCustomDomains
    
      https://example.com/promos
      https://example.com/links/share
    
    
  4. Импорт модуля Firebase в вашем UIApplicationDelegate :

    Быстрый

    import Firebase

    Цель-C

    @import Firebase;
  5. Настройте FirebaseApp общей экземпляр, как правило , в вашем приложении application:didFinishLaunchingWithOptions: метод:

    Быстрый

    // Use Firebase library to configure APIs
    FirebaseApp.configure()

    Цель-C

    // Use Firebase library to configure APIs
    [FIRApp configure];
  6. Далее в application:continueUserActivity:restorationHandler: метод, ручка ссылке , полученная в качестве Универсальной ссылки , когда приложение уже установлено (на прошивке 9 и выше):

    Быстрый

    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

    - (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;
    }
  7. Наконец, в application:openURL:sourceApplication:annotation: (IOS 8 и старше) и application:openURL:options: методы (прошивка 9 и выше), ручка ссылке , полученная с помощью схемы пользовательских URL вашего приложения. Эти методы вызываются, когда ваше приложение получает ссылку на iOS 8 и старше, а также когда ваше приложение открывается в первый раз после установки в любой версии iOS.

    Если Dynamic Link не найден на первом запуске вашего приложения (на любой версии IOS), этот метод будет вызываться с FIRDynamicLink «s url - nil url набора к nil , указывая , что SDK не удалось найти соответствие ожидающий Dynamic Link.

    Быстрый

    @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

    - (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;
    }