Đặt và quản lý mức độ ưu tiên của tin nhắn

Bạn có 2 lựa chọn để chỉ định mức độ ưu tiên gửi cho các thông báo truyền xuống trên Android: mức độ ưu tiên bình thường và mức độ ưu tiên cao. Việc gửi thông báo có mức độ ưu tiên bình thường và cao diễn ra như sau:

  • Mức độ ưu tiên bình thường. Đây là mức độ ưu tiên mặc định cho dữ liệu và thông báo. Thông báo có mức độ ưu tiên bình thường sẽ được gửi ngay lập tức khi thiết bị không ở chế độ ngủ. Khi thiết bị ở chế độ Nghỉ, quá trình gửi có thể bị trì hoãn để tiết kiệm pin cho đến khi thiết bị thoát khỏi chế độ này. Đối với những thông báo ít khẩn cấp hơn, chẳng hạn như thông báo về email mới, việc giữ cho giao diện người dùng của bạn luôn đồng bộ hoá hoặc đồng bộ hoá dữ liệu ứng dụng ở chế độ nền, hãy chọn mức độ ưu tiên phân phối bình thường.

  • Mức độ ưu tiên cao.FCM cố gắng gửi ngay các thông báo có mức độ ưu tiên cao, cho phép FCM đánh thức thiết bị ở chế độ ngủ khi cần và chạy một số quy trình xử lý có giới hạn (bao gồm cả quyền truy cập mạng rất hạn chế). Thông báo có mức độ ưu tiên cao thường sẽ dẫn đến việc người dùng tương tác với ứng dụng hoặc thông báo của ứng dụng.

Quyết định giữa thông báo có mức độ ưu tiên cao và thông báo có mức độ ưu tiên bình thường

Mặc dù thông báo có mức độ ưu tiên thông thường phù hợp với các thông tin cập nhật chung, nhưng bạn nên chọn mức độ ưu tiên cao khi cần đảm bảo gửi ngay thông báo cho các vấn đề hoặc hành động khẩn cấp. Vì thời gian phân phối cho các thông báo có mức độ ưu tiên bình thường có thể bị ảnh hưởng bởi Chế độ Doze, nên việc đặt hầu hết các thông báo mà người dùng nhìn thấy thành mức độ ưu tiên cao sẽ đảm bảo các thông báo đó được phân phối kịp thời. Ví dụ: bạn nên đặt thông báo như tin nhắn trò chuyện, vấn đề về tài khoản hoặc thông tin cập nhật về việc giao đồ ăn ở mức độ ưu tiên cao.

Xử lý thông báo cho thông báo có mức độ ưu tiên cao và bình thường

Đối với cả thông báo có mức độ ưu tiên cao và thông thường nhận được trên thiết bị Android, bạn có vài giây để xử lý tải trọng thông báo trong trình xử lý onMessageReceived. Đối với mọi thông báo yêu cầu xử lý không đồng bộ tải trọng thông báo, bạn nên sử dụng một cấu trúc như WorkManager, vì điều này có thể vượt quá thời gian được chỉ định cho trình xử lý onMessageReceived.

Đối với các thông báo có mức độ ưu tiên cao, bạn có thể lên lịch cho một tác vụ được tăng tốc bằng Android WorkManager để đảm bảo các thông báo này được ưu tiên và chạy cho đến khi hoàn tất.

Đối với thông báo có mức độ ưu tiên thông thường, bạn có thể lên lịch OneTimeWorkRequest thông thường bằng Android WorkManager. Điều này sẽ đảm bảo rằng công việc bắt buộc bổ sung được xử lý mà không cần sử dụng quy trình xử lý ưu tiên.

Đặt mức độ ưu tiên cho thư

Bạn có thể gửi thông báo cho người dùng bằng cách sử dụng Admin SDK, API REST FCM và bảng điều khiển Firebase. Để thay đổi chế độ cài đặt mức độ ưu tiên từ Admin SDK và FCM REST API, bạn phải cập nhật tải trọng JSON của thông báo. Bạn có thể dùng mã mẫu sau đây để xem cách đặt mức độ ưu tiên thành cao. Đối với thông báo được gửi từ bảng điều khiển, bạn không thể đặt các trường thông báo dành riêng cho Android.

 {
  "message": {
      "notification": {
          "body": "Purchase exceeding $500 detected",
          "title": "Credit card purchase"
      },
      "data": {
          "purchaser": "Your child",
          "items": "Gravity Defier Sneakers"
      },
      "android": {
          "priority": "high"
      },
      "apns": {
          "headers": {
              "apns-priority": "5"
          }
      }
  }
}

Kiểm thử thông báo có mức độ ưu tiên cao ở Chế độ chờ

Để đảm bảo rằng người dùng nhận và xử lý đúng cách các thông báo có mức độ ưu tiên cao, hãy làm theo các hướng dẫn sau để kiểm thử thông báo:

  1. Đặt thiết bị của bạn ở chế độ Nghỉ theo hướng dẫn trong bài viết Kiểm thử ứng dụng của bạn bằng chế độ Nghỉ.
  2. Truy cập vào mã thông báo đăng ký FCM từ ứng dụng trên thiết bị thử nghiệm. Để biết thêm thông tin về cách truy cập vào mã thông báo, hãy xem phần Gửi thông báo kiểm thử đến một ứng dụng chạy ở chế độ nền.
  3. Sau khi có mã thông báo FCM, hãy gửi thông báo có mức độ ưu tiên cao đến thiết bị thử nghiệm bằng cách sử dụng mã gửi thông báo FCM hoặc lệnh cURL%3B%0A%7D)-,cURL,-curl%20%2DX) có các thông số cấu hình khớp với thông báo có mức độ ưu tiên cao.

Giảm mức độ ưu tiên của FCM có mức ưu tiên cao trên Android

Thông báo có mức độ ưu tiên cao trên Android dành cho nội dung nhạy cảm về thời gian mà người dùng có thể thấy và phải dẫn đến thông báo cho người dùng. Nếu FCM phát hiện một mẫu trong đó thông báo không dẫn đến thông báo cho người dùng, thì thông báo của bạn có thể bị giảm mức độ ưu tiên xuống mức độ ưu tiên bình thường hoặc được uỷ quyền để Google Play Services xử lý.

FCM sử dụng 7 ngày hành vi nhắn tin khi xác định xem có nên giảm mức độ ưu tiên hoặc chuyển tiếp tin nhắn hay không; FCM đưa ra quyết định này một cách độc lập cho mọi phiên bản của ứng dụng. Nếu, để phản hồi các thông báo có mức độ ưu tiên cao, thông báo được hiển thị theo cách mà người dùng có thể thấy, thì các thông báo có mức độ ưu tiên cao trong tương lai của bạn sẽ không bị ảnh hưởng.

Uỷ quyền thông báo bằng Dịch vụ Google Play

Các thông báo có mức độ ưu tiên cao đáp ứng một số tiêu chí nhất định sẽ được dịch vụ Google Play chuyển tiếp thay vì bị giảm mức độ ưu tiên. Điều này có nghĩa là các thông báo sẽ được dịch vụ Google Play hiển thị thay cho ứng dụng mà không cần khởi động ứng dụng. Việc này nhằm mục đích mang lại trải nghiệm tổng thể tốt hơn cho người dùng trên thiết bị Android.

Xin lưu ý rằng thông báo được uỷ quyền sẽ có những thay đổi về cách báo cáo số liệu phân tích liên quan đến các thông báo nhận được:

  • Để báo cáo số liệu phân tích cho thông báo được uỷ quyền, ứng dụng của bạn phải sử dụng FCM SDK phiên bản 24.0.0 trở lên.
  • Bạn có thể nhận thấy sự chậm trễ hoặc giảm số lượng thông báo nhận được so với số lượng trước khi giới thiệu thông báo qua proxy. Điều này là do số liệu phân tích cho thông báo được uỷ quyền chỉ được báo cáo một lần khi ứng dụng của bạn khởi động và có thể không được báo cáo nếu thông báo không dẫn đến việc mở ứng dụng.

Việc uỷ quyền thông báo theo cách này là hành vi mặc định đối với các ứng dụng sử dụng Android Q trở lên và Dịch vụ Google Play phiên bản 19054000 trở lên. Các thông báo được gửi qua HTTP v1 API sẽ được chuyển qua proxy, nhưng các thông báo được gửi qua bảng điều khiển Firebase hoặc các API cũ sẽ không được chuyển qua proxy. Xin lưu ý rằng tính năng này hiện đang trong giai đoạn thử nghiệm và có thể thay đổi.

Mặc dù bạn nên bật tính năng uỷ quyền để tận dụng những lợi ích mà tính năng này mang lại cho pin và bộ nhớ của thiết bị, nhưng bạn có thể chọn không sử dụng tính năng này theo một trong những cách sau:

  • Ở cấp ứng dụng: trong tệp kê khai ứng dụng, hãy thêm chỉ thị <meta-data android:name= "delivery_metrics_exported_to_big_query_enabled" android:value="false"/>.
  • Dựa trên từng phiên bản ứng dụng: Đối với phiên bản ứng dụng, hãy đặt fun setNotificationDelegationEnabled(disable: Boolean): Task<Void!> trong quy trình giao diện người dùng cho ứng dụng của bạn, tuỳ thuộc vào trường hợp sử dụng cụ thể.
  • Trên cơ sở mỗi thông báo: Đặt khoá proxy thành DENY trong đối tượng AndroidNotification cho yêu cầu gửi.

Đo lường việc giảm mức độ ưu tiên của thông báo trên Android

  • Tin nhắn riêng lẻ. Khi phân phối, bạn có thể xác định xem một thông báo riêng lẻ có bị giảm mức độ ưu tiên hay không bằng cách so sánh mức độ ưu tiên được phân phối của thông báo đó (từ getPriority()) với mức độ ưu tiên ban đầu (từ getOriginalPriority()).

  • Tất cả tin nhắn. FCM Aggregate Delivery Data API có thể báo cáo tỷ lệ phần trăm của tất cả các thông báo mà bạn gửi đến Android đang bị giảm mức độ ưu tiên. Một số thông báo có thể bị bỏ qua trong báo cáo dữ liệu tổng hợp, nhưng nhìn chung, những thông báo này sẽ cho biết tỷ lệ hạ cấp thông báo trên toàn cầu. Hãy xem bài viết của chúng tôi về dữ liệu phân phối tổng hợp để biết thêm thông tin và mã mẫu để truy vấn API; bạn cũng có thể khám phá dữ liệu này trong trình khám phá API.

  • Thông báo đã xử lý qua máy chủ proxy. Thông báo được uỷ quyền sẽ không được tính vào các chỉ số phân phối hiện tại của FCM hoặc GA, vì vậy, bạn có thể thấy chỉ số phân phối thông báo giảm tối đa 15%. Để báo cáo về các thông báo được uỷ quyền, hãy sử dụng FCM Aggregate Delivery Data API. ProxyNotificationInsightPercents báo cáo tỷ lệ phần trăm thông báo được uỷ quyền thành công cũng như thông tin chi tiết về những thông báo không thể uỷ quyền thành công.

Khắc phục sự cố chậm trễ thông báo

  • Đảm bảo rằng phiên bản ứng dụng của bạn đã bật thông báo. Nếu người dùng đã tắt quyền gửi thông báo cho ứng dụng của bạn, thì sẽ không có thông báo nào được đăng, do đó, các thông báo của bạn sẽ bị giảm mức độ ưu tiên. Bạn nên xác minh rằng thông báo đã được bật trước khi gửi thông báo có mức độ ưu tiên cao đến một phiên bản ứng dụng.

  • Tránh thực hiện các lệnh gọi mạng bổ sung khi xử lý thông báo. Vì một phần nhỏ người dùng thiết bị di động Android đang sử dụng mạng có độ trễ cao, nên hãy tránh mở kết nối đến các máy chủ của bạn trước khi hiển thị thông báo. Việc gọi lại đến máy chủ trước khi hết thời gian xử lý cho phép có thể gây rủi ro cho người dùng trên các mạng có độ trễ cao.

    Thay vào đó, hãy đưa nội dung thông báo vào thông báo FCM và hiển thị ngay. Nếu cần đồng bộ hoá nội dung bổ sung trong ứng dụng trên Android, bạn có thể lên lịch cho một tác vụ bằng WorkManager để xử lý tác vụ đó ở chế độ nền.