Nhận tin nhắn FCM ở chế độ khởi động trực tiếp

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 bạn nhận được thông báo chuông báo 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à quy định hạn chế chung cho chế độ khởi động trực tiếp. Bạn cần cân nhắc mức độ hiển thị của các thông báo 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 cho chế độ khởi động trực tiếp.
  • Thiết bị phải cài đặt phiên bản Dịch vụ Google Play gần đây (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

  1. 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'
    
  2. Đặt FirebaseMessagingService của ứng dụng ở chế độ nhận biết khởi động trực tiếp bằng cách thêm thuộc tính android: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 xem 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 xác thực 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, BroadcastReceivers hoặc Services khác không được đánh dấu là nhận biết 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 không phải 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ụ sẽ cần phải nhận biết được 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ế độ này. 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 một ứ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 Application tuỳ 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 xác thực ở chế độ khởi động trực tiếp).

Gửi tin nhắn đã bật tính năng 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 API HTTP phiên bản 1.

Yêu cầu thông báo phải bao gồm 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,
    },
}