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