Để nhận Firebase Dynamic Links mà
bạn đã tạo, bạn phải đưa SDK Dynamic Links vào ứng dụng và gọi các phương thức handleUniversalLink:
và dynamicLinkFromCustomSchemeURL:
khi ứng dụng tải để nhận dữ liệu được truyền trong Dynamic Link.
Đ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.
Thiết lập Firebase và SDK Dynamic Links
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.
- Trong Xcode, khi dự án ứng dụng đang mở, hãy chuyển đến File > Add Packages (Tệp > Thêm gói).
- Khi được nhắc, hãy thêm kho lưu trữ SDK của các nền tảng Apple Firebase:
- Chọn thư viện Dynamic Links.
- Thêm cờ
-ObjC
vào phần Other Linker Flags (Cờ trình liên kết khác) trong phần cài đặt bản dựng của mục tiêu. - Để 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 SDK Firebase cho Google Analytics vào ứng dụng. 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.
- 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 xuống ở chế độ nền.
https://github.com/firebase/firebase-ios-sdk.git
Bây giờ, hãy thực hiện một số bước định cấu hình:
- Trong bảng điều khiển Firebase, hãy mở phần Dynamic Links. Chấp nhận điều khoản dịch vụ nếu bạn được nhắc.
-
Đảm bảo rằng mã App Store và tiền tố mã ứng dụng của ứng dụng được chỉ định 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.
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 Dynamic Links 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
sẽ chứa thông tin tham chiếu đến 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ỹ để đả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ủa bạn có thể không giống với mã nhóm. -
Không bắt buộc: Tắt tính năng sử dụng bảng nhớ tạm của iOS của SDK Dynamic Links.
Theo mặc định, SDK Dynamic Links sử dụng bảng nhớ tạm để cải thiện độ tin cậy của các đường liên kết sâu sau khi cài đặt. Bằng cách sử dụng bảng nhớ tạm, Dynamic Links có thể đảm bảo rằng khi người dùng mở Dynamic Link nhưng trước tiên cần cài đặt ứng dụng, 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 việc này là việc sử dụng bảng nhớ tạm sẽ kích hoạt thông báo trên iOS 14 trở lên. Vì vậy, trong lần đầu tiên người dùng mở ứng dụng của bạn, nếu bảng nhớ tạm chứa một URL, họ sẽ thấy thông báo rằng ứng dụng của bạn đã truy cập vào bảng nhớ tạm, đ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 và đặt khoáFirebaseDeepLinkPasteboardRetrievalEnabled
thànhNO
.
Mở Dynamic Links trong ứng dụng
- Trong thẻ Info (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 Dynamic Links. Đặt trường Mã nhận dạng thành một giá trị duy nhất và trường Lược đồ URL thành giá trị nhận dạng gói. Đây là lược đồ URL mặc định mà Dynamic Links sử dụng.
- Trong thẻ Capabilities (Chức năng) của dự án Xcode của ứng dụng, hãy bật Associated Domains (Miền được liên kết) và thêm nội dung sau vào danh sách Associated Domains (Miền được liên kết):
applinks:your_dynamic_links_domain
- Nếu bạn muốn nhận Dynamic Links bằng một miền tuỳ chỉnh hoàn toàn, trong tệp
Info.plist
của dự án Xcode, hãy tạo một khoá có tên làFirebaseDynamicLinksCustomDomains
và đặt khoá đó thành tiền tố URL Dynamic Links của ứng dụng. Ví dụ:FirebaseDynamicLinksCustomDomains https://example.com/promos https://example.com/links/share - Nhập mô-đun
FirebaseCore
trongUIApplicationDelegate
, cũng như mọi mô-đun Firebase khác mà ứ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; // ...
- Định cấu hình một bản sao dùng chung
FirebaseApp
trong phương thứcapplication(_:didFinishLaunchingWithOptions:)
của uỷ quyền ứ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];
- 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 quaUIApplicationDelegateAdaptor
hoặcNSApplicationDelegateAdaptor
. Bạn cũng phải tắt tính năng hoán đổi ứng dụng uỷ quyền. Để 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() } } } }
- 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ùng được 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 }
Objective-C
Lưu ý: Sản phẩm 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 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; }
- Cuối cùng, trong
application:openURL:options:
, hãy xử lý các đường liên kết nhận được thông qua giao thức URL tuỳ 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 Dynamic Link trong lần chạy đầu tiên của ứng dụng, phương thức này sẽ được gọi với
url
củaDynamicLink
được đặt thànhnil
, cho biết rằng SDK không tìm thấy Dynamic Link đang chờ xử lý phù hợp.Swift
Lưu ý: Sản phẩm này không dùng được 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 }
Objective-C
Lưu ý: Sản phẩm 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 *)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; }