ในการรับลิงก์แบบไดนามิกของ Firebase ที่
ที่คุณสร้างขึ้น คุณต้องรวม Dynamic Links SDK ไว้ในแอปของคุณและเรียกใช้
handleUniversalLink:
และ dynamicLinkFromCustomSchemeURL:
เมื่อแอปของคุณโหลดเพื่อรับข้อมูลที่ส่งในลิงก์แบบไดนามิก
ข้อกำหนดเบื้องต้น
ก่อนเริ่มต้น ให้เพิ่ม Firebase ลงใน iOS โปรเจ็กต์
ตั้งค่า Firebase และ SDK ลิงก์แบบไดนามิก
ใช้ Swift Package Manager เพื่อติดตั้งและจัดการทรัพยากร Dependency ของ Firebase
- เปิดโปรเจ็กต์แอปใน Xcode แล้วไปที่ไฟล์ > เพิ่มแพ็กเกจ
- เมื่อได้รับข้อความแจ้ง ให้เพิ่มที่เก็บ SDK สำหรับแพลตฟอร์ม Firebase ของ Apple ดังนี้
- เลือกไลบรารีลิงก์แบบไดนามิก
- เพิ่มแฟล็ก
-ObjC
ลงในส่วนแฟล็ก Linker อื่นๆ ของการตั้งค่าบิลด์ของเป้าหมาย - เพื่อให้ได้รับประสบการณ์ที่ดีที่สุดในการใช้ลิงก์แบบไดนามิก เราขอแนะนำ การเปิดใช้ Google Analytics ในโปรเจ็กต์ Firebase และเพิ่ม Firebase SDK สำหรับ Google Analytics ลงในแอป คุณสามารถ ให้เลือกไลบรารีที่ไม่มีการรวบรวม IDFA หรือมีคอลเล็กชัน IDFA
- เมื่อเสร็จแล้ว Xcode จะเริ่มแก้ปัญหาและดาวน์โหลด ทรัพยากร Dependency ในเบื้องหลัง
https://github.com/firebase/firebase-ios-sdk.git
โดยทำตามขั้นตอนการกำหนดค่าต่อไปนี้
- ในคอนโซล Firebase ให้เปิดลิงก์แบบไดนามิก ยอมรับข้อกำหนดในการให้บริการ หากคุณได้รับแจ้งให้ทำเช่นนั้น
-
ตรวจสอบว่ารหัส App Store ของแอปและคำนำหน้ารหัสแอป ที่ระบุในการตั้งค่าแอปของคุณ หากต้องการดูและแก้ไขการตั้งค่าของแอป ให้ไปที่ ลงในโปรเจ็กต์ Firebase หน้าการตั้งค่า แล้วเลือกแอป iOS
คุณสามารถยืนยันว่าได้กำหนดค่าโปรเจ็กต์ Firebase อย่างถูกต้องเพื่อใช้ ลิงก์แบบไดนามิกในแอป iOS โดยการเปิด URL ต่อไปนี้
https://your_dynamic_links_domain/apple-app-site-association
หากแอปของคุณเชื่อมต่ออยู่ ไฟล์
apple-app-site-association
จะมีข้อมูลอ้างอิง กับคำนำหน้ารหัสแอปและรหัสชุดของแอป เช่น{"applinks":{"apps":[],"details":[{"appID":"1234567890.com.example.ios","paths":["NOT /_/*","/*"]}]}}
หากช่อง
details
ว่างเปล่า โปรดตรวจสอบอีกครั้งว่าคุณได้ระบุแล้ว คำนำหน้ารหัสแอป โปรดทราบว่าคำนำหน้ารหัสแอปอาจไม่เหมือนกับรหัสทีม -
ไม่บังคับ: ปิดใช้ Dynamic Link SDK ที่ใช้ iOS Pasteboard
โดยค่าเริ่มต้นแล้ว Dynamic Link SDK จะใช้ Pasteboard เพื่อปรับปรุง ความน่าเชื่อถือของ Deep Link หลังการติดตั้ง ใช้แปดบอร์ด ลิงก์แบบไดนามิก มั่นใจได้ว่าเมื่อผู้ใช้เปิดลิงก์แบบไดนามิกแต่ต้องติดตั้ง ก่อนที่ผู้ใช้จะไปที่เนื้อหาเดิมที่ลิงก์ได้ทันที เปิดแอปเป็นครั้งแรกหลังการติดตั้ง
ข้อเสียก็คือการใช้เพสบอร์ดจะทริกเกอร์ ใน iOS 14 ขึ้นไป ดังนั้น ครั้งแรกที่ผู้ใช้เปิดแอป ถ้า Pasteboard มี URL พวกเขาจะเห็นการแจ้งเตือนว่า เข้าถึง Pasteboard ซึ่งอาจทำให้เกิดความสับสน
หากต้องการปิดลักษณะการทำงานนี้ ให้แก้ไขโปรเจ็กต์ Xcode
Info.plist
ไฟล์และตั้งค่า กดแป้นFirebaseDeepLinkPasteboardRetrievalEnabled
เพื่อNO
เปิดลิงก์แบบไดนามิกในแอปของคุณ
- ในแท็บ Info ของโปรเจ็กต์ Xcode ของแอป ให้สร้างเวอร์ชันใหม่ ประเภท URL ที่จะใช้สำหรับลิงก์แบบไดนามิก ตั้งค่า ตัวระบุเป็นค่าที่ไม่ซ้ำกัน และช่องรูปแบบ URL ที่จะ เป็นตัวระบุกลุ่ม ซึ่งเป็นรูปแบบ URL เริ่มต้นที่ลิงก์แบบไดนามิกใช้
- ในแท็บ Capabilities ของโปรเจ็กต์ Xcode ของแอป
เปิดใช้โดเมนที่เชื่อมโยง และเพิ่มข้อมูลต่อไปนี้ลงใน
รายการโดเมนมีดังนี้
applinks:your_dynamic_links_domain
- ถ้าคุณต้องการรับลิงก์แบบไดนามิกที่มี
โดเมนที่กำหนดเองตั้งแต่ต้น ใน
Info.plist
ของโปรเจ็กต์ Xcode ให้สร้างคีย์ชื่อFirebaseDynamicLinksCustomDomains
แล้วตั้งค่าเป็น คำนำหน้า URL ของลิงก์แบบไดนามิก ดังตัวอย่างต่อไปนี้FirebaseDynamicLinksCustomDomains https://example.com/promos https://example.com/links/share - นำเข้าโมดูล
FirebaseCore
ในUIApplicationDelegate
และอื่นๆ โมดูล Firebase ที่ผู้รับมอบสิทธิ์แอปใช้ เช่น วิธีใช้ Cloud Firestore และ 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; // ...
- กําหนดค่า
FirebaseApp
อินสแตนซ์ที่แชร์ใน เมธอด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];
- หากใช้ SwiftUI คุณต้องสร้างการมอบสิทธิ์แอปพลิเคชันและแนบการมอบสิทธิ์
ไปยังโครงสร้าง
App
ของคุณผ่านUIApplicationDelegateAdaptor
หรือNSApplicationDelegateAdaptor
คุณต้องปิดใช้ SWizzing ที่มอบสิทธิ์ของแอปด้วย สำหรับ สำหรับข้อมูลเพิ่มเติม โปรดดูวิธีการของ SwiftUISwiftUI
@main struct YourApp: App { // register app delegate for Firebase setup @UIApplicationDelegateAdaptor(AppDelegate.self) var delegate var body: some Scene { WindowGroup { NavigationView { ContentView() } } } }
- จากนั้น ในเมธอด
application:continueUserActivity:restorationHandler:
ให้จัดการลิงก์ที่ได้รับในฐานะ Universal Link เมื่อติดตั้งแอปแล้วSwift
หมายเหตุ: ผลิตภัณฑ์นี้ใช้ไม่ได้ในเป้าหมาย macOS, Mac Catalyst, tvOS หรือ watchOSfunc 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
หมายเหตุ: ผลิตภัณฑ์นี้ใช้ไม่ได้ในเป้าหมาย macOS, Mac Catalyst, tvOS หรือ 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; }
- สุดท้าย ใน
application:openURL:options:
จัดการลิงก์ ได้รับผ่าน Scheme ของ URL ที่กำหนดเองของแอป ระบบจะเรียกเมธอดนี้เมื่อ แอปของคุณเปิดเป็นครั้งแรกหลังการติดตั้งหากไม่พบลิงก์แบบไดนามิกเมื่อเปิดแอปครั้งแรก ระบบจะเรียกใช้เมธอดนี้ด้วยเมธอด
url
ของDynamicLink
ได้รับการตั้งค่าเป็นnil
ซึ่งบ่งชี้ว่า SDK ไม่พบลิงก์แบบไดนามิกที่รอดำเนินการที่ตรงกันSwift
หมายเหตุ: ผลิตภัณฑ์นี้ใช้ไม่ได้ในเป้าหมาย macOS, Mac Catalyst, tvOS หรือ 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
หมายเหตุ: ผลิตภัณฑ์นี้ใช้ไม่ได้ในเป้าหมาย macOS, Mac Catalyst, tvOS หรือ 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; }