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

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

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

Trước khi bắt đầu, hãy nhớ thêm Firebase vào iOS của bạn dự á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 Firebase.

  1. Trong Xcode, khi dự án ứng dụng của bạn đang mở, hãy chuyển đến Tệp > Thêm gói.
  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.git
  4. Chọn thư viện Đường liên kết động.
  5. Thêm cờ -ObjC vào mục Cờ trình liên kết khác trong chế độ cài đặt bản dựng của mục tiêu.
  6. Để có trải nghiệm tối ưu với Đường liên kết động, bạn nên bật Google Analytics trong dự án Firebase và thêm Firebase SDK cho Google Analytics vào ứng dụng của bạn. Bạn có thể hãy chọn thư viện không thu thập IDFA hoặc có thu thập IDFA.
  7. Khi hoàn tất, Xcode sẽ tự động bắt đầu phân giải và tải xuống các phần phụ thuộc trong nền.

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

  1. Trong bảng điều khiển của Firebase, hãy mở Đường liên kết động . Chấp nhận đ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 Mã App Store và tiền tố Mã ứng dụng của bạn là được chỉ định trong phần cài đặt của ứng dụng. Để xem và chỉnh sửa các chế độ cài đặt của ứng dụng, hãy truy cập với dự án Firebase của bạn 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 bạn 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 sẽ chứa một tệp đối chiếu vào tiền tố Mã ứng dụng và mã 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 chưa tiền tố Mã ứng dụng của bạn. Xin lưu ý rằng tiền tố Mã ứng dụng có thể không giống với Mã nhóm của bạn.

  3. Không bắt buộc: Không cho phép SDK liên kết động sử dụng iOS giấy dán.

    Theo mặc định, SDK liên kết động sử dụng bản dán để cải thiện độ tin cậy của đường liên kết sâu sau khi cài đặt. Bằng cách sử dụng bảng màu, 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 trước tiên, 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 phương pháp này là việc sử dụng bảng dán sẽ kích hoạt 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 chứa URL, họ sẽ thấy thông báo rằng đã 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, hãy chỉnh sửa dự án Xcode của bạn Info.plist và đặt Chìa khoá FirebaseDeepLinkPasteboardRetrievalEnabled để NO.

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

    SwiftUI

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

    Swift

    import FirebaseCore
    import FirebaseFirestore
    import FirebaseAuth
    // ...
          

    Objective-C

    @import FirebaseCore;
    @import FirebaseFirestore;
    @import FirebaseAuth;
    // ...
          
  5. Định cấu hình một FirebaseApp thực thể dùng chung trong Phương thức application(_:didFinishLaunchingWithOptions:):

    SwiftUI

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

    Swift

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

    Objective-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 ứng dụng uỷ quyền và đính kèm nó đến cấu trúc App của bạn thông qua UIApplicationDelegateAdaptor hoặc NSApplicationDelegateAdaptor. Bạn cũng phải tắt tính năng uỷ quyền ứng dụng. Cho hãy xem hướng dẫn về SwiftUI để biết thêm thông tin.

    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: , hãy xử lý các đường liên kết nhận được dưới dạng Đường liên kết phổ quát khi ứng dụng đã được cài đặt:

    Swift

    Lưu ý: Sản phẩm này không dành cho 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
    }
    

    Objective-C

    Lưu ý: Sản phẩm này không dành cho 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:, hãy điều khiển các đường liên kết nhận được thông qua lược đồ URL tùy chỉnh của ứng dụng. 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 không tìm thấy Liên kết động trong lần khởi chạy ứng dụng đầu tiên, phương thức này sẽ được gọi bằng phương thức 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.

    Swift

    Lưu ý: Sản phẩm này không dành cho 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
    }
    

    Objective-C

    Lưu ý: Sản phẩm này không dành cho 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;
    }