Nếu muốn gửi thông báo FCM đến các ứng dụng trước khi thiết bị được mở khoá, bạn có thể bật chế độ khởi động trực tiếp. Ví dụ: nếu bạn muốn người dùng ứng dụng của mình nhận được thông báo báo thức ngay cả trên thiết bị đã khoá.
Khi xây dựng trường hợp sử dụng này, hãy tuân thủ các phương pháp hay nhất và hạn chế chung đối với chế độ khởi động trực tiếp. Bạn cần cân nhắc đến khả năng hiển thị của các thông báo được bật chế độ khởi động trực tiếp. Bất kỳ người dùng nào có quyền truy cập vào thiết bị đều có thể xem các thông báo này mà không cần nhập thông tin đăng nhập của người dùng.
Điều kiện tiên quyết
- Thiết bị phải được thiết lập cho chế độ khởi động trực tiếp.
- Thiết bị phải cài đặt phiên bản gần đây của Dịch vụ Google Play (19.0.54 trở lên).
- Ứng dụng phải sử dụng FCM SDK (
com.google.firebase:firebase-messaging) để nhận FCM thông báo.
Bật tính năng xử lý thông báo ở chế độ khởi động trực tiếp trong ứng dụng
Trong tệp Gradle cấp ứng dụng, hãy thêm phần phụ thuộc vào thư viện hỗ trợ khởi động trực tiếp FCM:
implementation 'com.google.firebase:firebase-messaging-directboot:20.2.0'Giúp
FirebaseMessagingServicecủa ứng dụng nhận biết được chế độ khởi động trực tiếp bằng cách thêm thuộc tínhandroid:directBootAware="true"vào tệp kê khai ứng dụng:<service android:name=".java.MyFirebaseMessagingService" android:exported="false" android:directBootAware="true"> <intent-filter> <action android:name="com.google.firebase.MESSAGING_EVENT" /> </intent-filter> </service>
Bạn cần đảm bảo rằng FirebaseMessagingService này có thể chạy ở chế độ khởi động trực tiếp. Bạn có thể kiểm tra bằng các yêu cầu sau:
- Dịch vụ không được truy cập vào bộ nhớ được bảo vệ bằng thông tin đăng nhập khi chạy ở chế độ khởi động trực tiếp.
- Dịch vụ không được cố gắng sử dụng các thành phần, chẳng hạn như
Activities,BroadcastReceivershoặc cácServiceskhác không được đánh dấu là nhận biết được chế độ khởi động trực tiếp khi chạy ở chế độ khởi động trực tiếp. - Mọi thư viện mà dịch vụ sử dụng cũng không được truy cập vào bộ nhớ được bảo vệ bằng thông tin đăng nhập cũng như không được gọi các thành phần non-directBootAware khi chạy ở chế độ khởi động trực tiếp. Điều này có nghĩa là mọi thư viện mà ứng dụng sử dụng được gọi từ dịch vụ đều cần nhận biết được chế độ khởi động trực tiếp hoặc ứng dụng cần kiểm tra xem ứng dụng có đang chạy ở chế độ khởi động trực tiếp hay không và không gọi các thư viện đó ở chế độ đó. Ví dụ: Firebase SDK hoạt động với chế độ khởi động trực tiếp (có thể được đưa vào ứng dụng mà không làm ứng dụng gặp sự cố ở chế độ khởi động trực tiếp), nhưng nhiều API Firebase không hỗ trợ việc gọi ở chế độ khởi động trực tiếp.
- Nếu ứng dụng đang sử dụng
Applicationtuỳ chỉnh, thìApplicationđó cũng cần nhận biết được chế độ khởi động trực tiếp (không có quyền truy cập vào bộ nhớ được bảo vệ bằng thông tin đăng nhập ở chế độ khởi động trực tiếp).
Gửi thông báo được bật chế độ khởi động trực tiếp
Bạn có thể gửi thông báo đến các thiết bị ở chế độ khởi động trực tiếp bằng HTTP v1 API.
Yêu cầu thông báo phải có khoá "direct_boot_ok": true trong các tuỳ chọn
AndroidConfig của nội dung yêu cầu. Ví dụ:
https://fcm.googleapis.com/v1/projects/myproject-b5ae1/messages:send
Content-Type:application/json
Authorization: Bearer ya29.ElqKBGN2Ri_Uz...HnS_uNreA
{
"message":{
"token" : "bk3RNwTe3H0:CI2k_HHwgIpoDKCIZvvDMExUdFQ3P1...",
"data": {
"score": "5x1",
"time": "15:10"
},
"android": {
"direct_boot_ok": true,
},
}