Catch up on everything announced at Firebase Summit, and learn how Firebase can help you accelerate app development and run your app with confidence. Learn More

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

Sử dụng bộ sưu tập để sắp xếp ngăn nắp các trang Lưu và phân loại nội dung dựa trên lựa chọn ưu tiên của bạn.

Để nhận Liên kết động Firebase mà bạn đã tạo , bạn phải bao gồm SDK liên kết động trong ứng dụng của mình và gọi các phương thức handleUniversalLink:dynamicLinkFromCustomSchemeURL: khi ứng dụng của bạn tải để nhận dữ liệu được chuyển trong Liên kết động.

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

Trước khi bạn bắt đầu, hãy đảm bảo thêm Firebase vào dự án iOS của bạn .

Sử dụng Trình quản lý gói Swift để cài đặt và quản lý các phần phụ thuộc của Firebase.

  1. Trong Xcode, khi dự án ứng dụng của bạn đang mở, hãy điều hướng đến File > Add Packages .
  2. Khi được nhắc, hãy thêm kho lưu trữ SDK nền tảng Apple của Firebase:
  3.   https://github.com/firebase/firebase-ios-sdk
  4. Chọn thư viện Liên kết động.
  5. Để có trải nghiệm tối ưu với Liên kết động, chúng tôi khuyên bạn nên bật Google Analytics trong dự án Firebase của mình và thêm SDK Firebase cho Google Analytics vào ứng dụng của bạn. Bạn có thể chọn thư viện không có bộ sưu tập IDFA hoặc có bộ sưu tập IDFA.
  6. Khi hoàn tất, Xcode sẽ tự động bắt đầu giải quyết và tải xuống các phần phụ thuộc của bạn trong nền.

Bây giờ, thực hiện một số bước cấu hình:

  1. Trong bảng điều khiển Firebase , hãy mở phần Liên kết động . 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.
  2. Đảm bảo rằng ID App Store của ứng dụng và tiền tố ID ứng dụng của bạn được chỉ định trong cài đặt của ứng dụng. Để xem và chỉnh sửa cài đặt của ứng dụng, hãy truy cập trang Cài đặt của dự án Firebase 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 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, tệp apple-app-site-association chứa tham chiếu đến tiền tố ID ứng dụng và ID gói của ứng dụng. Ví dụ:

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

    Nếu trường details trống, hãy kiểm tra kỹ xem bạn đã chỉ định tiền tố ID ứng dụng của mình chưa. 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.

  3. Tùy chọn : Vô hiệu hóa việc sử dụng bảng dán iOS của SDK liên kết động.

    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 khi 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ể chuyển ngay đến 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, họ sẽ thấy thông báo rằng ứng dụng của bạn đã truy cập bảng dán, điều này có thể gây nhầm lẫn.

    Để tắt hành vi này, hãy chỉnh sửa tệp Info.plist của dự án Xcode của bạn và đặt khóa FirebaseDeepLinkPasteboardRetrievalEnabled thành NO .

  1. Trong tab Thông tin của dự án Xcode của ứng dụng, hãy tạo một loại URL mới để sử dụng cho Liên kết động. Đặt trường Mã định danh thành một giá trị duy nhất và trường lược đồ URL thành mã định danh gói của bạn, đây là lược đồ URL mặc định được Liên kết động sử dụng.
  2. Trong tab Khả năng của dự án Xcode của ứng dụng, hãy bật Miền được liên kết và thêm phần sau vào danh sách Miền được liên kết:
    applinks:your_dynamic_links_domain
  3. Nếu bạn muốn nhận Liên kết động với miền hoàn toàn tùy chỉnh , trong tệp Info.plist của dự án Xcode, hãy tạo khóa có tên FirebaseDynamicLinksCustomDomains và đặt khóa đó thành tiền tố URL Liên kết động của ứng dụng. Ví dụ:
    FirebaseDynamicLinksCustomDomains
    
      https://example.com/promos
      https://example.com/links/share
    
    
  4. Nhập mô-đun FirebaseCore trong UIApplicationDelegate của bạn, cũng như bất kỳ mô-đun Firebase nào khác mà ứng dụng ủy quyền của bạn sử dụng. Ví dụ: để sử dụng Cloud Firestore và Xác thực:

    SwiftUI

    import SwiftUI
    import FirebaseCore
    import FirebaseFirestore
    import FirebaseAuth
    // ...
          

    Nhanh

    import FirebaseCore
    import FirebaseFirestore
    import FirebaseAuth
    // ...
          

    Mục tiêu-C

    @import FirebaseCore;
    @import FirebaseFirestore;
    @import FirebaseAuth;
    // ...
          
  5. Định cấu hình một phiên bản chia sẻ FirebaseApp trong phương thức application(_:didFinishLaunchingWithOptions:) của ứng dụng của bạn:

    SwiftUI

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

    Nhanh

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

    Mục tiêu-C

    // Use Firebase library to configure APIs
    [FIRApp configure];
  6. Nếu đang sử dụng SwiftUI, bạn phải tạo một đại biểu ứng dụng và đính kèm nó vào cấu trúc App của mình thông qua UIApplicationDelegateAdaptor hoặc NSApplicationDelegateAdaptor . Bạn cũng phải vô hiệu hóa tính năng xoay đại biểu của ứng dụng. Để biết thêm thông tin, hãy xem hướng dẫn SwiftUI .

    SwiftUI

    @main
    struct YourApp: App {
      // register app delegate for Firebase setup
      @UIApplicationDelegateAdaptor(AppDelegate.self) var delegate
    
      var body: some Scene {
        WindowGroup {
          NavigationView {
            ContentView()
          }
        }
      }
    }
          
  7. Tiếp theo, trong phương thức application:continueUserActivity:restorationHandler: xử lý các liên kết nhận được dưới dạng Liên kết chung khi ứng dụng đã được cài đặt:

    Nhanh

    Lưu ý: Sản phẩm này không khả dụng trên các mục tiêu macOS, Mac Catalyst, tvOS hoặc 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
    }
    

    Mục tiêu-C

    Lưu ý: Sản phẩm này không khả dụng trên các mục tiêu macOS, Mac Catalyst, tvOS hoặc 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<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;
    }
  8. Cuối cùng, trong application:openURL:options: xử lý các liên kết nhận được thông qua lược đồ URL tùy chỉnh của ứng dụng của bạn. Phương thức này được gọi khi ứng dụng của bạn được mở lần đầu tiên sau khi cài đặt.

    Nếu Liên kết động không được tìm thấy trong lần khởi chạy đầu tiên của ứng dụng, thì phương thức này sẽ được gọi với url của DynamicLink được đặt thành nil , cho biết rằng SDK không thể tìm thấy Liên kết động đang chờ xử lý phù hợp.

    Nhanh

    Lưu ý: Sản phẩm này không khả dụng trên các mục tiêu macOS, Mac Catalyst, tvOS hoặc 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
    }
    

    Mục tiêu-C

    Lưu ý: Sản phẩm này không khả dụng trên các mục tiêu macOS, Mac Catalyst, tvOS hoặc watchOS.
    - (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;
    }
,

Để nhận Liên kết động Firebase mà bạn đã tạo , bạn phải bao gồm SDK liên kết động trong ứng dụng của mình và gọi các phương thức handleUniversalLink:dynamicLinkFromCustomSchemeURL: khi ứng dụng của bạn tải để nhận dữ liệu được chuyển trong Liên kết động.

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

Trước khi bạn bắt đầu, hãy đảm bảo thêm Firebase vào dự án iOS của bạn .

Sử dụng Trình quản lý gói Swift để cài đặt và quản lý các phần phụ thuộc của Firebase.

  1. Trong Xcode, khi dự án ứng dụng của bạn đang mở, hãy điều hướng đến File > Add Packages .
  2. Khi được nhắc, hãy thêm kho lưu trữ SDK nền tảng Apple của Firebase:
  3.   https://github.com/firebase/firebase-ios-sdk
  4. Chọn thư viện Liên kết động.
  5. Để có trải nghiệm tối ưu với Liên kết động, chúng tôi khuyên bạn nên bật Google Analytics trong dự án Firebase của mình và thêm SDK Firebase cho Google Analytics vào ứng dụng của bạn. Bạn có thể chọn thư viện không có bộ sưu tập IDFA hoặc có bộ sưu tập IDFA.
  6. Khi hoàn tất, Xcode sẽ tự động bắt đầu giải quyết và tải xuống các phần phụ thuộc của bạn trong nền.

Bây giờ, thực hiện một số bước cấu hình:

  1. Trong bảng điều khiển Firebase , hãy mở phần Liên kết động . 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.
  2. Đảm bảo rằng ID App Store của ứng dụng và tiền tố ID ứng dụng của bạn được chỉ định trong cài đặt của ứng dụng. Để xem và chỉnh sửa cài đặt của ứng dụng, hãy truy cập trang Cài đặt của dự án Firebase 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 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, tệp apple-app-site-association chứa tham chiếu đến tiền tố ID ứng dụng và ID gói của ứng dụng. Ví dụ:

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

    Nếu trường details trống, hãy kiểm tra kỹ xem bạn đã chỉ định tiền tố ID ứng dụng của mình chưa. 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.

  3. Tùy chọn : Vô hiệu hóa việc sử dụng bảng dán iOS của SDK liên kết động.

    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 khi 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ể chuyển ngay đến 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, họ sẽ thấy thông báo rằng ứng dụng của bạn đã truy cập bảng dán, điều này có thể gây nhầm lẫn.

    Để tắt hành vi này, hãy chỉnh sửa tệp Info.plist của dự án Xcode của bạn và đặt khóa FirebaseDeepLinkPasteboardRetrievalEnabled thành NO .

  1. Trong tab Thông tin của dự án Xcode của ứng dụng, hãy tạo một loại URL mới để sử dụng cho Liên kết động. Đặt trường Mã định danh thành một giá trị duy nhất và trường lược đồ URL thành mã định danh gói của bạn, đây là lược đồ URL mặc định được Liên kết động sử dụng.
  2. Trong tab Khả năng của dự án Xcode của ứng dụng, hãy bật Miền được liên kết và thêm phần sau vào danh sách Miền được liên kết:
    applinks:your_dynamic_links_domain
  3. Nếu bạn muốn nhận Liên kết động với miền hoàn toàn tùy chỉnh , trong tệp Info.plist của dự án Xcode, hãy tạo khóa có tên FirebaseDynamicLinksCustomDomains và đặt khóa đó thành tiền tố URL Liên kết động của ứng dụng. Ví dụ:
    FirebaseDynamicLinksCustomDomains
    
      https://example.com/promos
      https://example.com/links/share
    
    
  4. Nhập mô-đun FirebaseCore trong UIApplicationDelegate của bạn, cũng như bất kỳ mô-đun Firebase nào khác mà ứng dụng ủy quyền của bạn sử dụng. Ví dụ: để sử dụng Cloud Firestore và Xác thực:

    SwiftUI

    import SwiftUI
    import FirebaseCore
    import FirebaseFirestore
    import FirebaseAuth
    // ...
          

    Nhanh

    import FirebaseCore
    import FirebaseFirestore
    import FirebaseAuth
    // ...
          

    Mục tiêu-C

    @import FirebaseCore;
    @import FirebaseFirestore;
    @import FirebaseAuth;
    // ...
          
  5. Định cấu hình một phiên bản chia sẻ FirebaseApp trong phương thức application(_:didFinishLaunchingWithOptions:) của ứng dụng của bạn:

    SwiftUI

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

    Nhanh

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

    Mục tiêu-C

    // Use Firebase library to configure APIs
    [FIRApp configure];
  6. Nếu đang sử dụng SwiftUI, bạn phải tạo một đại biểu ứng dụng và đính kèm nó vào cấu trúc App của mình thông qua UIApplicationDelegateAdaptor hoặc NSApplicationDelegateAdaptor . Bạn cũng phải vô hiệu hóa tính năng xoay đại biểu của ứng dụng. Để biết thêm thông tin, hãy xem hướng dẫn SwiftUI .

    SwiftUI

    @main
    struct YourApp: App {
      // register app delegate for Firebase setup
      @UIApplicationDelegateAdaptor(AppDelegate.self) var delegate
    
      var body: some Scene {
        WindowGroup {
          NavigationView {
            ContentView()
          }
        }
      }
    }
          
  7. Tiếp theo, trong phương thức application:continueUserActivity:restorationHandler: xử lý các liên kết nhận được dưới dạng Liên kết chung khi ứng dụng đã được cài đặt:

    Nhanh

    Lưu ý: Sản phẩm này không khả dụng trên các mục tiêu macOS, Mac Catalyst, tvOS hoặc 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
    }
    

    Mục tiêu-C

    Lưu ý: Sản phẩm này không khả dụng trên các mục tiêu macOS, Mac Catalyst, tvOS hoặc 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<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;
    }
  8. Cuối cùng, trong application:openURL:options: xử lý các liên kết nhận được thông qua lược đồ URL tùy chỉnh của ứng dụng của bạn. Phương thức này được gọi khi ứng dụng của bạn được mở lần đầu tiên sau khi cài đặt.

    Nếu Liên kết động không được tìm thấy trong lần khởi chạy đầu tiên của ứng dụng, phương thức này sẽ được gọi với url của DynamicLink được đặt thành nil , cho biết rằng SDK không thể tìm thấy Liên kết động đang chờ xử lý phù hợp.

    Nhanh

    Lưu ý: Sản phẩm này không khả dụng trên các mục tiêu macOS, Mac Catalyst, tvOS hoặc 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
    }
    

    Mục tiêu-C

    Lưu ý: Sản phẩm này không khả dụng trên các mục tiêu macOS, Mac Catalyst, tvOS hoặc watchOS.
    - (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;
    }