Check out what’s new from Firebase@ Google I/O 2021, and join our alpha program for early access to the new Remote Config personalization feature. Learn more

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

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

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

Firebase Dynamic Links ต้องใช้ iOS 8 หรือใหม่กว่า คุณสามารถกำหนดเป้าหมายเป็น iOS 7 ในแอปของคุณได้ แต่การเรียก Firebase Dynamic Links SDK ทั้งหมดจะไม่ดำเนินการใดๆ หากแอปไม่ได้ทำงานบน iOS 8 หรือใหม่กว่า

  1. เพิ่ม Firebase ในโครงการ iOS ของคุณ รวมพ็อดต่อไปนี้ใน Podfile ของคุณ:
    pod 'Firebase/Analytics'
    pod 'Firebase/DynamicLinks'
  2. เรียกใช้การ pod install และเปิดไฟล์ . .xcworkspace สร้างขึ้น
  3. ใน คอนโซล Firebase ให้เปิดส่วน ลิงก์แบบไดนามิก ยอมรับข้อกำหนดในการให้บริการหากคุณได้รับแจ้งให้ดำเนินการดังกล่าว
  4. ตรวจสอบให้แน่ใจว่าได้ระบุ 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":["/*"]}]}}

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

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

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

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

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

  1. ในแท็บ ข้อมูล ของโปรเจ็กต์ Xcode ของแอป ให้สร้างประเภท URL ใหม่เพื่อใช้สำหรับลิงก์แบบไดนามิก ตั้งค่าฟิลด์ ตัวระบุ เป็นค่าที่ไม่ซ้ำกัน และฟิลด์ แบบแผน URL เป็นตัวระบุบันเดิลของคุณ ซึ่งเป็นแบบแผน URL เริ่มต้นที่ใช้โดยลิงก์แบบไดนามิก
  2. ในแท็บ Capabilities ของโปรเจ็กต์ Xcode ของแอปของคุณ ให้เปิดใช้งาน Associated Domains และเพิ่มรายการต่อไปนี้ไปยังรายการ Associated Domains :
    applinks:your_dynamic_links_domain
  3. หากคุณต้องการรับลิงก์แบบไดนามิกที่มี โดเมนที่กำหนดเอง ทั้งหมด ในไฟล์ Info.plist ของโปรเจ็กต์ Xcode ให้สร้างคีย์ชื่อ 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: จัดการลิงก์ที่ได้รับเป็น Universal Links เมื่อติดตั้งแอปแล้ว (บน iOS 9 และใหม่กว่า):

    Swift

    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

    - (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 เวอร์ชันใดก็ตาม) เมธอดนี้จะถูกเรียกโดยตั้งค่า url ของ FIRDynamicLink เป็น nil ซึ่งบ่งชี้ว่า SDK ไม่พบลิงก์แบบไดนามิกที่รอดำเนินการที่ตรงกัน

    Swift

    @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

    - (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;
    }