Google is committed to advancing racial equity for Black communities. See how.
หน้านี้ได้รับการแปลโดย Cloud Translation API
Switch to English

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

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

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

ลิงก์แบบไดนามิกของ Firebase ต้องใช้ 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 ของแอปและคำนำหน้ารหัสแอปในการตั้งค่าของแอป หากต้องการดูและแก้ไขการตั้งค่าของแอปให้ไปที่ หน้าการตั้งค่า ของโครงการ 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":["/*"]}]}}

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

  5. ทางเลือก : ปิดการใช้งาน Dynamic Links SDK ของ iOS Pasteboard

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

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

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

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

    รวดเร็ว

    import Firebase

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

    @import Firebase;
  5. กำหนดค่าอินสแตนซ์ที่แชร์ของ FirebaseApp โดยทั่วไปจะอยู่ในแอปพลิเคชันของแอปของคุณ application:didFinishLaunchingWithOptions: method:

    รวดเร็ว

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

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

    // Use Firebase library to configure APIs
    [FIRApp configure];
  6. ถัดไปใน application:continueUserActivity:restorationHandler: method จัดการลิงก์ที่ได้รับเป็น Universal Links เมื่อติดตั้งแอปแล้ว (บน iOS 9 และใหม่กว่า):

    รวดเร็ว

    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 ไม่พบลิงก์ไดนามิกที่รอดำเนินการที่ตรงกัน

    รวดเร็ว

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