สําหรับแอปไคลเอ็นต์ Apple คุณจะได้รับการแจ้งเตือนและข้อมูลเพย์โหลดได้สูงสุด 4096 บิตผ่านอินเทอร์เฟซ Firebase Cloud Messaging APN
หากต้องการเขียนโค้ดไคลเอ็นต์ใน Objective-C หรือ Swift เราขอแนะนำให้ใช้ FIRMessaging API ตัวอย่างการเริ่มต้นใช้งานอย่างรวดเร็วมีโค้ดตัวอย่างสำหรับทั้ง 2 ภาษา
การแลกเปลี่ยนเมธอดใน Firebase Cloud Messaging
FCM SDK จะทำการสลับที่เมธอดใน 2 ประเด็นหลัก ได้แก่ การแมปโทเค็น APNs กับโทเค็นการลงทะเบียน FCM และการเก็บรวบรวมข้อมูลวิเคราะห์ในระหว่างการจัดการการเรียกกลับข้อความดาวน์สตรีม
นักพัฒนาแอปที่ไม่ต้องการใช้การสลับที่สามารถปิดใช้ได้โดยเพิ่ม Flag FirebaseAppDelegateProxyEnabled
ในไฟล์ Info.plist ของแอปและตั้งค่าเป็น NO (ค่าบูลีน) ส่วนที่เกี่ยวข้องของคู่มือจะมีตัวอย่างโค้ดทั้งแบบเปิดใช้และไม่เปิดใช้การสลับที่เมธอด
เพิ่ม Firebase ไปยังโปรเจ็กต์ Apple
เพิ่ม Firebase ลงในโปรเจ็กต์ Apple หากยังไม่ได้ดำเนินการ
อัปโหลดคีย์การตรวจสอบสิทธิ์ APNs
อัปโหลดคีย์การตรวจสอบสิทธิ์ APNs ไปยัง Firebase หากยังไม่มีคีย์การตรวจสอบสิทธิ์ APNs โปรดสร้างคีย์ในศูนย์สมาชิกนักพัฒนาแอปของ Apple
-
ในโปรเจ็กต์ในคอนโซล Firebase ให้เลือกไอคอนรูปเฟือง เลือกการตั้งค่าโปรเจ็กต์ แล้วเลือกแท็บการรับส่งข้อความระบบคลาวด์
-
ในส่วนคีย์การตรวจสอบสิทธิ์ 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 จะสร้างโทเค็นการลงทะเบียนสําหรับอินสแตนซ์แอปไคลเอ็นต์เมื่อเปิดแอป โทเค็นนี้ช่วยให้คุณส่งการแจ้งเตือนที่กําหนดเป้าหมายไปยังอินสแตนซ์ใดก็ได้ของแอป ซึ่งคล้ายกับโทเค็นอุปกรณ์ APN
FCM จะส่งโทเค็นการลงทะเบียนผ่านFIRMessagingDelegate
messaging:didReceiveRegistrationToken:
เช่นเดียวกับที่แพลตฟอร์มของ Apple มักจะส่งโทเค็นอุปกรณ์ APNs เมื่อแอปเริ่มต้น
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 คุณจะต้องแมปโทเค็น APN กับ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 แล้ว คุณก็พร้อมที่จะเพิ่มการจัดการข้อความและลักษณะการทำงานขั้นสูงอื่นๆ ลงในแอปแล้ว ดูข้อมูลเพิ่มเติมได้จากคู่มือต่อไปนี้