สำหรับแอปไคลเอ็นต์ 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
-
ภายในโปรเจ็กต์ในคอนโซล Firebase ให้เลือก ไอคอนรูปเฟือง, เลือก การตั้งค่าโปรเจ็กต์ แล้วเลือก แท็บการรับส่งข้อความในระบบคลาวด์
-
ในคีย์การตรวจสอบสิทธิ์ AAP ในส่วนการกำหนดค่าแอป iOS ให้คลิกอัปโหลด
-
เรียกดูตำแหน่งที่คุณบันทึกกุญแจไว้ จากนั้นเลือกคีย์แล้วคลิก เปิด เพิ่มรหัสคีย์สำหรับคีย์ (มีอยู่ใน 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];
เ��้าถึงโทเค็นการจดทะเบียน
โดยค่าเริ่มต้น SDK ของ FCM จะสร้าง โทเค็นการลงทะเบียนสำหรับอินสแตนซ์แอปไคลเอ็นต์เมื่อเปิดแอป โทเค็นนี้ช่วยให้คุณสามารถส่งการแจ้งเตือนที่กำหนดเป้าหมายได้เช่นเดียวกับโทเค็นอุปกรณ์ APNs อินสแตนซ์ที่เจาะจงของแอป
เช่นเดียวกับที่แพลตฟอร์ม Apple มักนำส่งโทเค็นอุปกรณ์ APN เมื่อเริ่มต้นแอป
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 คุณจะต้อง
แมปโทเค็น APN กับโทเค็นการลงทะเบียน 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 แล้ว คุณก็พร้อมที่จะเพิ่มการจัดการข้อความ และพฤติกรรมขั้นสูงอื่นๆ กับแอปของคุณ ดูคำแนะนำเหล่านี้สำหรับข้อมูลเพิ่มเติม