在 iOS 上接收动态链接

要接收您创建的 Firebase 动态链接,您必须将 Dynamic Links SDK 添加到应用中,并在应用加载时调用 handleUniversalLink:dynamicLinkFromCustomSchemeURL: 方法,以获取动态链接中传递的数据。

前提条件

Firebase 动态链接要求使用 iOS 8 或更高版本。您可以在应用中将 iOS 7 定为目标,但如果应用不是在 iOS 8 或更高版本中运行,则对 Firebase Dynamic Links SDK 的所有调用都不会起作用。

设置 Firebase 和 Dynamic Links SDK

  1. 将 Firebase 添加到您的 iOS 项目。在您的 Podfile 中添加以下 pod:
    pod 'Firebase/Core'
    pod 'Firebase/DynamicLinks'
  2. 运行 pod install 并打开创建的 .xcworkspace 文件。
  3. Firebase 控制台中,打开 Dynamic Links(动态链接)部分。如有提示,请接受服务条款。
  4. 确保已在您的应用的设置中指定应用的 App Store ID 和应用 ID 前缀。要查看和修改应用的设置,请转到 Firebase 项目的“设置”页面,然后选择您的 iOS 应用。

    您可以打开以下网址,确认您的 Firebase 项目已正确配置为在 iOS 应用中使用动态链接:

    https://your_subdomain.page.link/apple-app-site-association
    如果您的应用已与该项目关联,则 apple-app-site-association 文件中将包含对应用的应用 ID 前缀和软件包 ID 的引用。例如:
    {"applinks":{"apps":[],"details":[{"appID":"1234567890.com.example.ios","paths":["/*"]}]}}
    如果 details 字段为空,请确认您是否指定了您的应用 ID 前缀。请注意,应用 ID 前缀可能与团队 ID 不相同。

在应用中打开动态链接

  1. 在应用的 Xcode 项目的 Info 标签中,创建一个新的网址类型以用于动态链接。将 Identifier 字段设为一个唯一的值,并将 URL scheme 字段设为软件包标识符,即动态链接使用的默认网址架构。
  2. 在应用的 Xcode 项目的 Capabilities 标签中,启用 Associated Domains,然后将以下内容添加到 Associated Domains 列表中:
    applinks:your_subdomain.page.link
  3. UIApplicationDelegate 中导入 Firebase 模块:

    Swift

    import Firebase
    

    Objective-C

    @import Firebase;
    
  4. 配置一个 FirebaseApp 共享实例,通常是在应用的 application:didFinishLaunchingWithOptions: 方法中配置:

    Swift

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

    Objective-C

    // Use Firebase library to configure APIs
    [FIRApp configure];
    
  5. 如果已经(在 iOS 9 及更高版本上)安装了应用,则接下来在 application:continueUserActivity:restorationHandler: 方法中处理收到的通用链接形式的链接:

    Swift

    func application(_ application: UIApplication, continue userActivity: NSUserActivity,
                     restorationHandler: @escaping ([Any]?) -> Void) -> Bool {
      let handled = DynamicLinks.dynamicLinks().handleUniversalLink(userActivity.webpageURL!) { (dynamiclink, error) in
        // ...
      }
    
      return handled
    }

    Objective-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;
    }
  6. 最后,在 application:openURL:sourceApplication:annotation: (iOS 8 及以下版本)和 application:openURL:options:(iOS 9 及以上版本)方法中,处理通过应用的自定义网址架构接收的链接。当您的应用在 iOS 8 及以下版本上接收链接时,以及在安装到任何 iOS 版本上后首次被打开时,都会调用这些方法。

    如果您的应用(在任何 iOS 版本上)首次启动时未找到动态链接,系统在调用此方法时会将 FIRDynamicLinkurl 设置为 nil,指出 SDK 未找到匹配的待处理动态链接。

    Swift

    @available(iOS 9.0, *)
    func application(_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any]) -> Bool {
      return application(app, open: url,
                         sourceApplication: options[UIApplicationOpenURLOptionsKey.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

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

发送以下问题的反馈:

此网页
需要帮助?请访问我们的支持页面