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

ตั้งค่าแอปไคลเอ็นต์ Firebase Cloud Messaging บน iOS

สำหรับแอปไคลเอ็นต์ iOS คุณสามารถรับการแจ้งเตือนและเพย์โหลดข้อมูลได้สูงสุด 4KB ผ่านอินเทอร์เฟซ APN ของ Firebase Cloud Messaging

ในการเขียนรหัสไคลเอ็นต์ของคุณใน Objective-C หรือ Swift เราขอแนะนำให้คุณใช้ FIRMessaging API ตัวอย่างการเริ่มต้นอย่างรวดเร็ว มีโค้ดตัวอย่างสำหรับทั้งสองภาษา

วิธีการ swizzling ใน Firebase Cloud Messaging

FCM SDK ดำเนินการสลับเมธอดในสองส่วนสำคัญ: การแมปโทเค็น APN ของคุณ กับ โทเค็น การลงทะเบียน FCM และการรวบรวมข้อมูลการวิเคราะห์ระหว่าง การจัดการการเรียกกลับข้อความดาวน์สตรี ม นักพัฒนาที่ไม่ต้องการใช้ swizzling สามารถปิดใช้งานได้โดยเพิ่มค่าสถานะ FirebaseAppDelegateProxyEnabled ในไฟล์ Info.plist ของแอปและตั้งค่าเป็น NO (ค่าบูลีน) ส่วนที่เกี่ยวข้องของคำแนะนำจะให้ตัวอย่างโค้ดทั้งที่เปิดใช้งานการสลับเมธอดและไม่มีเมธอด

เพิ่ม Firebase ในโปรเจ็กต์ iOS ของคุณ

ส่วนนี้ครอบคลุมงานที่คุณอาจทำเสร็จแล้วหากคุณได้เปิดใช้งานฟีเจอร์ Firebase อื่น ๆ สำหรับแอปของคุณแล้ว สำหรับ FCM โดยเฉพาะคุณจะต้อง อัปโหลดคีย์การตรวจสอบสิทธิ์ APN ของคุณ และ ลงทะเบียนสำหรับการแจ้งเตือนระยะไกล

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

  • ติดตั้งสิ่งต่อไปนี้:

    • Xcode 11.0 หรือใหม่กว่า
    • CocoaPods 1.9.0 หรือใหม่กว่า
  • ตรวจสอบให้แน่ใจว่าโครงการของคุณตรงตามข้อกำหนดเหล่านี้:

    • โครงการของคุณต้องกำหนดเป้าหมายเป็น iOS 10 หรือใหม่กว่า
  • ตั้งค่า อุปกรณ์ iOS จริง เพื่อเรียกใช้แอปของคุณและทำงานเหล่านี้ให้เสร็จสิ้น:

    • รับคีย์การตรวจสอบสิทธิ์ Apple Push Notification สำหรับ บัญชี Apple Developer ของ คุณ
    • เปิดใช้งานการแจ้งเตือนแบบพุชใน XCode ภายใต้ แอพ> ความสามารถ

หากคุณยังไม่มีโครงการ Xcode และต้องการทดลองใช้ผลิตภัณฑ์ Firebase คุณสามารถดาวน์โหลด ตัวอย่างการเริ่มต้นอย่างรวดเร็ว ของเรา

สร้างโครงการ Firebase

ก่อนที่คุณจะสามารถเพิ่ม Firebase ในแอป iOS คุณต้องสร้างโครงการ Firebase เพื่อเชื่อมต่อกับแอป iOS ไปที่ ทำความเข้าใจกับโครงการ Firebase เพื่อเรียนรู้เพิ่มเติมเกี่ยวกับโครงการ Firebase

ลงทะเบียนแอปของคุณกับ Firebase

หลังจากที่คุณมีโปรเจ็กต์ Firebase คุณสามารถเพิ่มแอป iOS ของคุณลงไปได้

ไปที่ ทำความเข้าใจกับโครงการ Firebase เพื่อเรียนรู้เพิ่มเติมเกี่ยวกับแนวทางปฏิบัติที่ดีที่สุดและข้อควรพิจารณาในการเพิ่มแอปในโครงการ Firebase รวมถึงวิธีจัดการรูปแบบบิวด์หลายรายการ

  1. ไปที่ คอนโซล Firebase

  2. ตรงกลางหน้าภาพรวมโครงการคลิกไอคอน iOS ( ) เพื่อเปิดเวิร์กโฟลว์การตั้งค่า

    หากคุณได้เพิ่มแอปลงในโครงการ Firebase แล้วให้คลิก เพิ่มแอป เพื่อแสดงตัวเลือกแพลตฟอร์ม

  3. ป้อนรหัสบันเดิลของแอปของคุณในฟิลด์ รหัสบันเดิลของ iOS

  4. (ไม่บังคับ) ป้อนข้อมูลแอปอื่น ๆ : ชื่อเล่น แอป และ รหัส App Store

  5. คลิก ลงทะเบียนแอป

เพิ่มไฟล์การกำหนดค่า Firebase

  1. คลิก ดาวน์โหลด GoogleService-Info.plist เพื่อรับไฟล์กำหนดค่า Firebase iOS ของคุณ ( GoogleService-Info.plist )

  2. ย้ายไฟล์กำหนดค่าของคุณไปที่รูทของโปรเจ็กต์ Xcode ของคุณ หากได้รับแจ้งให้เลือกเพิ่มไฟล์กำหนดค่าให้กับเป้าหมายทั้งหมด

หากคุณมีรหัสบันเดิลหลายรายการในโปรเจ็กต์คุณต้องเชื่อมโยงรหัสบันเดิลแต่ละรายการกับแอปที่ลงทะเบียนในคอนโซล Firebase เพื่อให้แต่ละแอปมีไฟล์ GoogleService-Info.plist ตนเอง

เพิ่ม Firebase SDK ลงในแอปของคุณ

ขอแนะนำให้ใช้ CocoaPods เพื่อติดตั้งไลบรารี Firebase อย่างไรก็ตามหากคุณไม่ต้องการใช้ CocoaPods คุณสามารถ รวมเฟรมเวิร์ก SDK ได้โดยตรง หรือใช้ Swift Package Manager เบต้า

คุณใช้หนึ่งใน ตัวอย่างการเริ่มต้นอย่างรวดเร็ว หรือไม่ มีโครงการ Xcode และ Podfile (พร้อมพ็อด) อยู่แล้ว แต่คุณยังต้อง เพิ่มไฟล์การกำหนดค่า Firebase และ ติดตั้ง พ็อด

  1. สร้าง Podfile หากคุณยังไม่มี:

    cd your-project-directory
    pod init
  2. ใน Podfile ของคุณให้เพิ่ม Firebase pods ที่คุณต้องการใช้ในแอปของคุณ

    คุณสามารถเพิ่ม ผลิตภัณฑ์ Firebase ที่รองรับ ลงในแอป iOS ของคุณได้

    เพื่อประสบการณ์ที่ดีที่สุดกับ Firebase Cloud Messaging เราขอแนะนำให้ เปิดใช้ Google Analytics ในโครงการของคุณ นอกจากนี้ในการตั้งค่า Analytics คุณต้องเพิ่ม Firebase SDK สำหรับ Analytics ลงในแอปของคุณ

    เปิดใช้งานการวิเคราะห์

    # Add the Firebase pod for Google Analytics
    pod 'Firebase/Analytics'
    # Add the pod for Firebase Cloud Messaging pod 'Firebase/Messaging'

    ไม่ได้เปิดใช้งานการวิเคราะห์

    # Add the pod for Firebase Cloud Messaging
    pod 'Firebase/Messaging'
  3. ติดตั้ง .xcworkspace จากนั้นเปิดไฟล์. .xcworkspace เพื่อดูโปรเจ็กต์ใน Xcode:

    pod install
    open your-project.xcworkspace

อัปโหลดคีย์การตรวจสอบสิทธิ์ APN ของคุณ

อัปโหลดคีย์การตรวจสอบสิทธิ์ APN ของคุณไปยัง Firebase หากคุณยังไม่มีคีย์การตรวจสอบสิทธิ์ APN โปรดดูการ กำหนดค่า APN ด้วย FCM

  1. ภายในโปรเจ็กต์ของคุณในคอนโซล Firebase เลือกไอคอนรูปเฟืองเลือก การตั้งค่าโปรเจ็ก ต์จากนั้นเลือกแท็บ Cloud Messaging

  2. ใน คีย์การตรวจสอบสิทธิ์ APN ภายใต้ การกำหนดค่าแอป iOS ให้คลิกปุ่ม อัปโหลด

  3. เรียกดูตำแหน่งที่คุณบันทึกคีย์เลือกจากนั้นคลิก เปิด เพิ่มรหัสคีย์สำหรับคีย์ (มีอยู่ใน ใบรับรองตัวระบุและโปรไฟล์ ใน ศูนย์สมาชิกนักพัฒนาของ Apple ) แล้วคลิก อัปโหลด

เริ่มต้น Firebase ในแอปของคุณ

คุณจะต้องเพิ่มรหัสเริ่มต้น Firebase ในแอปพลิเคชันของคุณ นำเข้าโมดูล Firebase และกำหนดค่าอินสแตนซ์ที่แชร์ดังที่แสดง:

  1. นำเข้าโมดูล Firebase ใน UIApplicationDelegate ของคุณ:

    รวดเร็ว

    import Firebase

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

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

    รวดเร็ว

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

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

    // Use Firebase library to configure APIs
    [FIRApp configure];

ลงทะเบียนสำหรับการแจ้งเตือนระยะไกล

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

รวดเร็ว

if #available(iOS 10.0, *) {
  // For iOS 10 display notification (sent via APNS)
  UNUserNotificationCenter.current().delegate = self

  let authOptions: UNAuthorizationOptions = [.alert, .badge, .sound]
  UNUserNotificationCenter.current().requestAuthorization(
    options: authOptions,
    completionHandler: {_, _ in })
} else {
  let settings: UIUserNotificationSettings =
  UIUserNotificationSettings(types: [.alert, .badge, .sound], categories: nil)
  application.registerUserNotificationSettings(settings)
}

application.registerForRemoteNotifications()

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

if ([UNUserNotificationCenter class] != nil) {
  // iOS 10 or later
  // For iOS 10 display notification (sent via APNS)
  [UNUserNotificationCenter currentNotificationCenter].delegate = self;
  UNAuthorizationOptions authOptions = UNAuthorizationOptionAlert |
      UNAuthorizationOptionSound | UNAuthorizationOptionBadge;
  [[UNUserNotificationCenter currentNotificationCenter]
      requestAuthorizationWithOptions:authOptions
      completionHandler:^(BOOL granted, NSError * _Nullable error) {
        // ...
      }];
} else {
  // iOS 10 notifications aren't available; fall back to iOS 8-9 notifications.
  UIUserNotificationType allNotificationTypes =
  (UIUserNotificationTypeSound | UIUserNotificationTypeAlert | UIUserNotificationTypeBadge);
  UIUserNotificationSettings *settings =
  [UIUserNotificationSettings settingsForTypes:allNotificationTypes categories:nil];
  [application registerUserNotificationSettings:settings];
}

[application registerForRemoteNotifications];

เข้าถึงโทเค็นการลงทะเบียน

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

ในลักษณะเดียวกับที่ iOS มักส่งโทเค็นอุปกรณ์ APN เมื่อเริ่มแอป FCM จะให้โทเค็นการลงทะเบียนผ่านการ messaging:didReceiveRegistrationToken: ของ FIRMessagingDelegate messaging:didReceiveRegistrationToken: FCM SDK จะดึงโทเค็นใหม่หรือที่มีอยู่ในระหว่างการเปิดตัวแอปครั้งแรกและเมื่อใดก็ตามที่โทเค็นได้รับการอัปเดตหรือไม่ถูกต้อง ในทุกกรณี FCM SDK จะเรียกการ messaging:didReceiveRegistrationToken: ด้วยโทเค็นที่ถูกต้อง

โทเค็นการลงทะเบียนอาจเปลี่ยนแปลงเมื่อ:

  • แอปได้รับการกู้คืนบนอุปกรณ์ใหม่
  • ผู้ใช้ถอนการติดตั้ง / ติดตั้งแอปใหม่
  • ผู้ใช้ล้างข้อมูลแอป

ตั้งค่าผู้รับมอบสิทธิ์การส่งข้อความ

ในการรับโทเค็นการลงทะเบียนให้ใช้โปรโตคอลผู้รับการส่งข้อความและตั้งค่าคุณสมบัติการ delegate ของ FIRMessaging หลังจากเรียก [FIRApp configure] ตัวอย่างเช่นหากผู้มอบสิทธิ์แอปพลิเคชันของคุณเป็นไปตามโปรโตคอลผู้รับมอบสิทธิ์การส่งข้อความคุณสามารถตั้งค่าผู้รับมอบสิทธิ์ใน application:didFinishLaunchingWithOptions: ให้กับตัวเอง

รวดเร็ว

Messaging.messaging().delegate = self

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

[FIRMessaging messaging].delegate = self;

กำลังดึงโทเค็นการลงทะเบียนปัจจุบัน

โทเค็นการลงทะเบียนจะถูกส่งผ่านเมธอดการ messaging:didReceiveRegistrationToken: วิธีนี้เรียกโดยทั่วไปหนึ่งครั้งต่อแอปโดยเริ่มต้นด้วยโทเค็นการลงทะเบียน เมื่อเรียกวิธีนี้เป็นเวลาที่เหมาะสำหรับ:

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

คุณสามารถดึงโทเค็นได้โดยตรงโดยใช้ โทเค็น (เสร็จสมบูรณ์ :) มีข้อผิดพลาดที่ไม่เป็นค่าว่างหากการดึงโทเค็นล้มเหลวไม่ว่าด้วยวิธีใด

รวดเร็ว

Messaging.messaging().token { token, error in
  if let error = error {
    print("Error fetching FCM registration token: \(error)")
  } else if let token = token {
    print("FCM registration token: \(token)")
    self.fcmRegTokenMessage.text  = "Remote FCM registration token: \(token)"
  }
}

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

[[FIRMessaging messaging] tokenWithCompletion:^(NSString *token, NSError *error) {
  if (error != nil) {
    NSLog(@"Error getting FCM registration token: %@", error);
  } else {
    NSLog(@"FCM registration token: %@", token);
    self.fcmRegTokenMessage.text = token;
  }
}];

คุณสามารถใช้วิธีนี้ได้ตลอดเวลาเพื่อเข้าถึงโทเค็นแทนที่จะเก็บไว้

ตรวจสอบการรีเฟรชโทเค็น

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

รวดเร็ว

func messaging(_ messaging: Messaging, didReceiveRegistrationToken fcmToken: String?) {
  print("Firebase registration token: \(String(describing: fcmToken))")

  let dataDict:[String: String] = ["token": fcmToken ?? ""]
  NotificationCenter.default.post(name: Notification.Name("FCMToken"), object: nil, userInfo: dataDict)
  // TODO: If necessary send token to application server.
  // Note: This callback is fired at each app startup and whenever a new token is generated.
}

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

- (void)messaging:(FIRMessaging *)messaging didReceiveRegistrationToken:(NSString *)fcmToken {
    NSLog(@"FCM registration token: %@", fcmToken);
    // Notify about received token.
    NSDictionary *dataDict = [NSDictionary dictionaryWithObject:fcmToken forKey:@"token"];
    [[NSNotificationCenter defaultCenter] postNotificationName:
     @"FCMToken" object:nil userInfo:dataDict];
    // TODO: If necessary send token to application server.
    // Note: This callback is fired at each app startup and whenever a new token is generated.
}

หรือคุณสามารถฟัง NSNotification ชื่อ kFIRMessagingRegistrationTokenRefreshNotification แทนการจัดหาวิธีการมอบหมาย คุณสมบัติโทเค็นมีค่าโทเค็นปัจจุบันเสมอ

ปิดการใช้งาน Swizzling: การแมปโทเค็น APN และโทเค็นการลงทะเบียน

หากคุณปิดใช้งานวิธีการ swizzling คุณจะต้องแมปโทเค็น APN ของคุณกับโทเค็นการลงทะเบียน FCM อย่างชัดเจน แทนที่การ didRegisterForRemoteNotificationsWithDeviceToken เพื่อดึง APNs โทเค็นและจากนั้นตั้ง FIRMessaging 's APNSToken ทรัพย์สิน:

รวดเร็ว

func application(application: UIApplication,
                 didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {
  Messaging.messaging().apnsToken = deviceToken
}

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

// With "FirebaseAppDelegateProxyEnabled": NO
- (void)application:(UIApplication *)application
    didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken {
    [FIRMessaging messaging].APNSToken = deviceToken;
}

หลังจากสร้างโทเค็นการลงทะเบียน FCM แล้วคุณสามารถเข้าถึงและรับฟังเหตุการณ์การรีเฟรชโดยใช้วิธีการเดียวกับที่เปิดใช้งาน swizzling

ป้องกันการเริ่มต้นอัตโนมัติ

เมื่อสร้างโทเค็นการลงทะเบียน FCM ไลบรารีจะอัปโหลดตัวระบุและข้อมูลการกำหนดค่าไปยัง Firebase หากคุณต้องการรับการเลือกใช้อย่างชัดเจนจากผู้ใช้ก่อนคุณสามารถป้องกันการสร้างโทเค็นเมื่อกำหนดค่าเวลาโดยปิดใช้งาน FCM ในการดำเนินการนี้ให้เพิ่มค่าข้อมูลเมตาลงใน Info.plist ของคุณ (ไม่ใช่ GoogleService-Info.plist ของคุณ):

FirebaseMessagingAutoInitEnabled = NO

ในการเปิดใช้งาน FCM อีกครั้งคุณสามารถโทรรันไทม์:

รวดเร็ว

Messaging.messaging().autoInitEnabled = true

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

[FIRMessaging messaging].autoInitEnabled = YES;

ค่านี้ยังคงมีอยู่ในทุกแอปที่รีสตาร์ทเมื่อตั้งค่าแล้ว

ขั้นตอนถัดไป

หลังจากที่คุณตั้งค่าไคลเอนต์ iOS แล้วคุณก็พร้อมที่จะเพิ่มการจัดการข้อความและพฤติกรรมขั้นสูงอื่น ๆ ให้กับแอปของคุณ ดูคำแนะนำเหล่านี้สำหรับข้อมูลเพิ่มเติม: