Catch up on everthing we announced at this year's Firebase Summit. Learn more

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

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

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

ก่อนที่จะเริ่มให้แน่ใจว่าจะ เพิ่ม Firebase กับโครงการ iOS ของคุณ

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

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

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

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

  3. ตัวเลือก: ปิดการใช้งานการใช้งานแบบไดนามิกลิงค์ SDK ของ iOS ทำด้วยกระดาษแข็ง

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

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

    การปิดใช้งานลักษณะการทำงานนี้แก้ไขโครงการ Xcode ของคุณ Info.plist ไฟล์และการตั้งค่า FirebaseDeepLinkPasteboardRetrievalEnabled กุญแจสำคัญในการ NO

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

    Swift

    import Firebase

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

    @import Firebase;
  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: วิธีการเชื่อมโยงการจัดการที่ได้รับเป็น สากลลิงก์ เมื่อ app ที่ติดตั้งอยู่แล้ว (9 บน iOS และใหม่กว่า):

    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:sourceApplication:annotation: (iOS 8 และรุ่นเก่า) และ application:openURL:options: (iOS 9 ขึ้นไป) วิธีการเชื่อมโยงการจัดการที่ได้รับผ่านโครงการ URL ของแอปที่กำหนดเอง ระบบจะเรียกวิธีการเหล่านี้เมื่อแอปของคุณได้รับลิงก์ใน iOS 8 ขึ้นไป และเมื่อแอปของคุณเปิดขึ้นเป็นครั้งแรกหลังการติดตั้งบน iOS เวอร์ชันใดก็ได้

    ถ้าเชื่อมโยงแบบไดนามิกจะไม่พบในการเปิดตัวครั้งแรกของแอป (บน iOS เวอร์ชันใด ๆ ) วิธีนี้จะถูกเรียกว่ามี FIRDynamicLink 's url ตั้ง 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;
    }