ตั้งค่าแอปไคลเอ็นต์ Firebase Cloud Messaging บนแพลตฟอร์ม Apple

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

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

การรวมเมธอดใน Firebase Cloud Messaging

FCM SDK ทำการสุ่มเมธอดใน 2 ส่วนหลักๆ ดังนี้ การแมปโทเค็น APNs ไปยังโทเค็นการลงทะเบียน FCM และบันทึกข้อมูลการวิเคราะห์ระหว่าง การจัดการ Callback ของข้อความดาวน์สตรีม นักพัฒนาแอปที่ไม่ต้องการใช้ Swizzing สามารถ ปิดใช้ส่วนขยายด้วยการเพิ่มธง FirebaseAppDelegateProxyEnabled ใน ไฟล์ Info.plist แล้วตั้งค่าเป็น NO (ค่าบูลีน) ส่วนที่เกี่ยวข้องของคู่มือ ตัวอย่างโค้ด ทั้งที่มีและไม่มีการเปิดใช้ Method Swizzing

เพิ่ม Firebase ลงในโปรเจ็กต์ Apple

หากคุณยังไม่ได้ดำเนินการ เพิ่ม Firebase ลงในโปรเจ็กต์ Apple

อัปโหลดคีย์การตรวจสอบสิทธิ์ APNs

อัปโหลดคีย์การตรวจสอบสิทธิ์ APN ไปยัง Firebase หากคุณยังไม่มีคีย์การตรวจสอบสิทธิ์ APNs โปรดสร้างคีย์ใน Apple Developer Member Center

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

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

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

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

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

Swift


UNUserNotificationCenter.current().delegate = self

let authOptions: UNAuthorizationOptions = [.alert, .badge, .sound]
UNUserNotificationCenter.current().requestAuthorization(
  options: authOptions,
  completionHandler: { _, _ in }
)

application.registerForRemoteNotifications()

Objective-C


[UNUserNotificationCenter currentNotificationCenter].delegate = self;
UNAuthorizationOptions authOptions = UNAuthorizationOptionAlert |
    UNAuthorizationOptionSound | UNAuthorizationOptionBadge;
[[UNUserNotificationCenter currentNotificationCenter]
    requestAuthorizationWithOptions:authOptions
    completionHandler:^(BOOL granted, NSError * _Nullable error) {
      // ...
    }];

[application registerForRemoteNotifications];

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

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

เช่นเดียวกับที่แพลตฟอร์ม Apple มักนำส่งโทเค็นอุปกรณ์ APNs เมื่อเริ่มต้นแอป FCM จะให้โทเค็นการลงทะเบียนผ่าน FIRMessagingDelegate messaging:didReceiveRegistrationToken: วิธี FCM SDK จะเรียกโทเค็นใหม่หรือโทเค็นที่มีอยู่ระหว่างการเปิดตัวแอปครั้งแรกและ ทุกครั้งที่มีการอัปเดตหรือทำให้โทเค็นใช้งานไม่ได้ ในทุกกรณี FCM SDK จะเรียก messaging:didReceiveRegistrationToken: ด้วยโทเค็นที่ถูกต้อง

โทเค็นการลงทะเบียนอาจเปลี่ยนแปลงในกรณีต่อไปนี้

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

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

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

Swift

Messaging.messaging().delegate = self

Objective-C

[FIRMessaging messaging].delegate = self;

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

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

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

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

Swift

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)"
  }
}

Objective-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;
  }
}];

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

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

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

Swift

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.
}

Objective-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 แทนที่จะเตรียมวิธีการของตัวแทน พร็อพเพอร์ตี้โทเค็นจะมีค่า ค่าโทเค็นปัจจุบัน

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

หากคุณปิดใช้ Method ของ SwiftUI หรือคุณกำลังสร้างแอป SwiftUI คุณจะต้อง แมปโทเค็น APNs กับโทเค็นการลงทะเบียน FCM อย่างชัดเจน ติดตั้งใช้งาน application(_:didRegisterForRemoteNotificationsWithDeviceToken:) วิธีในการ เรียกโทเค็น APNs แล้วตั้งค่า Messaging apnsToken พร็อพเพอร์ตี้:

Swift

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

Objective-C

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

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

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

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

FirebaseMessagingAutoInitEnabled = NO

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

Swift

Messaging.messaging().autoInitEnabled = true

Objective-C

[FIRMessaging messaging].autoInitEnabled = YES;

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

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

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