หากต้องการรับ Firebase Dynamic Links ที่
คุณสร้างขึ้น คุณต้องรวม Dynamic Links SDK ไว้ในแอปและเรียกใช้
handleUniversalLink: และ dynamicLinkFromCustomSchemeURL:
เมธอดเมื่อแอปโหลดเพื่อรับข้อมูลที่ส่งผ่านใน Dynamic Link
ข้อกำหนดเบื้องต้น
ก่อนเริ่มต้น ให้ตรวจสอบว่าได้เพิ่ม Firebase ลงในโปรเจ็กต์ iOS แล้ว
ตั้งค่า Firebase และ Dynamic Links SDK
ใช้ Swift Package Manager เพื่อติดตั้งและจัดการทรัพยากร Dependency ของ Firebase
- เปิดโปรเจ็กต์แอปใน Xcode แล้วไปที่ File > Add Packages
- เมื่อได้รับข้อความแจ้ง ให้เพิ่มที่เก็บ Firebase Apple Platforms SDK ดังนี้
- เลือกไลบรารี Dynamic Links
- เพิ่มแฟล็ก
-ObjCลงในส่วน Other Linker Flags ของการตั้งค่าบิลด์เป้าหมาย - เพื่อให้ได้รับประสบการณ์การใช้งาน Dynamic Links ที่ดีที่สุด เราขอแนะนำ ให้เปิดใช้ Google Analytics ในโปรเจ็กต์ Firebase และเพิ่ม Firebase SDK สำหรับ Google Analytics ลงในแอป คุณสามารถ เลือกไลบรารีที่ไม่มีการเก็บรวบรวม IDFA หรือมีการเก็บรวบรวม IDFA ก็ได้ ดูคำถามที่พบบ่อยเกี่ยวกับการจัดระเบียบโมดูลล่าสุดใน สำหรับ Firebase SDKGoogle Analytics
- เมื่อเสร็จแล้ว Xcode จะเริ่มจับคู่ข้อมูลและดาวน์โหลด ทรัพยากร Dependency ในเบื้องหลังโดยอัตโนมัติ
https://github.com/firebase/firebase-ios-sdk.git
ตอนนี้ให้ทำตามขั้นตอนการกำหนดค่าต่อไปนี้
- เปิดส่วน ในคอนโซลFirebaseDynamic Links ยอมรับข้อกำหนดในการให้บริการหากระบบแจ้งให้ดำเนินการ
-
ตรวจสอบว่าได้ระบุรหัส App Store ของแอปและคำนำหน้ารหัสแอปแล้ว ในการตั้งค่าของแอป หากต้องการดูและแก้ไขการตั้งค่าของแอป ให้ไป ที่หน้าการตั้งค่าของโปรเจ็กต์ Firebase แล้วเลือกแอป iOS
คุณสามารถยืนยันว่าโปรเจ็กต์ Firebase ได้รับการกำหนดค่าอย่างถูกต้องเพื่อใช้ Dynamic Links ในแอป 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 Links SDK ในการใช้คลิปบอร์ดของ iOS
โดยค่าเริ่มต้น Dynamic Links SDK จะใช้คลิปบอร์ดเพื่อปรับปรุงความน่าเชื่อถือของ Deep Link หลังการติดตั้ง การใช้คลิปบอร์ดช่วยให้ Dynamic Links มั่นใจได้ว่าเมื่อผู้ใช้เปิดDynamic Link แต่ต้องติดตั้งแอปก่อน ผู้ใช้จะไปยังเนื้อหาที่ลิงก์ไว้เดิมได้ทันทีเมื่อ เปิดแอปเป็นครั้งแรกหลังการติดตั้ง
ข้อเสียคือการใช้คลิปบอร์ดจะทริกเกอร์การ แจ้งเตือนใน iOS 14 ขึ้นไป ดังนั้น เมื่อผู้ใช้เปิดแอปเป็นครั้งแรก หากคลิปบอร์ดมี URL ผู้ใช้จะเห็นการแจ้งเตือนว่าแอปของคุณเข้าถึงคลิปบอร์ด ซึ่งอาจทำให้เกิดความสับสนได้
หากต้องการปิดใช้ลักษณะการทำงานนี้ ให้แก้ไขไฟล์
Info.plistของโปรเจ็กต์ Xcode และตั้งค่าคีย์FirebaseDeepLinkPasteboardRetrievalEnabledเป็นNO
เปิด Dynamic Links ในแอป
- ในแท็บ Info ของโปรเจ็กต์ Xcode ของแอป ให้สร้างประเภท URL ใหม่ ที่จะใช้สำหรับ Dynamic Links ตั้งค่าช่อง ตัวระบุ เป็นค่าที่ไม่ซ้ำกัน และตั้งค่าช่อง รูปแบบ URL เป็น ตัวระบุ Bundle ซึ่งเป็นรูปแบบ URL เริ่มต้นที่ Dynamic Links ใช้
- ในแท็บ Capabilities ของโปรเจ็กต์ Xcode ของแอป ให้เปิดใช้โดเมนที่เชื่อมโยงและเพิ่มรายการต่อไปนี้ลงในรายการ Associated
Domains
applinks:your_dynamic_links_domain
- หากต้องการรับ Dynamic Links ที่มี
โดเมนที่กำหนดเองทั้งหมด ใน
ไฟล์
Info.plistของโปรเจ็กต์ Xcode ให้สร้างคีย์ชื่อFirebaseDynamicLinksCustomDomainsและตั้งค่าเป็นคำนำหน้า URL ของ Dynamic Links ของแอป เช่น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นอกจากนี้ คุณต้องปิดใช้การสลับตัวแทนแอปด้วย ดูข้อมูลเพิ่มเติมได้ใน วิธีการสำหรับ 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
> *_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:ให้จัดการลิงก์ ที่ได้รับผ่าน URL Scheme ที่กำหนดเองของแอป ระบบจะเรียกใช้เมธอดนี้เมื่อ เปิดแอปเป็นครั้งแรกหลังการติดตั้งหากไม่พบ Dynamic Link เมื่อเปิดแอปครั้งแรก ระบบจะเรียกใช้เมธอดนี้โดยตั้งค่า
DynamicLinkของDynamicLinkเป็นnilซึ่งบ่งบอกว่า SDK ไม่พบ Dynamic Link ที่รอดำเนินการที่ตรงกันurlSwift
หมายเหตุ: ผลิตภัณฑ์นี้ไม่พร้อมใช้งานในเป้าหมาย 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
*)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; }