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