1. Giới thiệu
Lần cập nhật gần đây nhất: ngày 6 tháng 1 năm 2020
Giải pháp gửi thông báo qua đám mây của Firebase (FCM) là một giải pháp nhắn tin đa nền tảng cho phép bạn gửi tin nhắn một cách đáng tin cậy mà không mất phí.
Khi dùng FCM, bạn có thể thông báo cho ứng dụng khách về việc có email mới hoặc dữ liệu khác để đồng bộ hoá. Bạn có thể gửi tin nhắn thông báo để tăng mức độ tương tác lại và giữ chân người dùng. Đối với các trường hợp sử dụng như nhắn tin nhanh, một tin nhắn có thể chuyển tải trọng tối đa 4KB sang ứng dụng khách.
Tính năng này hoạt động ra sao?
Quá trình triển khai FCM bao gồm hai thành phần chính để gửi và nhận:
- Một môi trường đáng tin cậy như Cloud Functions cho Firebase hoặc máy chủ ứng dụng để xây dựng, nhắm mục tiêu và gửi thông báo.
- Một ứng dụng chạy iOS, Android hoặc web (JavaScript) nhận tin nhắn qua dịch vụ truyền tải dành riêng cho nền tảng tương ứng.
Tổng quan về kiến trúc FCM
FCM dựa vào nhóm thành phần sau đây có chức năng tạo, truyền tải và nhận thông báo:
- Công cụ để soạn hoặc tạo lời mời nhắn tin. Trình soạn thông báo cung cấp một tuỳ chọn dựa trên GUI để tạo yêu cầu thông báo. Để được hỗ trợ và tự động hoá hoàn toàn cho tất cả các loại thông báo, bạn phải tạo yêu cầu thông báo trong một môi trường máy chủ đáng tin cậy có hỗ trợ SDK quản trị của Firebase hoặc giao thức máy chủ FCM. Môi trường này có thể là Cloud Functions cho Firebase, Google App Engine hoặc máy chủ ứng dụng của riêng bạn.
- Phần phụ trợ FCM (cùng với các chức năng khác) chấp nhận các yêu cầu tin nhắn, thực hiện quá trình gửi tin nhắn thông qua chủ đề và tạo siêu dữ liệu tin nhắn, chẳng hạn như mã nhận dạng tin nhắn.
- Một tầng truyền tải ở cấp nền tảng, định tuyến thông báo đến thiết bị được nhắm mục tiêu, xử lý việc gửi thông báo và áp dụng cấu hình dành riêng cho nền tảng khi thích hợp. Tầng truyền tải này bao gồm:
- Lớp truyền tải Android (ATL) dành cho thiết bị Android có Dịch vụ Google Play
- Dịch vụ thông báo đẩy của Apple (APN) dành cho các thiết bị iOS
- Giao thức đẩy web cho ứng dụng web
- FCM SDK trên thiết bị của người dùng, nơi thông báo hiển thị hoặc thông báo được xử lý theo trạng thái nền trước/nền sau của ứng dụng và mọi logic ứng dụng có liên quan.
Sản phẩm bạn sẽ tạo ra
Trong lớp học lập trình này, bạn sẽ thêm thông báo đẩy vào một ứng dụng iOS mẫu bằng FCM.
Kiến thức bạn sẽ học được
- Cách đăng ký và huỷ đăng ký cho người dùng đối với thông báo đẩy
- Cách xử lý thông báo đẩy đến
- Cách hiển thị thông báo
- Cách phản hồi lượt nhấp vào thông báo
Bạn cần có
- Xcode 11.0 trở lên
- CocoaPods 1.9.0 trở lên
- Tài khoản nhà phát triển của Apple
- Một thiết bị iOS thực để chạy ứng dụng của bạn
- Kiến thức cơ bản về Swift
2. Thiết lập
Tải mã mẫu xuống
Trong lớp học lập trình này, bạn sẽ xây dựng ứng dụng kiểm thử của riêng mình, nhưng nếu muốn xem và chạy ứng dụng mẫu hiện có, bạn có thể tải mã mẫu bắt đầu nhanh xuống.
Có hai cách để lấy mẫu:
- Sao chép kho lưu trữ Git:
$ git clone https://github.com/firebase/quickstart-ios.git
- Tải tệp ZIP xuống:
Nếu tải nguồn xuống dưới dạng tệp ZIP, việc giải nén tệp đó sẽ cung cấp cho bạn một thư mục gốc quickstart-ios
.
Tạo ứng dụng mới
Tạo ứng dụng kiểm thử của riêng bạn bằng cách làm theo các bước sau (các bước bên dưới nằm trong XCode 12.3):
- Mở XCode rồi chọn Tạo dự án Xcode mới.
- Chọn Ứng dụng rồi nhấp vào Tiếp theo.
- Nhập Tên sản phẩm (ví dụ: MessagingExample)
- Chọn Nhóm (Nếu bạn chưa tạo Nhóm, hãy định cấu hình nhóm trong Tài khoản nhà phát triển của Apple).
- Nhập Mã nhận dạng tổ chức (ví dụ:
com.
your-name
) - Nhập Mã nhận dạng gói (ví dụ:
com.
your-name
.MessagingExample
. Đây phải là mã riêng biệt trong số tất cả các ứng dụng iOS). - Chọn Bảng phân cảnh trong trình đơn kéo xuống Giao diện.
- Chọn Uỷ quyền ứng dụng UIKit trong trình đơn kéo xuống Vòng đời.
- Chọn Swift trong Language (Ngôn ngữ).
- Nhấp vào Tiếp theo.
Bạn sẽ cần có Mã nhận dạng gói khi tạo khoá APN và đăng ký ứng dụng với dự án Firebase.
3. Định cấu hình APN
Tạo khoá xác thực
Phần này mô tả cách tạo khoá xác thực cho Mã ứng dụng được bật cho Thông báo đẩy. Nếu đang có khoá, bạn có thể sử dụng khoá đó thay vì tạo khoá mới.
Cách tạo khoá xác thực:
- Trong tài khoản nhà phát triển của bạn, hãy chuyển đến phần Chứng chỉ, Giá trị nhận dạng và Hồ sơ rồi chuyển đến phần Khoá.
- Nhấp vào nút Thêm (+) ở góc trên bên phải.
- Nhập nội dung mô tả cho Khoá xác thực APN
- Trong phần Dịch vụ khoá, hãy chọn hộp đánh dấu APN rồi nhấp vào Tiếp tục.
- Nhấp vào Đăng ký rồi nhấp vào Tải xuống. Lưu khoá của bạn vào một nơi an toàn. Bạn chỉ cần tải một lần xuống và không thể truy xuất khoá sau này.
Tạo Mã ứng dụng
Mã ứng dụng là giá trị nhận dạng giúp nhận dạng duy nhất một ứng dụng. Theo quy ước, giá trị này được biểu thị bằng một miền đảo ngược.
- Chuyển đến Trung tâm thành viên dành cho nhà phát triển của Apple rồi đăng nhập.
- Chuyển đến phần Chứng chỉ, Giá trị nhận dạng và Hồ sơ.
- Chuyển đến phần Giá trị nhận dạng.
- Nhấp vào nút dấu + để tạo một Mã ứng dụng mới.
- Chọn nút chọn Mã ứng dụng rồi nhấp vào Tiếp tục.
- Chọn Ứng dụng rồi nhấp vào Tiếp tục.
- Cách tạo Mã ứng dụng mới:
- Nhập Tên cho Mã ứng dụng của bạn.
- Nhập Mã nhóm. Giá trị này phải khớp với Mã nhóm trong thẻ Thành viên.
- Trong phần Hậu tố ID ứng dụng, hãy chọn ID ứng dụng rõ ràng, sau đó nhập ID gói của bạn.
- Trong phần Dịch vụ ứng dụng, hãy nhớ đánh dấu vào mục Thông báo đẩy.
- Nhấp vào Tiếp tục rồi kiểm tra để đảm bảo bạn đã nhập đúng thông tin:
- Giá trị của Identifier phải khớp với việc nối các giá trị của Mã nhóm và Mã nhận dạng gói
- Thông báo đẩy phải ở trạng thái Có thể định cấu hình
- Nhấp vào Đăng ký để tạo Mã ứng dụng.
Tạo hồ sơ
Để thử nghiệm ứng dụng trong khi phát triển, bạn cần có Hồ sơ cho giai đoạn phát triển để cho phép thiết bị của mình chạy một ứng dụng chưa được xuất bản trên App Store.
- Chuyển đến Trung tâm thành viên dành cho nhà phát triển của Apple rồi đăng nhập.
- Chuyển đến phần Chứng chỉ, Giá trị nhận dạng và Hồ sơ.
- Trong menu thả xuống ở góc trên cùng bên trái, hãy chọn iOS, tvOS, watchOS nếu chưa chọn, sau đó chuyển đến Hồ sơ.
- Nhấp vào nút + để tạo Hồ sơ mới.
- Chọn Phát triển ứng dụng iOS làm loại hồ sơ cấp phép, sau đó nhấp vào Tiếp tục.
- Trong trình đơn thả xuống, hãy chọn mã ứng dụng mà bạn muốn sử dụng, sau đó nhấp vào Tiếp tục.
- Chọn chứng chỉ Phát triển iOS của ID ứng dụng mà bạn đã chọn ở bước trước, sau đó nhấp vào Tiếp tục.
- Chọn thiết bị iOS mà bạn muốn đưa vào Hồ sơ cấp phép, sau đó nhấp vào Tiếp tục. Hãy nhớ chọn mọi thiết bị bạn muốn dùng để kiểm thử.
- Nhập tên cho hồ sơ cấp phép này (ví dụ: MessagingExampleProfile), sau đó nhấp vào Generate (Tạo).
- Nhấp vào Tải xuống để lưu Hồ sơ cấp phép vào máy Mac của bạn.
- Nhấp đúp vào tệp Hồ sơ cấp phép để cài đặt tệp đó.
4. Thêm Firebase vào dự án iOS của bạn
Tạo dự án Firebase
Trước khi có thể thêm Firebase vào ứng dụng iOS, bạn cần tạo dự án Firebase để kết nối với ứng dụng iOS của mình. Hãy đọc bài viết Tìm hiểu về các dự án Firebase để tìm hiểu thêm về các dự án Firebase.
- Trong bảng điều khiển của Firebase, hãy nhấp vào Thêm dự án, sau đó chọn hoặc nhập Tên dự án.
Nếu đang có một dự án Google Cloud Platform (GCP), thì bạn có thể chọn dự án đó từ trình đơn thả xuống để thêm tài nguyên Firebase vào dự án đó.
- (Không bắt buộc) Nếu đang tạo dự án mới, bạn có thể chỉnh sửa Mã dự án.
Firebase tự động chỉ định một mã nhận dạng duy nhất cho dự án Firebase của bạn. Hãy truy cập vào mục Tìm hiểu dự án Firebase để tìm hiểu cách Firebase sử dụng mã dự án.
- Nhấp vào Tiếp tục.
- Thiết lập Google Analytics cho dự án của bạn để có được trải nghiệm tối ưu khi sử dụng bất kỳ sản phẩm Firebase nào sau đây:
- Firebase Crashlytics
- Dự đoán Firebase
- Giải pháp gửi thông báo qua đám mây của Firebase
- Tính năng gửi thông báo trong ứng dụng của Firebase
- Cấu hình từ xa Firebase
- Thử nghiệm A/B trong Firebase
Khi được nhắc, hãy chọn sử dụng tài khoản Google Analytics hiện có hoặc tạo tài khoản mới. Nếu bạn chọn tạo tài khoản mới, hãy chọn vị trí báo cáo Analytics, sau đó chấp nhận chế độ cài đặt chia sẻ dữ liệu và điều khoản của Google Analytics cho dự án của bạn.
- Nhấp vào Tạo dự án (hoặc Thêm Firebase, nếu bạn đang sử dụng dự án GCP hiện có).
Firebase tự động cấp tài nguyên cho dự án Firebase của bạn. Khi quá trình này hoàn tất, bạn sẽ được đưa đến trang tổng quan cho dự án Firebase trong bảng điều khiển của Firebase.
Đăng ký ứng dụng của bạn với Firebase
Sau khi có một dự án Firebase, bạn có thể thêm ứng dụng iOS của mình vào dự án đó.
Hãy xem bài viết Tìm hiểu về các dự án Firebase để tìm hiểu thêm về các phương pháp hay nhất và những điểm cần lưu ý khi thêm ứng dụng vào dự án Firebase, bao gồm cả cách xử lý nhiều biến thể bản dựng.
- Chuyển đến bảng điều khiển của Firebase.
- Ở giữa trang tổng quan của dự án, hãy nhấp vào biểu tượng iOS để bắt đầu 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 lựa chọn về nền tảng.
- Nhập mã gói ứng dụng của bạn vào trường Mã nhận dạng gói iOS.
- (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ã cửa hàng ứng dụng.
- 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 iOS Firebase của bạn (
GoogleService-Info.plist
). - Di chuyển tệp cấu hình vào 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ả mục tiêu.
Nếu có nhiều mã gói trong dự án, bạn phải liên kết mỗi mã gói với một ứng dụng đã đăng ký trong bảng điều khiển của Firebase để mỗi ứng dụng đều có thể có tệp GoogleService-Info.plist
riêng.
Đóng XCode.
Thêm Firebase SDK vào ứng dụng của bạn
Bạn nên sử dụng CocoaPods để cài đặt thư viện Firebase. Tuy nhiên, nếu không muốn sử dụng CocoaPods, bạn có thể tích hợp trực tiếp khung SDK hoặc sử dụng phiên bản beta của Trình quản lý gói Swift.
- Tạo Podfile nếu bạn chưa có. Nếu bạn đang sử dụng mẫu bắt đầu nhanh, thì dự án Xcode và Podfile (có nhóm) đã có sẵn.
$ cd MessagingExample $ pod init
- Đối với Podfile, hãy thêm các nhóm Firebase mà bạn muốn sử dụng trong ứng dụng của mình.
Bạn có thể thêm bất kỳ sản phẩm Firebase nào được hỗ trợ vào ứng dụng iOS của mình.
Trong mẫu bắt đầu nhanh, chúng tôi đã thêm SDK của Google Analytics và Giải pháp gửi thông báo qua đám mây của Firebase.
# Add the Firebase pod for Google Analytics pod 'Firebase/Analytics' # Add the pod for Firebase Cloud Messaging pod 'Firebase/Messaging'
- Cài đặt các nhóm, sau đó mở tệp
.xcworkspace
để xem dự án trong Xcode:
$ pod install
- Mở
MessagingExample.xcworkspace
, rồi nhấp vào Tiếp theo trong bảng điều khiển của Firebase.
Khởi chạy Firebase trong ứng dụng của bạn
Bạn cần thêm mã khởi chạy Firebase vào ứng dụng của mình.
Nhập mô-đun Firebase và định cấu hình một bản sao dùng chung (Trong mẫu bắt đầu nhanh, mô-đun Firebase đã được nhập sẵn).
- Nhập mô-đun Firebase trong
UIApplicationDelegate
của bạn:
AppDelegate.swift
import UIKit
import Firebase // Add this line
- Định cấu hình một thực thể dùng chung trong FirebaseApp, thường là trong phương thức
application:didFinishLaunchingWithOptions:
của ứng dụng:
AppDelegate.swift
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
FirebaseApp.configure() // Add this line
return true
}
- Nhấp vào Tiếp theo trong bảng điều khiển của Firebase.
- Firebase SDK được thêm vào ứng dụng của bạn. Nhấp vào Tiếp tục đến bảng điều khiển.
5. Định cấu hình ứng dụng FCM
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.
- Bên trong dự án của bạn trong bảng điều khiển của Firebase, hãy chọn biểu tượng bánh răng, chọn Cài đặt dự án, sau đó chọn thẻ Gửi thông báo qua đám mây.
- Trong khoá xác thực ANG ở bên dưới phần Cấu hình ứng dụng iOS, hãy nhấp vào nút Tải lên.
- Duyệt tới vị trí bạn đã lưu khoá, chọn khoá đó rồi nhấp vào Mở. Thêm mã khoá cho khoá (có trong Chứng chỉ, Giá trị nhận dạng và Hồ sơ 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
Đăng ký ứng dụng của bạn để nhận thông báo từ xa khi khởi động hoặc tại thời điểm bạn muốn trong luồng ứng dụng.
Trong mẫu bắt đầu nhanh, registerForRemoteNotifications
đã được thêm sẵn.
AppDelegate.swift
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
FirebaseApp.configure()
// [START register for remote notifications]
if #available(iOS 10.0, *) {
// For iOS 10 display notification (sent via APNS)
UNUserNotificationCenter.current().delegate = self
let authOptions: UNAuthorizationOptions = [.alert, .badge, .sound]
UNUserNotificationCenter.current().requestAuthorization(options: authOptions, completionHandler: {_, _ in })
} else {
let settings: UIUserNotificationSettings = UIUserNotificationSettings(types: [.alert, .badge, .sound], categories: nil)
application.registerUserNotificationSettings(settings)
}
application.registerForRemoteNotifications()
// [END register for remote notifications]
return true
}
Chỉ định thuộc tính uỷ quyền của UNUserNotificationCenter
bằng cách thêm các dòng này ở cuối AppDelegate.swift.
AppDelegate.swift
@available(iOS 10, *)
extension AppDelegate : UNUserNotificationCenterDelegate {
// Receive displayed notifications for iOS 10 devices.
func userNotificationCenter(_ center: UNUserNotificationCenter,
willPresent notification: UNNotification,
withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void) {
let userInfo = notification.request.content.userInfo
// Print full message.
print(userInfo)
// Change this to your preferred presentation option
completionHandler([[.alert, .sound]])
}
func userNotificationCenter(_ center: UNUserNotificationCenter,
didReceive response: UNNotificationResponse,
withCompletionHandler completionHandler: @escaping () -> Void) {
let userInfo = response.notification.request.content.userInfo
// Print full message.
print(userInfo)
completionHandler()
}
}
Thiết lập 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 tính năng uỷ quyền ứng dụng của bạn tuân thủ giao thức uỷ quyền gửi thông báo, thì bạn có thể thiết lập tính năng uỷ quyền trên application:didFinishLaunchingWithOptions:
cho chính nó (Trong mẫu bắt đầu nhanh, tuỳ chọn này đã được thiết lập sẵn).
AppDelegate.swift
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
FirebaseApp.configure()
Messaging.messaging().delegate = self // Add this line
// [START register for remote notifications]
if #available(iOS 10.0, *) {
// For iOS 10 display notification (sent via APNS)
UNUserNotificationCenter.current().delegate = self
let authOptions: UNAuthorizationOptions = [.alert, .badge, .sound]
UNUserNotificationCenter.current().requestAuthorization(options: authOptions, completionHandler: {_, _ in })
} else {
let settings: UIUserNotificationSettings = UIUserNotificationSettings(types: [.alert, .badge, .sound], categories: nil)
application.registerUserNotificationSettings(settings)
}
application.registerForRemoteNotifications()
// [END register for remote notifications]
return true
}
Chỉ định thuộc tính uỷ quyền của FIRMessaging
bằng cách thêm các dòng này ở cuối AppDelegate.swift.
AppDelegate.swift
extension AppDelegate : MessagingDelegate {
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)
}
}
Thêm tính năng
Bạn đã thêm tính năng Thông báo đẩy trong phần Create an App ID (Tạo ID ứng dụng), nhưng bạn cũng phải thêm khả năng này trên XCode bằng các bước sau (các bước bên dưới nằm trong XCode 12.3):
- Nhấp vào tên dự án trong Khu vực điều hướng.
- Nhấp vào Ký & Chức năng.
- Nhấp vào + Chức năng.
- Nhấp đúp vào Background Modes (Chế độ nền).
- Nhấp vào + Chức năng một lần nữa.
- Nhấp đúp vào Thông báo đẩy.
- Xem Remote notifications (Thông báo từ xa) trong phần Background Modes (Chế độ nền).
6. Gửi tin nhắn thông báo
Bạn có thể gửi tin nhắn thử nghiệm theo các bước sau:
- Cài đặt và chạy ứng dụng trên thiết bị mục tiêu. Bạn cần chấp nhận yêu cầu cấp quyền nhận thông báo từ xa.
- Lấy mã thông báo đăng ký trong nhật ký XCode.
- Hãy đảm bảo ứng dụng đang chạy trong nền trên thiết bị.
- Mở Trình soạn thông báo rồi chọn Thông báo mới.
- Nhập nội dung tin nhắn.
- Chọn Gửi tin nhắn thử nghiệm.
- Trong trường có nhãn Thêm mã thông báo đăng ký FCM, nhập mã thông báo đăng ký mà bạn nhận được ở bước 2.
- Nhấp vào Kiểm tra.
Sau khi bạn nhấp vào 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 trong trung tâm thông báo.
Để biết thông tin chi tiết về việc gửi tin nhắn đế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 tin nhắn được gửi và mở trên thiết bị iOS và Android.
7. Xin chúc mừng
Xin chúc mừng, bạn đã gửi thành công thư thử nghiệm!
Còn nhiều chức năng và cấu hình khác trong FCM, chẳng hạn như gói thuê bao chủ đề.
Hãy tham khảo tài liệu chính thức dành cho nhà phát triển nếu bạn quan tâm đến chủ đề đó.
Tiếp theo là gì?
Hãy xem một số lớp học lập trình này.