Tạo đường liên kết động trên iOS

Bạn có thể tạo Dynamic Links ngắn hoặc dài bằng Firebase Dynamic Links Builder API. API này chấp nhận một Dynamic Link dài hoặc một đối tượng chứa các tham số Dynamic Link, đồng thời trả về các URL như trong ví dụ sau:

https://example.com/link/WXYZ
https://example.page.link/WXYZ

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

Trước khi bắt đầu, hãy nhớ 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 chuyển đến File > Add Packages (Tệp > Thêm gói).
  2. Khi được nhắc, hãy thêm kho lưu trữ SDK Firebase cho nền tảng của Apple:
  3.   https://github.com/firebase/firebase-ios-sdk.git
  4. Chọn thư viện Dynamic Links.
  5. Thêm cờ -ObjC vào phần Other Linker Flags (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 Dynamic Links, 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 mình. Bạn có thể chọn thư viện không có tính năng thu thập IDFA hoặc có tính năng thu thập IDFA. Hãy xem Câu hỏi thường gặp của chúng tôi về cách sắp xếp mô-đun mới nhất trong Google Analytics cho Firebase SDK.
  7. Khi hoàn tất, Xcode sẽ tự động bắt đầu phân giải và tải các phần phụ thuộc của bạn xuống ở chế độ 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 Firebase, hãy mở mục Dynamic Links.
  2. Nếu bạn chưa chấp nhận điều khoản dịch vụ và đặt tiền tố URI cho Dynamic Links, hãy làm như vậy khi được nhắc.

    Nếu bạn đã có tiền tố URI Dynamic Links, hãy ghi chú lại. Bạn cần cung cấp mã này khi tạo Dynamic Links theo phương thức lập trình.

  3. Nên dùng: Chỉ định các mẫu URL được phép trong đường liên kết sâu và đường liên kết dự phòng. Bằng cách này, bạn có thể ngăn các bên trái phép tạo Dynamic Links chuyển hướng từ miền của bạn đến các trang web mà bạn không kiểm soát. Xem phần Cho phép các mẫu URL cụ thể.
  4. Đảm bảo rằng bạn đã chỉ định Mã cửa hàng ứng dụng và Tiền tố mã ứng dụng trong phần cài đặt của ứng dụng. Để xem và chỉnh sửa chế độ cài đặt của ứng dụng, hãy chuyển đến trang Cài đặt của dự án Firebase rồi chọn ứng dụng iOS của bạn.

    Xác nhận rằng dự án Firebase của bạn được định cấu hình đúng cách để sử dụng Dynamic Links trong ứng dụng iOS bằng cách mở tệp apple-app-site-association được lưu trữ trên miền Dynamic Links của bạn. Firebase sẽ phân phát tệp apple-app-site-association từ thư mục gốc của miền cũng như thư mục con .well-known. Ví dụ:

        https://example.com/apple-app-site-association
        https://example.com/.well-known/apple-app-site-association
        

    Nếu ứng dụng của bạn được kết nối, thì tệp apple-app-site-association sẽ chứa thông tin tham chiếu đến tiền tố Mã ứng dụng và mã nhận dạng gói của ứng dụng. Ví dụ:

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

    Nếu thuộc tính details trống, hãy kiểm tra kỹ để đảm bảo bạn đã chỉ định tiền tố Mã ứng dụng. 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.

Thêm Firebase vào ứng dụng của bạn

  1. Nhập mô-đun FirebaseCore vào UIApplicationDelegate, cũng như mọi mô-đun Firebase khác mà trình uỷ quyền ứng dụng của bạn sử dụng. Ví dụ: để sử dụng Cloud Firestore và Authentication:

    SwiftUI

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

    Swift

    import FirebaseCore
    import FirebaseFirestore
    import FirebaseAuth
    // ...
          

    Objective-C

    @import FirebaseCore;
    @import FirebaseFirestore;
    @import FirebaseAuth;
    // ...
          
  2. Định cấu hình một thực thể dùng chung FirebaseApp trong phương thức application(_:didFinishLaunchingWithOptions:) của trình uỷ nhiệm ứng dụng:

    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];
  3. Nếu đang sử dụng SwiftUI, bạn phải tạo một trình uỷ quyền ứng dụng và đính kèm trình uỷ quyền đó vào cấu trúc App thông qua UIApplicationDelegateAdaptor hoặc NSApplicationDelegateAdaptor. Bạn cũng phải tắt tính năng hoán đổi uỷ quyền ứng dụng. Để biết thêm thông tin, hãy xem hướng dẫn về SwiftUI.

    SwiftUI

    @main
    struct YourApp: App {
      // register app delegate for Firebase setup
      @UIApplicationDelegateAdaptor(AppDelegate.self) var delegate
    
      var body: some Scene {
        WindowGroup {
          NavigationView {
            ContentView()
          }
        }
      }
    }
          

Sử dụng bảng điều khiển Firebase

Nếu muốn tạo một Dynamic Link duy nhất, cho mục đích thử nghiệm hoặc để nhóm tiếp thị của bạn dễ dàng tạo một đường liên kết có thể dùng trong bài đăng trên mạng xã hội, thì cách đơn giản nhất là truy cập vào bảng điều khiển Firebase và tạo một đường liên kết theo cách thủ công bằng cách làm theo biểu mẫu từng bước.

Sử dụng iOS Builder API

Bạn có thể sử dụng iOS Builder API để tạo Dynamic Links từ các tham số hoặc để rút ngắn Dynamic Link dài.

Để tạo Dynamic Link, hãy tạo một đối tượng DynamicLinkComponents mới và chỉ định các tham số Dynamic Link bằng cách đặt các thuộc tính tương ứng của đối tượng. Sau đó, lấy đường liên kết dài từ thuộc tính url của đối tượng hoặc lấy đường liên kết ngắn bằng cách gọi shorten().

Ví dụ tối thiểu sau đây tạo một Dynamic Link dài cho https://www.example.com/my-page, mở bằng ứng dụng iOS của bạn trên iOS và ứng dụng com.example.android trên Android:

Swift

Lưu ý: Sản phẩm Firebase này không dùng được trên các mục tiêu macOS, Mac Catalyst, tvOS hoặc watchOS.
guard let link = URL(string: "https://www.example.com/my-page") else { return }
let dynamicLinksDomainURIPrefix = "https://example.com/link"
let linkBuilder = DynamicLinkComponents(link: link, domainURIPrefix: dynamicLinksDomainURIPRefix)
linkBuilder.iOSParameters = DynamicLinkIOSParameters(bundleID: "com.example.ios")
linkBuilder.androidParameters = DynamicLinkAndroidParameters(packageName: "com.example.android")

guard let longDynamicLink = linkBuilder.url else { return }
print("The long URL is: \(longDynamicLink)")

Objective-C

Lưu ý: Sản phẩm Firebase này không dùng được trên các mục tiêu macOS, Mac Catalyst, tvOS hoặc watchOS.
NSURL *link = [[NSURL alloc] initWithString:@"https://www.example.com/my-page"];
NSString *dynamicLinksDomainURIPrefix = @"https://example.com/link";
FIRDynamicLinkComponents *linkBuilder = [[FIRDynamicLinkComponents alloc]
                                         initWithLink:link
                                               domainURIPrefix:dynamicLinksDomainURIPrefix];
linkBuilder.iOSParameters = [[FIRDynamicLinkIOSParameters alloc]
                             initWithBundleID:@"com.example.ios"];
linkBuilder.androidParameters = [[FIRDynamicLinkAndroidParameters alloc]
                                 initWithPackageName:@"com.example.android"];

NSLog(@"The long URL is: %@", linkBuilder.url);

Để tạo một Dynamic Link ngắn, hãy tạo một DynamicLinkComponents theo cách tương tự, sau đó gọi shorten().

Việc tạo đường liên kết ngắn cần có lệnh gọi mạng, vì vậy, thay vì trực tiếp trả về đường liên kết, shorten() chấp nhận một trình xử lý hoàn tất được gọi khi yêu cầu hoàn tất. Ví dụ:

Swift

Lưu ý: Sản phẩm Firebase này không dùng được trên các mục tiêu macOS, Mac Catalyst, tvOS hoặc watchOS.
linkBuilder.shorten() { url, warnings, error in
  guard let url = url, error != nil else { return }
  print("The short URL is: \(url)")
}

Objective-C

Lưu ý: Sản phẩm Firebase này không dùng được trên các mục tiêu macOS, Mac Catalyst, tvOS hoặc watchOS.
[linkBuilder shortenWithCompletion:^(NSURL * _Nullable shortURL,
                                     NSArray<NSString *> * _Nullable warnings,
                                     NSError * _Nullable error) {
  if (error || shortURL == nil) { return; }
  NSLog(@"The short URL is: %@", shortURL);
}];
      

Theo mặc định, Dynamic Links ngắn được tạo bằng hậu tố liên kết gồm 17 ký tự, khiến người khác gần như không thể đoán được Dynamic Link hợp lệ. Nếu trong trường hợp sử dụng của bạn, việc ai đó đoán thành công một đường liên kết ngắn không gây hại gì, thì bạn nên tạo các hậu tố chỉ dài ở mức cần thiết để đảm bảo tính duy nhất. Bạn có thể thực hiện việc này bằng cách đặt thuộc tính dynamicLinkComponentsOptions:

Swift

Lưu ý: Sản phẩm Firebase này không dùng được trên các mục tiêu macOS, Mac Catalyst, tvOS hoặc watchOS.
linkBuilder.options = DynamicLinkComponentsOptions()
linkBuilder.options.pathLength = .short
linkBuilder.shorten() { url, warnings, error in
  guard let url = url, error != nil else { return }
  print("The short URL is: \(url)")
}

Objective-C

Lưu ý: Sản phẩm Firebase này không dùng được trên các mục tiêu macOS, Mac Catalyst, tvOS hoặc watchOS.
linkBuilder.dynamicLinkComponentsOptions = [[FIRDynamicLinkComponentsOptions alloc] init];
linkBuilder.dynamicLinkComponentsOptions.pathLength = FIRShortDynamicLinkPathLengthShort;
[linkBuilder shortenWithCompletion:^(NSURL * _Nullable shortURL,
                                     NSArray<NSString *> * _Nullable warnings,
                                     NSError * _Nullable error) {
  if (error || shortURL == nil) { return; }
  NSLog(@"The short URL is: %@", shortURL);
}];
      

Bạn có thể sử dụng API Trình tạo Dynamic Link để tạo Dynamic Links bằng bất kỳ tham số nào được hỗ trợ. Hãy xem Tài liệu tham khảo API để biết thông tin chi tiết.

Ví dụ sau đây tạo một Dynamic Link với một số tham số phổ biến được đặt:

Swift

Lưu ý: Sản phẩm Firebase này không dùng được trên các mục tiêu macOS, Mac Catalyst, tvOS hoặc watchOS.
guard let link = URL(string: "https://www.example.com/my-page") else { return }
let dynamicLinksDomainURIPrefix = "https://example.com/link"
let linkBuilder = DynamicLinkComponents(link: link, domainURIPRefix: dynamicLinksDomainURIPrefix)

linkBuilder.iOSParameters = DynamicLinkIOSParameters(bundleID: "com.example.ios")
linkBuilder.iOSParameters.appStoreID = "123456789"
linkBuilder.iOSParameters.minimumAppVersion = "1.2.3"

linkBuilder.androidParameters = DynamicLinkAndroidParameters(packageName: "com.example.android")
linkBuilder.androidParameters.minimumVersion = 123

linkBuilder.analyticsParameters = DynamicLinkGoogleAnalyticsParameters(source: "orkut",
                                                                       medium: "social",
                                                                       campaign: "example-promo")

linkBuilder.iTunesConnectParameters = DynamicLinkItunesConnectAnalyticsParameters()
linkBuilder.iTunesConnectParameters.providerToken = "123456"
linkBuilder.iTunesConnectParameters.campaignToken = "example-promo"

linkBuilder.socialMetaTagParameters = DynamicLinkSocialMetaTagParameters()
linkBuilder.socialMetaTagParameters.title = "Example of a Dynamic Link"
linkBuilder.socialMetaTagParameters.descriptionText = "This link works whether the app is installed or not!"
linkBuilder.socialMetaTagParameters.imageURL = "https://www.example.com/my-image.jpg"

guard let longDynamicLink = linkBuilder.url else { return }
print("The long URL is: \(longDynamicLink)")

Objective-C

Lưu ý: Sản phẩm Firebase này không dùng được trên các mục tiêu macOS, Mac Catalyst, tvOS hoặc watchOS.
NSURL *link = [[NSURL alloc] initWithString:@"https://www.example.com/my-page"];
NSString *dynamicLinksDomainURIPrefix = @"https://example.com/link";
FIRDynamicLinkComponents *linkBuilder = [[FIRDynamicLinkComponents alloc]
                                         initWithLink:link
                                         domainURIPrefix:dynamicLinksDomainURIPrefix];

linkBuilder.iOSParameters = [[FIRDynamicLinkIOSParameters alloc]
                             initWithBundleID:@"com.example.ios"];
linkBuilder.iOSParameters.appStoreID = @"123456789";
linkBuilder.iOSParameters.minimumAppVersion = @"1.2.3";

linkBuilder.androidParameters = [[FIRDynamicLinkAndroidParameters alloc]
                                 initWithPackageName:@"com.example.android"];
linkBuilder.androidParameters.minimumVersion = 123;

linkBuilder.analyticsParameters = [[FIRDynamicLinkGoogleAnalyticsParameters alloc]
                                   initWithSource:@"orkut"
                                           medium:@"social"
                                         campaign:@"example-promo"];

linkBuilder.iTunesConnectParameters = [[FIRDynamicLinkItunesConnectAnalyticsParameters alloc] init];
linkBuilder.iTunesConnectParameters.providerToken = @"123456";
linkBuilder.iTunesConnectParameters.campaignToken = @"example-promo";

linkBuilder.socialMetaTagParameters = [[FIRDynamicLinkSocialMetaTagParameters alloc] init];
linkBuilder.socialMetaTagParameters.title = @"Example of a Dynamic Link";
linkBuilder.socialMetaTagParameters.descriptionText = @"This link works whether the app is installed or not!";
linkBuilder.socialMetaTagParameters.imageURL = @"https://www.example.com/my-image.jpg";

NSLog(@"The long URL is: %@", linkBuilder.url);

Bạn có thể đặt các tham số Dynamic Link bằng các đối tượng và thuộc tính sau:

DynamicLinkComponents
đường liên kết

Đường liên kết mà ứng dụng của bạn sẽ mở. Chỉ định một URL mà ứng dụng của bạn có thể xử lý, thường là nội dung hoặc tải trọng của ứng dụng, giúp khởi chạy logic dành riêng cho ứng dụng (chẳng hạn như tặng phiếu giảm giá cho người dùng hoặc hiển thị màn hình chào mừng). Đường liên kết này phải là một URL có định dạng chuẩn, được mã hoá URL đúng cách, sử dụng HTTP hoặc HTTPS và không được là một Đường liên kết động khác.

domainURIPrefix Tiền tố URL Dynamic Link mà bạn có thể tìm thấy trong bảng điều khiển Firebase. Miền Dynamic Link có dạng như các ví dụ sau:
https://example.com/link
https://example.page.link
DynamicLinkAndroidParameters
fallbackURL Đường liên kết để mở khi ứng dụng chưa được cài đặt. Chỉ định giá trị này để thực hiện một hành động khác ngoài việc cài đặt ứng dụng của bạn từ Cửa hàng Play khi ứng dụng chưa được cài đặt, chẳng hạn như mở phiên bản web dành cho thiết bị di động của nội dung hoặc hiển thị trang quảng cáo cho ứng dụng của bạn.
minimumVersion versionCode của phiên bản tối thiểu của ứng dụng có thể mở đường liên kết. Nếu ứng dụng đã cài đặt là phiên bản cũ, người dùng sẽ được đưa đến Cửa hàng Play để nâng cấp ứng dụng.
DynamicLinkIOSParameters
appStoreID Mã App Store của ứng dụng, dùng để đưa người dùng đến App Store khi họ chưa cài đặt ứng dụng
fallbackURL Đường liên kết để mở khi ứng dụng chưa được cài đặt. Chỉ định giá trị này để thực hiện một hành động khác ngoài việc cài đặt ứng dụng của bạn từ cửa hàng ứng dụng khi ứng dụng chưa được cài đặt, chẳng hạn như mở phiên bản web dành cho thiết bị di động của nội dung hoặc hiển thị trang quảng cáo cho ứng dụng của bạn.
customScheme Lược đồ URL tuỳ chỉnh của ứng dụng, nếu được xác định là một lược đồ khác với mã nhận dạng gói của ứng dụng
iPadFallbackURL Đường liên kết để mở trên iPad khi ứng dụng chưa được cài đặt. Chỉ định giá trị này để thực hiện một hành động khác ngoài việc cài đặt ứng dụng của bạn từ cửa hàng ứng dụng khi ứng dụng chưa được cài đặt, chẳng hạn như mở phiên bản web của nội dung hoặc hiển thị trang quảng cáo cho ứng dụng của bạn.
iPadBundleID Mã nhận dạng gói của ứng dụng iOS dùng trên iPad để mở đường liên kết. Ứng dụng phải được kết nối với dự án của bạn từ trang Tổng quan của bảng điều khiển Firebase.
minimumAppVersion Số phiên bản của phiên bản tối thiểu của ứng dụng có thể mở đường liên kết. Cờ này được truyền đến ứng dụng của bạn khi ứng dụng mở và ứng dụng phải quyết định việc cần làm với cờ này.
DynamicLinkNavigationInfoParameters
forcedRedirectEnabled Nếu bạn đặt thành "1", hãy bỏ qua trang xem trước ứng dụng khi mở Dynamic Link, thay vào đó, hãy chuyển hướng đến ứng dụng hoặc cửa hàng. Trang xem trước ứng dụng (được bật theo mặc định) có thể đưa người dùng đến đích đến phù hợp nhất một cách đáng tin cậy hơn khi họ mở Dynamic Links trong ứng dụng; tuy nhiên, nếu bạn muốn Dynamic Link chỉ mở trong những ứng dụng có thể mở Dynamic Links một cách đáng tin cậy mà không cần trang này, thì bạn có thể tắt trang này bằng tham số này. Tham số này sẽ chỉ ảnh hưởng đến hành vi của Dynamic Link trên iOS.
DynamicLinkSocialMetaTagParameters
tiêu đề Tiêu đề sẽ dùng khi Dynamic Link được chia sẻ trong một bài đăng trên mạng xã hội.
descriptionText Nội dung mô tả sẽ được sử dụng khi Dynamic Link được chia sẻ trong một bài đăng trên mạng xã hội.
imageURL URL của hình ảnh liên quan đến đường liên kết này. Hình ảnh phải có kích thước tối thiểu là 300x200 pixel và nhỏ hơn 300 KB.
DynamicLinkGoogleAnalyticsParameters
source
medium
campaign
term
content
Thông số phân tích của Google Play. Các tham số này (utm_source, utm_medium, utm_campaign, utm_term, utm_content) được chuyển đến Cửa hàng Play cũng như được thêm vào tải trọng liên kết.
DynamicLinkItunesConnectAnalyticsParameters
providerToken
affiliateToken
campaignToken
Tham số phân tích của iTunes Connect. Các tham số này (pt, at, ct) được chuyển đến cửa hàng ứng dụng.

Để rút ngắn một Dynamic Link dài, hãy truyền Dynamic Link dài đó đến shortenURL(url:options:) cùng với một đối tượng DynamicLinkComponentsOptions nếu bạn muốn tạo một đường liên kết có hậu tố ngắn:

Swift

Lưu ý: Sản phẩm Firebase này không dùng được trên các mục tiêu macOS, Mac Catalyst, tvOS hoặc watchOS.
DynamicLinkComponents.shortenURL(url: longLinkUrl, options: nil) { url, warnings, error in
  guard let url = url, error != nil else { return }
  print("The short URL is: \(url)")
}

Objective-C

Lưu ý: Sản phẩm Firebase này không dùng được trên các mục tiêu macOS, Mac Catalyst, tvOS hoặc watchOS.
[FIRDynamicLinkComponents shortenURL:longLinkUrl
                             options:nil
                          completion:^(NSURL * _Nullable shortURL,
                                       NSArray<NSString *> * _Nullable warnings,
                                       NSError * _Nullable error) {
  if (error || shortURL == nil) { return; }
  NSLog(@"The short URL is: %@", shortURL);
}];

Theo mặc định, Dynamic Links sử dụng mã nhận dạng gói của ứng dụng làm lược đồ URL cần thiết để mở ứng dụng. Bạn nên giữ nguyên giá trị mặc định này để đơn giản hoá việc triển khai.

Tuy nhiên, những nhà phát triển đang sử dụng lược đồ URL tuỳ chỉnh cho các mục đích khác có thể cũng muốn sử dụng lược đồ URL tuỳ chỉnh này cho Dynamic Links của họ. Nếu gặp trường hợp này, bạn có thể chỉ định một lược đồ URL khác cho Firebase Dynamic Links bằng cách làm theo các bước sau:

  1. Khi thiết lập ứng dụng, hãy nhớ chỉ định lược đồ URL mặc định mà ứng dụng sẽ sử dụng trước khi định cấu hình thực thể dùng chung FirebaseApp:

    Swift

    Lưu ý: Sản phẩm Firebase này không dùng được trên các mục tiêu macOS, Mac Catalyst, tvOS hoặc watchOS.
    func application(_ application: UIApplication,
                     didFinishLaunchingWithOptions launchOptions: [UIApplication
                       .LaunchOptionsKey: Any]?) -> Bool {
      // Set deepLinkURLScheme to the custom URL scheme you defined in your
      // Xcode project.
      FirebaseOptions.defaultOptions()?.deepLinkURLScheme = customURLScheme
      FirebaseApp.configure()
    
      return true
    }

    Objective-C

    Lưu ý: Sản phẩm Firebase này không dùng được trên các mục tiêu macOS, Mac Catalyst, tvOS hoặc watchOS.
    - (BOOL)application:(UIApplication *)application
        didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
      // Set deepLinkURLScheme to the custom URL scheme you defined in your
      // Xcode project.
      [FIROptions defaultOptions].deepLinkURLScheme = CUSTOM_URL_SCHEME;
      [FIRApp configure];
    
      return YES;
    }
  2. Bất cứ khi nào tạo Dynamic Link, bạn đều cần chỉ định lược đồ URL tuỳ chỉnh mà ứng dụng của bạn sử dụng. Bạn có thể thực hiện việc này thông qua bảng điều khiển Firebase, đặt customScheme trong Builder API, chỉ định tham số ius trong URL hoặc gửi tham số iosCustomScheme đến API REST

Các bước tiếp theo

Sau khi tạo Dynamic Links, bạn cần thiết lập ứng dụng để nhận Dynamic Links và đưa người dùng đến đúng vị trí trong ứng dụng sau khi họ mở đường liên kết.

Để nhận Dynamic Links trong ứng dụng, hãy xem tài liệu về iOS, Android, C++ và Unity.