Để bắt đầu sử dụng FCM, hãy xây dựng trường hợp sử dụng đơn giản nhất: gửi thông báo kiểm thử từ Trình soạn thông báo đến một thiết bị phát triển khi ứng dụng đang chạy ở chế độ nền trên thiết bị. Trang này liệt kê tất cả các bước để thực hiện việc này, từ thiết lập đến xác minh. Trang này có thể bao gồm các bước bạn đã hoàn tất nếu bạn đã thiết lập ứng dụng khách của Apple cho FCM.
Thêm Firebase vào dự án Apple
Phần này trình bày các nhiệm vụ mà bạn có thể đã hoàn thành nếu đã bật các tính năng Firebase khác cho ứng dụng của mình. Riêng đối với FCM, bạn sẽ cần tải khoá xác thực APN lên và đăng ký nhận thông báo từ xa.
Điều kiện tiên quyết
Cài đặt các phần sau:
- Xcode 15.2 trở lên
Hãy đảm bảo dự án của bạn đáp ứng các yêu cầu sau:
- Dự án của bạn phải nhắm đến các phiên bản nền tảng này trở lên:
- iOS 13
- macOS 10.15
- tvOS 13
- watchOS 7
- Dự án của bạn phải nhắm đến các phiên bản nền tảng này trở lên:
Thiết lập một thiết bị Apple thực để chạy ứng dụng của bạn và hoàn thành các thao tác sau:
- Lấy Khoá xác thực thông báo đẩy của Apple cho Tài khoản nhà phát triển của Apple.
- Bật Thông báo đẩy trong XCode trong phần App (Ứng dụng) > Capabilities (Chức năng).
- Đăng nhập vào Firebase bằng Tài khoản Google của bạn.
Nếu chưa có dự án Xcode và chỉ muốn dùng thử một sản phẩm Firebase, bạn có thể tải một trong các mẫu làm quen nhanh của chúng tôi xuống.
Tạo một dự án Firebase
Trước khi có thể thêm Firebase vào ứng dụng Apple, bạn cần tạo một dự án Firebase để kết nối với ứng dụng của mình. Hãy truy cập vào bài viết Tìm hiểu về dự án Firebase để tìm hiểu thêm về dự án Firebase.
Đăng ký ứng dụng của bạn với Firebase
Để sử dụng Firebase trong ứng dụng Apple, bạn cần đăng ký ứng dụng của mình với dự án Firebase. Việc đăng ký ứng dụng thường được gọi là "thêm" ứng dụng vào dự án.
Chuyển đến bảng điều khiển Firebase.
Ở trung tâm trang tổng quan của dự án, hãy nhấp vào biểu tượng iOS+ để chạy quy trình thiết lập.
Nếu bạn đã thêm một ứng dụng vào dự án Firebase, hãy nhấp vào Thêm ứng dụng để hiển thị các tuỳ chọn nền tảng.
Nhập mã nhận dạng gói của ứng dụng vào trường mã nhận dạng gói.
(Không bắt buộc) Nhập thông tin khác về ứng dụng: Biệt hiệu ứng dụng và Mã App Store.
Nhấp vào Đăng ký ứng dụng.
Thêm tệp cấu hình Firebase
Nhấp vào Tải GoogleService-Info.plist xuống để lấy tệp cấu hình nền tảng Apple Firebase (
GoogleService-Info.plist
).Di chuyển tệp cấu hình vào thư mục gốc của dự án Xcode. Nếu được nhắc, hãy chọn thêm tệp cấu hình vào tất cả các mục tiêu.
Nếu có nhiều mã nhận dạng gói trong dự án, bạn phải liên kết từng mã nhận dạng gói với một ứng dụng đã đăng ký trong bảng điều khiển Firebase để mỗi ứng dụng có thể có tệp GoogleService-Info.plist
riêng.
Thêm SDK Firebase vào ứng dụng
Sử dụng Trình quản lý gói Swift để cài đặt và quản lý các phần phụ thuộc Firebase.
- Trong Xcode, khi dự án ứng dụng đang mở, hãy chuyển đến File > Add Packages (Tệp > Thêm gói).
- Khi được nhắc, hãy thêm kho lưu trữ SDK nền tảng Apple của Firebase:
- Chọn thư viện Firebase Cloud Messaging.
- Thêm cờ
-ObjC
vào phần Other Linker Flags (Cờ trình liên kết khác) trong chế độ cài đặt bản dựng của mục tiêu. - Để có trải nghiệm tối ưu với Firebase Cloud Messaging, bạn nên bật Google Analytics trong dự án Firebase và thêm SDK Firebase cho Google Analytics vào ứng dụng. Bạn có thể chọn thư viện không có tính năng thu thập IDFA hoặc có tính năng thu thập IDFA.
- Khi hoàn tất, Xcode sẽ tự động bắt đầu phân giải và tải các phần phụ thuộc xuống ở chế độ nền.
https://github.com/firebase/firebase-ios-sdk.git
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 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ẻ Cloud Messaging (Thông báo qua đám mây).
-
Trong phần Khoá xác thực APN thuộc mục Cấu hình ứng dụng iOS, hãy nhấp vào nút 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ã khoá của 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.
Khởi động Firebase trong ứng dụng
Bạn cần thêm mã khởi chạy Firebase vào ứng dụng. Nhập mô-đun Firebase và định cấu hình một thực thể dùng chung như sau:
- Nhập mô-đun
FirebaseCore
trongUIApplicationDelegate
, cũng như mọi mô-đun Firebase khác mà ứng dụng của bạn sử dụng. Ví dụ: để sử dụng Cloud Firestore và Authentication:SwiftUI
import SwiftUI import FirebaseCore import FirebaseFirestore import FirebaseAuth // ...
Swift
import FirebaseCore import FirebaseFirestore import FirebaseAuth // ...
Objective-C
@import FirebaseCore; @import FirebaseFirestore; @import FirebaseAuth; // ...
- Định cấu hình một bản sao dùng chung
FirebaseApp
trong phương thứcapplication(_:didFinishLaunchingWithOptions:)
của uỷ quyền ứng dụng:SwiftUI
// Use Firebase library to configure APIs FirebaseApp.configure()
Swift
// Use Firebase library to configure APIs FirebaseApp.configure()
Objective-C
// Use Firebase library to configure APIs [FIRApp configure];
- Nếu đang sử dụng SwiftUI, bạn phải tạo một trình uỷ quyền ứng dụng và đính kèm trình uỷ quyền đó vào cấu trúc
App
thông quaUIApplicationDelegateAdaptor
hoặcNSApplicationDelegateAdaptor
. Bạn cũng phải tắt tính năng hoán đổi ứng dụng uỷ quyền. Để biết thêm thông tin, hãy xem hướng dẫn về SwiftUI.SwiftUI
@main struct YourApp: App { // register app delegate for Firebase setup @UIApplicationDelegateAdaptor(AppDelegate.self) var delegate var body: some Scene { WindowGroup { NavigationView { ContentView() } } } }
Đă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 luồng ứng dụng, hãy đăng ký ứng dụng của bạn để nhận thông báo từ xa. GọiregisterForRemoteNotifications
như sau:
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ý
Để gửi thông báo đến một thiết bị cụ thể, bạn cần biết mã thông báo đăng ký của thiết bị đó. Vì bạn cần nhập mã thông báo vào một trường trong Trình soạn thông báo để hoàn tất hướng dẫn này, hãy nhớ sao chép mã thông báo hoặc lưu trữ mã thông báo một cách an toàn sau khi truy xuất.
Theo mặc định, SDK FCM sẽ tạo một mã thông báo đăng ký cho thực thể ứ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ị APNs, mã thông báo này cho phép bạn gửi thông báo được nhắm 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ị APNs 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 truy xuấ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 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 đó đượ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 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 gửi tin nhắn và đặt 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 thủ giao thức uỷ quyền thông báo, bạn có thể đặt 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 mỗi khi ứ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, đó 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.
- Đă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ể truy xuất mã thông báo trực tiếp bằng cách sử dụng token(completion:). Hệ thống sẽ cung cấp lỗi không rỗng nếu không truy xuất được mã thông báo 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 quá trình làm mới mã thông báo
Để được 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 đại diện tuân thủ giao thức uỷ quyền nhắn tin. Ví dụ sau đây đăng ký người được 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 là 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.
Gửi thông báo
Cài đặt và chạy ứng dụng trên thiết bị mục tiêu. Trên thiết bị Apple, bạn cần chấp nhận yêu cầu cấp quyền nhận thông báo từ xa.
Đảm bảo ứng dụng đang chạy ở chế độ nền trên thiết bị.
Trong bảng điều khiển Firebase, hãy mở trang Messaging (Nhắn tin).
Nếu đây là thông báo đầu tiên của bạn, hãy chọn Tạo chiến dịch đầu tiên.
- Chọn Thông báo Firebase rồi chọn Tạo.
Nếu không, trên thẻ Chiến dịch, hãy chọn Chiến dịch mới rồi chọn Thông báo.
Nhập nội dung tin nhắn. Tất cả các trường khác là không bắt buộc.
Chọn Gửi tin nhắn thử nghiệm trong ngăn bên phải.
Trong trường có nhãn Thêm mã thông báo đăng ký FCM, hãy nhập mã thông báo đăng ký mà bạn đã nhận được trong phần trước của hướng dẫn này.
Chọn Kiểm thử.
Sau khi bạn chọn Test (Kiểm thử), thiết bị khách được nhắm đến (có ứng dụng chạy trong nền) sẽ nhận được thông báo.
Để biết thông tin chi tiết về việc phân phối thông báo đến ứng dụng của bạn, hãy xem trang tổng quan báo cáo FCM. Trang tổng quan này ghi lại số lượng thông báo được gửi và mở trên thiết bị Apple và Android, cùng với dữ liệu về "lượt hiển thị" (số thông báo mà người dùng xem) cho ứng dụng Android.
Các bước tiếp theo
Để mở rộng thông báo và thêm các hành vi nâng cao khác vào ứng dụng, hãy xem: