สำหรับแอปไคลเอ็นต์ของ Apple คุณจะได้รับการแจ้งเตือนและเพย์โหลดข้อมูลสูงสุด 4096 ไบต์ผ่านFirebase Cloud Messagingอินเทอร์เฟซ APNs
หากต้องการเขียนโค้ดไคลเอ็นต์ใน Objective-C หรือ Swift เราขอแนะนำให้ใช้ FIRMessaging API ตัวอย่างการเริ่มต้นใช้งานอย่างรวดเร็ว มีโค้ดตัวอย่างสำหรับทั้ง 2 ภาษา
การแลกเปลี่ยนเมธอดใน Firebase Cloud Messaging
FCM SDK จะดำเนินการสวิซเซิลเมธอดใน 2 ส่วนหลัก ได้แก่
การแมปโทเค็น APNs
กับโทเค็นการลงทะเบียน FCM และการบันทึกข้อมูลวิเคราะห์ระหว่าง
การจัดการการเรียกกลับของข้อความดาวน์สตรีม
นักพัฒนาแอปที่ไม่ต้องการใช้การสวิซลิงสามารถปิดใช้ได้โดยเพิ่มแฟล็ก FirebaseAppDelegateProxyEnabled
ในไฟล์ Info.plist ของแอปและตั้งค่าเป็น NO (ค่าบูลีน) ส่วนที่เกี่ยวข้องของคู่มือนี้มี
ตัวอย่างโค้ดทั้งแบบที่เปิดใช้และไม่ได้เปิดใช้การสลับเมธอด
เพิ่ม Firebase ไปยังโปรเจ็กต์ Apple
หากยังไม่ได้ดำเนินการ ให้เพิ่ม Firebase ในโปรเจ็กต์ Apple
อัปโหลดคีย์การตรวจสอบสิทธิ์ APNs
อัปโหลดคีย์การตรวจสอบสิทธิ์ APNs ไปยัง Firebase หากยังไม่มีคีย์การตรวจสอบสิทธิ์ APNs โปรดสร้างคีย์ใน Apple Developer Member Center
-
ภายในโปรเจ็กต์ในFirebaseคอนโซล ให้เลือกไอคอน รูปเฟือง เลือก การตั้งค่าโปรเจ็กต์ แล้วเลือกแท็บ Cloud Messaging
-
ในคีย์การตรวจสอบสิทธิ์ APNs ภายในการกำหนดค่าแอป iOS ให้คลิกปุ่มอัปโหลด
-
เรียกดูตำแหน่งที่คุณบันทึกคีย์ เลือกคีย์ แล้วคลิกเปิด เพิ่มรหัสคีย์สำหรับคีย์ (มีอยู่ใน ศูนย์สมาชิกนักพัฒนาซอฟต์แวร์ของ Apple) แล้วคลิก อัปโหลด
ลงทะเบียนรับการแจ้งเตือนระยะไกล
ไม่ว่าจะตอนเริ่มต้นหรือที่จุดที่ต้องการในขั้นตอนการสมัคร ให้ ลงทะเบียนแอปสำหรับการแจ้งเตือนจากระยะไกล เรียกใช้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
's
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(completion:) ระบบจะแสดงข้อผิดพลาดที่ไม่ใช่ค่าว่างหากการดึงข้อมูลโทเค็นล้มเหลวไม่ว่าในกรณีใดก็ตาม
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
แทนการระบุเมธอดตัวแทนก็ได้ พร็อพเพอร์ตี้โทเค็นจะมีค่าโทเค็นปัจจุบันเสมอ
ปิดใช้การสลับ: การแมปโทเค็น APNs และโทเค็นการลงทะเบียน
หากปิดใช้การสลับเมธอดหรือกำลังสร้างแอป SwiftUI คุณจะต้อง
แมปโทเค็น APNs กับโทเค็นการลงทะเบียน FCM อย่างชัดเจน ใช้
application(_:didRegisterForRemoteNotificationsWithDeviceToken:)
เพื่อ
ดึงโทเค็น APNs แล้วตั้งค่าพร็อพเพอร์ตี้ apnsToken
ของ Messaging
ดังนี้
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 แล้ว คุณจะเข้าถึงโทเค็นและ ฟังเหตุการณ์รีเฟรชได้โดยใช้วิธีการเดียวกับการเปิดใช้ การสวิซเซิล
ป้องกันการเริ่มต้นอัตโนมัติ
เมื่อสร้างFCMโทเค็นการลงทะเบียน ไลบรารีจะอัปโหลดตัวระบุและข้อมูลการกำหนดค่าไปยัง Firebase
หากต้องการขอรับการเลือกใช้ที่ชัดเจนจากผู้ใช้ก่อน คุณสามารถป้องกันการสร้างโทเค็นในเวลาที่กำหนดค่าได้โดยการปิดใช้ FCM โดยเพิ่มค่าข้อมูลเมตาลงใน Info.plist
(ไม่ใช่GoogleService-Info.plist
) ดังนี้
FirebaseMessagingAutoInitEnabled = NO
หากต้องการเปิดใช้ FCM อีกครั้ง คุณสามารถทำการเรียกใช้รันไทม์ได้โดยทำดังนี้
Swift
Messaging.messaging().autoInitEnabled = true
Objective-C
[FIRMessaging messaging].autoInitEnabled = YES;
ค่านี้จะยังคงอยู่เมื่อรีสตาร์ทแอปเมื่อตั้งค่าแล้ว
ขั้นตอนถัดไป
หลังจากตั้งค่าไคลเอ็นต์ Apple แล้ว คุณก็พร้อมที่จะเพิ่มการจัดการข้อความ และลักษณะการทำงานอื่นๆ ที่ซับซ้อนมากขึ้น ลงในแอปของคุณ ดูข้อมูลเพิ่มเติมได้ในคำแนะนำต่อไปนี้