Đối với các ứng dụng khách Apple, bạn có thể nhận được thông báo và tải trọng dữ liệu lên tới 4096 byte qua giao diện APN của Giải pháp gửi thông báo qua đám mây của Firebase.
Để viết mã ứng dụng khách trong Objective-C hoặc Swift, bạn nên sử dụng API FIRMessaging. Ví dụ về bắt đầu nhanh cung cấp mã mẫu cho cả hai ngôn ngữ.
Kết hợp nhanh phương thức trong Giải pháp gửi thông báo qua đám mây của Firebase
SDK FCM thực hiện nhanh phương thức ở 2 lĩnh vực chính: liên kết mã thông báo APN của bạn với mã thông báo đăng ký FCM và thu thập dữ liệu phân tích trong quá trình xử lý lệnh gọi lại thông báo truyền xuống.
Các nhà phát triển không muốn sử dụng tính năng swizzling có thể tắt tính năng này bằng cách thêm cờ FirebaseAppDelegateProxyEnabled
vào tệp Info.plist của ứng dụng và đặt tệp này thành NO (giá trị boolean). Các phần liên quan trong hướng dẫn cung cấp các ví dụ về mã, cả khi bật và không bật tính năng lướt nhanh phương thức.
Thêm Firebase vào dự án Apple
Thêm Firebase vào dự án Apple nếu bạn chưa thêm.
Tải khoá xác thực APN lên
Tải khoá xác thực APN lên Firebase. Nếu bạn chưa có khoá xác thực APN, hãy nhớ tạo một khoá trong Trung tâm thành viên dành cho nhà phát triển của Apple.
-
Bên trong dự án của bạn trên bảng điều khiển của Firebase, hãy chọn biểu tượng bánh răng, chọn Project Settings (Cài đặt dự án), sau đó chọn thẻ Cloud Messaging.
-
Trong khoá xác thực APN ở mục Cấu hình ứng dụng iOS, hãy nhấp vào nút Upload (Tải lên).
-
Duyệt đến vị trí bạn đã lưu khoá, chọn khoá rồi nhấp vào Open (Mở). Thêm mã nhận dạng khoá cho khoá (có trong Trung tâm thành viên dành cho nhà phát triển của Apple) rồi nhấp vào Upload (Tải lên).
Đăng ký nhận thông báo từ xa
Khi khởi động hoặc tại thời điểm mong muốn trong quy trình chạy ứng dụng, hãy đăng ký ứng dụng để nhận thông báo từ xa. GọiregisterForRemoteNotifications
như minh hoạ:
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];
Truy cập vào mã thông báo đăng ký
Theo mặc định, SDK FCM sẽ tạo mã thông báo đăng ký cho phiên bản ứng dụng khi khởi chạy ứng dụng. Tương tự như mã thông báo thiết bị của APN, mã thông báo này cho phép bạn gửi thông báo có mục tiêu đến bất kỳ phiên bản cụ thể nào của ứng dụng.
Tương tự như cách các nền tảng của Apple thường phân phối mã thông báo thiết bị APN khi khởi động ứng dụng, FCM cung cấp mã thông báo đăng ký thông qua phương thức messaging:didReceiveRegistrationToken:
của FIRMessagingDelegate
.
SDK FCM sẽ truy xuất mã thông báo mới hoặc mã thông báo hiện có trong lần đầu khởi chạy ứng dụng và mỗi khi mã thông báo được cập nhật hoặc không hợp lệ.
Trong mọi trường hợp, SDK FCM sẽ gọi messaging:didReceiveRegistrationToken:
bằng mã thông báo hợp lệ.
Mã thông báo đăng ký có thể thay đổi khi:
- Ứng dụng này được khôi phục trên một thiết bị mới
- Người dùng gỡ cài đặt/cài đặt lại ứng dụng
- Người dùng xoá dữ liệu ứng dụng.
Đặt người được uỷ quyền nhắn tin
Để nhận mã thông báo đăng ký, hãy triển khai giao thức uỷ quyền nhắn tin và đặt thuộc tính delegate
của FIRMessaging
sau khi gọi [FIRApp configure]
.
Ví dụ: nếu thực thể uỷ quyền cho ứng dụng của bạn tuân thủ giao thức uỷ quyền thông báo, thì bạn có thể đặt chế độ uỷ quyền trên application:didFinishLaunchingWithOptions:
thành chính nó.
Swift
Messaging.messaging().delegate = self
Objective-C
[FIRMessaging messaging].delegate = self;
Đang tìm nạp mã thông báo đăng ký hiện tại
Mã thông báo đăng ký được phân phối thông qua phương thức messaging:didReceiveRegistrationToken:
. Phương thức này thường được gọi một lần cho mỗi ứng dụng khởi động bằng mã thông báo đăng ký. Khi phương thức này được gọi, đây là thời điểm lý tưởng để:
- Nếu mã thông báo đăng ký mới, hãy gửi mã này đến máy chủ ứng dụng của bạn.
- Đăng ký mã thông báo đăng ký cho các chủ đề. Điều này chỉ bắt buộc đối với các gói thuê bao mới hoặc trong trường hợp người dùng đã cài đặt lại ứng dụng.
Bạn có thể trực tiếp truy xuất mã thông báo bằng cách sử dụng token(complete:). Hệ thống sẽ báo lỗi không rỗng nếu quá trình truy xuất mã thông báo không thành công theo bất kỳ cách nào.
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; } }];
Bạn có thể sử dụng phương thức này bất cứ lúc nào để truy cập vào mã thông báo thay vì lưu trữ mã.
Theo dõi mã thông báo
Để nhận thông báo bất cứ khi nào mã thông báo được cập nhật, hãy cung cấp một thực thể uỷ quyền tuân theo giao thức uỷ quyền thông báo. Ví dụ sau đây đăng ký thực thể đại diện và thêm phương thức uỷ quyền phù hợp:
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. }
Ngoài ra, bạn có thể theo dõi NSNotification
có tên
kFIRMessagingRegistrationTokenRefreshNotification
thay vì cung cấp một phương thức uỷ quyền. Thuộc tính mã thông báo luôn có giá trị mã thông báo hiện tại.
Đã tắt swizzling: ánh xạ mã thông báo APN và mã thông báo đăng ký
Nếu bạn đã vô hiệu hoá phương thức swizzling hoặc đang tạo một ứng dụng SwiftUI, bạn sẽ cần ánh xạ rõ ràng mã thông báo APN của mình với mã thông báo đăng ký FCM. Triển khai phương thức application(_:didRegisterForRemoteNotificationsWithDeviceToken:)
để truy xuất mã thông báo APN, sau đó đặt thuộc tính apnsToken
của 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; }
Sau khi tạo mã thông báo đăng ký FCM, bạn có thể truy cập vào mã này và theo dõi các sự kiện làm mới bằng các phương thức tương tự như khi bật tính năng swizzling.
Ngăn việc tự động khởi chạy
Khi mã thông báo đăng ký FCM được tạo, thư viện sẽ tải dữ liệu nhận dạng và cấu hình lên Firebase. Nếu muốn người dùng chọn nhận thông báo rõ ràng trước, thì bạn có thể ngăn việc tạo mã thông báo tại thời điểm định cấu hình bằng cách tắt FCM. Để thực hiện việc này, hãy thêm giá trị siêu dữ liệu vào Info.plist
(không phải GoogleService-Info.plist
):
FirebaseMessagingAutoInitEnabled = NO
Để bật lại FCM, bạn có thể thực hiện cuộc gọi trong thời gian chạy:
Swift
Messaging.messaging().autoInitEnabled = true
Objective-C
[FIRMessaging messaging].autoInitEnabled = YES;
Sau khi đặt giá trị, giá trị này sẽ duy trì trong các lần khởi động lại ứng dụng.
Các bước tiếp theo
Sau khi thiết lập ứng dụng Apple, bạn có thể thêm cách xử lý thông báo và các hành vi khác nâng cao hơn vào ứng dụng của mình. Hãy xem các hướng dẫn sau để biết thêm thông tin: