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ị 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 khả năng hiển thị của các thông báo có bật tính năng 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 những 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 ở 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 thông báo FCM.
Bật tính năng xử lý thông báo ở chế độ khởi động trực tiếp trong ứng dụng của bạn
Trong tệp Gradle ở cấp ứng dụng, hãy thêm một 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'
Cho phép
FirebaseMessagingService
của ứng dụng nhận biết 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ách sử dụ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ụ này không được cố gắng sử dụng các thành phần, chẳng hạn như
Activities
,BroadcastReceivers
hoặcServices
khác không được đánh dấu là nhận biết được chế độ khởi động trực tiếp trong 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 trong 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 phải nhận biết quá trình khởi động trực tiếp, hoặc ứng dụng sẽ 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 tính năng 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 một
Application
tuỳ chỉnh, thìApplication
cũng cần nhận biết 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ó thể 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 gửi tin nhắn phải có khoá "direct_boot_ok": true
trong các lựa 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,
},
}