Join us in person and online for Firebase Summit on October 18, 2022. Learn how Firebase can help you accelerate app development, release your app with confidence, and scale with ease. Register now

รับไดนามิกลิงก์บน iOS

จัดทุกอย่างให้เป็นระเบียบอยู่เสมอด้วยคอลเล็กชัน บันทึกและจัดหมวดหมู่เนื้อหาตามค่ากำหนดของคุณ

ในการรับลิงก์แบบไดนามิก Firebase ที่ คุณสร้างขึ้น คุณต้องรวมลิงก์แบบไดนามิก SDK ไว้ในแอพของคุณและโทรหา handleUniversalLink: และ dynamicLinkFromCustomSchemeURL: วิธีการเมื่อแอปของคุณโหลดข้อมูลที่ส่งผ่านในลิงก์แบบไดนามิก

ข้อกำหนดเบื้องต้น

ก่อนที่คุณจะเริ่มต้น อย่าลืม เพิ่ม Firebase ในโครงการ iOS ของคุณ

ใช้ Swift Package Manager เพื่อติดตั้งและจัดการการขึ้นต่อกันของ Firebase

  1. ใน Xcode เมื่อโปรเจ็กต์แอปของคุณเปิดอยู่ ให้ไปที่ File > Add Packages
  2. เมื่อได้รับแจ้ง ให้เพิ่มที่เก็บ SDK ของแพลตฟอร์ม Firebase Apple:
  3.   https://github.com/firebase/firebase-ios-sdk
  4. เลือกไลบรารีไดนามิกลิงก์
  5. สำหรับประสบการณ์ที่ดีที่สุดด้วยลิงก์แบบไดนามิกเราขอแนะนำให้ เปิดใช้งาน Google Analytics ในโครงการ Firebase ของคุณและเพิ่ม Firebase SDK สำหรับ Google Analytics ลงในแอปของคุณ คุณสามารถเลือกไลบรารีที่ไม่มีคอลเลกชัน IDFA หรือคอลเลกชัน IDFA
  6. เมื่อเสร็จแล้ว Xcode จะเริ่มแก้ไขและดาวน์โหลดการพึ่งพาของคุณในพื้นหลังโดยอัตโนมัติ

ตอนนี้ ดำเนินการตามขั้นตอนการกำหนดค่า:

  1. ใน คอนโซล Firebase ให้เปิดส่วน ลิงก์แบบไดนามิก ยอมรับข้อกำหนดในการให้บริการหากคุณได้รับแจ้งให้ดำเนินการดังกล่าว
  2. ตรวจสอบให้แน่ใจว่าได้ระบุ App Store ID ของแอพและรหัสนำหน้า App ID ของคุณในการตั้งค่าของแอพ หากต้องการดูและแก้ไขการตั้งค่าของแอป ให้ไปที่ หน้าการตั้งค่า ของโปรเจ็กต์ Firebase แล้วเลือกแอป iOS

    คุณยืนยันได้ว่าโปรเจ็กต์ Firebase ได้รับการกำหนดค่าอย่างถูกต้องเพื่อใช้ลิงก์แบบไดนามิกในแอป iOS โดยเปิด URL ต่อไปนี้

    https://your_dynamic_links_domain/apple-app-site-association

    หากแอปของคุณเชื่อมต่อ ไฟล์ apple-app-site-association จะมีการอ้างอิงถึง App ID นำหน้าและ Bundle ID ตัวอย่างเช่น:

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

    หากช่อง details ว่างเปล่า ให้ตรวจสอบอีกครั้งว่าคุณได้ระบุคำนำหน้ารหัสแอปแล้ว โปรดทราบว่าคำนำหน้ารหัสแอปของคุณอาจไม่เหมือนกับรหัสทีมของคุณ

  3. ไม่บังคับ : ปิดใช้งานการใช้ Pasteboard iOS ของ Dynamic Links SDK

    โดยค่าเริ่มต้น Dynamic Links SDK จะใช้แผ่นแปะเพื่อปรับปรุงความน่าเชื่อถือของลิงก์ในรายละเอียดหลังการติดตั้ง ด้วยการใช้พาสบอร์ดลิงก์แบบไดนามิกสามารถตรวจสอบให้แน่ใจว่าเมื่อผู้ใช้เปิดลิงก์แบบไดนามิก แต่ต้องติดตั้งแอปของคุณก่อนผู้ใช้สามารถไปยังเนื้อหาที่เชื่อมโยงดั้งเดิมได้ทันทีเมื่อเปิดแอพเป็นครั้งแรกหลังจากการติดตั้ง

    ข้อเสียคือการใช้แผ่นแปะจะทริกเกอร์การแจ้งเตือนใน iOS 14 และใหม่กว่า ดังนั้นครั้งแรกที่ผู้ใช้เปิดแอปของคุณหาก Pasteboard มี URL พวกเขาจะเห็นการแจ้งเตือนว่าแอปของคุณเข้าถึงพาสบอร์ดซึ่งอาจทำให้เกิดความสับสน

    หากต้องการปิดการทำงานนี้ ให้แก้ไขไฟล์ Info.plist ของโปรเจ็กต์ Xcode และตั้งค่าคีย์ FirebaseDeepLinkPasteboardRetrievalEnabled เป็น NO

  1. ในแท็บ ข้อมูล ของโปรเจ็กต์ Xcode ของแอป ให้สร้างประเภท URL ใหม่เพื่อใช้สำหรับลิงก์แบบไดนามิก ตั้งค่าฟิลด์ ตัวระบุ เป็นค่าที่ไม่ซ้ำกันและฟิลด์ Scheme URL เป็นตัวระบุชุดข้อมูลของคุณซึ่งเป็นรูปแบบ URL เริ่มต้นที่ใช้โดยลิงก์แบบไดนามิก
  2. ในแท็บ ความสามารถ ของโครงการ XCode ของแอปของคุณเปิดใช้งานโดเมนที่เกี่ยวข้องและเพิ่มสิ่งต่อไปนี้ในรายการ โดเมนที่เกี่ยวข้อง :
    applinks:your_dynamic_links_domain
  3. หากคุณต้องการรับลิงก์แบบไดนามิกด้วย โดเมนแบบ custom อย่างสมบูรณ์ ในไฟล์ Info.plist ของโครงการ Xcode ของคุณให้สร้างคีย์ที่เรียกว่า FirebaseDynamicLinksCustomDomains และตั้งค่าเป็นคำนำหน้า URL ลิงค์ไดนามิกของแอป ตัวอย่างเช่น:
    FirebaseDynamicLinksCustomDomains
    
      https://example.com/promos
      https://example.com/links/share
    
    
  4. นำเข้าโมดูล FirebaseCore ใน UIApplicationDelegate ของคุณ รวมถึง โมดูล Firebase อื่นๆ ที่ผู้รับมอบสิทธิ์แอปของคุณใช้ ตัวอย่างเช่น ในการใช้ Cloud Firestore และการตรวจสอบสิทธิ์:

    Swift

    import FirebaseCore
    import FirebaseFirestore
    import FirebaseAuth
    // ...
          

    วัตถุประสงค์-C

    @import FirebaseCore;
    @import FirebaseFirestore;
    @import FirebaseAuth;
    // ...
          
  5. กำหนดค่าอินสแตนซ์ที่ใช้ร่วมกันของ FirebaseApp ใน application(_:didFinishLaunchingWithOptions:) ของผู้รับมอบสิทธิ์แอปของคุณ:

    Swift

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

    วัตถุประสงค์-C

    // Use Firebase library to configure APIs
    [FIRApp configure];
  6. ถัดไปใน application:continueUserActivity:restorationHandler: วิธีการจัดการลิงก์ที่ได้รับเป็น ลิงค์สากล เมื่อแอปได้รับการติดตั้งแล้ว:

    Swift

    หมายเหตุ: ผลิตภัณฑ์นี้ไม่พร้อมใช้งานบนเป้าหมาย macOS, Mac Catalyst, tvOS หรือ 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
    }
    

    วัตถุประสงค์-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;
    }
  7. สุดท้าย ใน application:openURL:options: จัดการลิงก์ที่ได้รับผ่านรูปแบบ 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
    }
    

    วัตถุประสงค์-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;
    }