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

Nhận liên kết động trên iOS

Tiếp nhận các căn cứ hỏa lực động Liên kết mà bạn đã tạo , bạn phải bao gồm Liên kết động SDK trong ứng dụng của bạn và gọi handleUniversalLink:dynamicLinkFromCustomSchemeURL: phương pháp khi tải ứng dụng của bạn để có được các dữ liệu thông qua trong liên kết động.

Điều kiện tiên quyết

Trước khi bắt đầu, hãy chắc chắn để thêm căn cứ hỏa lực cho dự án iOS của bạn .

  1. Thêm căn cứ hỏa lực cho dự án iOS của bạn .
  2. Bao gồm các pod sau trong bạn Podfile :
    pod 'Firebase/Analytics'
    pod 'Firebase/DynamicLinks'
  3. Run pod install và mở tạo .xcworkspace tập tin.
  4. Trong căn cứ hỏa lực console , hãy mở phần động Links. Chấp nhận các điều khoản dịch vụ nếu bạn được nhắc làm như vậy.
  5. Đảm bảo rằng ID cửa hàng ứng dụng của ứng dụng và tiền tố ID ứng dụng của bạn được chỉ định trong cài đặt ứng dụng của bạn. Để xem và chỉnh sửa các thiết lập của ứng dụng của bạn, hãy cho dự án căn cứ hỏa lực của bạn trang Cài đặt và chọn ứng dụng iOS của bạn.

    Bạn có thể xác nhận rằng dự án Firebase của mình được định cấu hình đúng cách để sử dụng Liên kết động trong ứng dụng iOS của mình bằng cách mở URL sau:

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

    Nếu ứng dụng của bạn được kết nối, apple-app-site-association tập tin chứa một tham chiếu đến App ID prefix của ứng dụng rồi bó ID. Ví dụ:

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

    Nếu details lĩnh vực trống, kích đúp séc mà bạn chỉ định tiền tố App ID của bạn. Lưu ý rằng tiền tố ID ứng dụng của bạn có thể không giống với ID nhóm của bạn.

  6. Tùy chọn: Disable Dynamic Liên kết SDK của việc sử dụng các tông iOS.

    Theo mặc định, SDK liên kết động sử dụng bảng dán để cải thiện độ tin cậy của các liên kết sâu sau cài đặt. Bằng cách sử dụng bảng dán, Liên kết động có thể đảm bảo rằng khi người dùng mở Liên kết động nhưng cần cài đặt ứng dụng của bạn trước, người dùng có thể truy cập ngay nội dung được liên kết ban đầu khi mở ứng dụng lần đầu tiên sau khi cài đặt.

    Nhược điểm của điều này là việc sử dụng bảng dán sẽ kích hoạt thông báo trên iOS 14 trở lên. Vì vậy, lần đầu tiên người dùng mở ứng dụng của bạn, nếu bảng dán có chứa URL Liên kết động, họ sẽ thấy thông báo rằng ứng dụng của bạn đã truy cập vào bảng dán, điều này có thể gây nhầm lẫn.

    Để vô hiệu hóa hành vi này, chỉnh sửa Xcode của bạn dự án của Info.plist tập tin và thiết lập FirebaseDeepLinkPasteboardRetrievalEnabled chìa khóa để NO .

  1. Trong Thông tab của dự án Xcode của ứng dụng của bạn, hãy tạo loại URL mới sẽ được sử dụng cho động Links. Đặt lĩnh vực định danh đến một giá trị độc đáo và lĩnh vực thức truy cập URL được định danh bó của bạn, đó là thức truy cập URL mặc định được sử dụng bởi động Links.
  2. Trong tab Khả năng của dự án Xcode của ứng dụng, cho phép Associated Tên miền và thêm những điều sau đây vào danh sách Associated tên miền:
    applinks:your_dynamic_links_domain
  3. Nếu bạn muốn nhận động Liên kết với một miền đầy đủ tùy chỉnh , trong dự án Xcode của bạn Info.plist tập tin, tạo một khóa gọi FirebaseDynamicLinksCustomDomains và đặt nó là tiền tố động Liên kết URL của ứng dụng. Ví dụ:
    FirebaseDynamicLinksCustomDomains
    
      https://example.com/promos
      https://example.com/links/share
    
    
  4. Nhập module căn cứ hỏa lực trong bạn UIApplicationDelegate :

    Nhanh

    import Firebase

    Objective-C

    @import Firebase;
  5. Cấu hình một FirebaseApp chia sẻ Ví dụ, điển hình là trong ứng dụng của bạn application:didFinishLaunchingWithOptions: phương pháp:

    Nhanh

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

    Objective-C

    // Use Firebase library to configure APIs
    [FIRApp configure];
  6. Tiếp theo, trong application:continueUserActivity:restorationHandler: phương pháp, xử lý liên kết nhận như Phổ Liên kết khi ứng dụng đã được cài đặt (trên iOS 9 và mới hơn):

    Nhanh

    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

    - (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. Cuối cùng, trong application:openURL:sourceApplication:annotation: (iOS 8 tuổi trở lên) và application:openURL:options: (iOS 9 trở lên) phương pháp, xử lý liên kết nhận được thông qua chương trình URL tùy chỉnh của ứng dụng. Các phương thức này được gọi khi ứng dụng của bạn nhận được liên kết trên iOS 8 trở lên và khi ứng dụng của bạn được mở lần đầu tiên sau khi cài đặt trên bất kỳ phiên bản iOS nào.

    Nếu liên kết động là không tìm thấy trên khởi động đầu tiên của ứng dụng của bạn (trên bất kỳ phiên bản của iOS), phương pháp này sẽ được gọi với FIRDynamicLink 's url thiết lập để nil , chỉ ra rằng SDK thất bại trong việc tìm ra một hợp cấp phát Dynamic Link.

    Nhanh

    @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

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