Đặt và quản lý mức độ ưu tiên của thông báo trên Android

Bạn có hai lựa chọn để chỉ định mức độ ưu tiên gửi cho các thông báo xuôi dòng trên Android: mức độ ưu tiên bình thường và cao. Cách gửi thông báo có mức độ ưu tiên bình thường và cao 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ế độ nghỉ. Đối với các thông báo ít nhạy cảm về thời gian, chẳng hạn như thông báo về email mới, việc đồng bộ hoá giao diện người dùng 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 thông báo có mức độ ưu tiên cao ngay lập tức, cho phép FCM đánh thức thiết bị đang 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ẽ khiến người dùng tương tác với ứng dụng của bạn 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à bình thường

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

Xử lý 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à bình thường nhận được trên thiết bị Android, hệ thống sẽ dành vài giây để xử lý tải trọng thông báo trong trình xử lý onMessageReceived, với thời gian phân bổ cho thông báo có mức độ ưu tiên cao nhiều hơn một chút so với thông báo có mức độ ưu tiên bình thường. Thời gian này chỉ đủ để hiển thị ngay một thông báo. Nếu bạn phải thực hiện thêm công việc, chẳng hạn như tải hình ảnh từ bộ nhớ trên thiết bị hoặc gọi máy chủ để thu thập thêm nội dung, thì bạn sẽ cần thực hiện thêm các bước.

Phương thức onMessageReceived được gọi trên một luồng worker riêng biệt. Theo phương pháp hay nhất, bạn nên xử lý tải trọng thông báo và hiển thị thông báo ngay trong phương thức onMessageReceived. Bạn không nên thực hiện các lệnh gọi mạng không đồng bộ bổ sung hoặc xử lý tải trọng trên một luồng riêng biệt trong phương thức onMessageReceived. Việc này có thể khiến ứng dụng của bạn nằm ngoài vòng đời quy trình hợp lệ trước khi tải trọng được xử lý hoàn toàn. Nếu điều này xảy ra, bạn có thể thấy rằng một số thông báo FCM được gửi sẽ bị trì hoãn hoặc bị thiếu.

Nếu bạn cần thêm thời gian để xử lý thông báo, chẳng hạn như để tìm nạp imageUrl có trong tải trọng thông báo, thì bạn cần sử dụng một cấu trúc như WorkManager hoặc dịch vụ trên nền trước để kéo dài vòng đời ứng dụng. Bạn nên làm theo hướng dẫn sau khi ghi đè phương thức onMessageReceived để xác minh rằng thông báo của bạn đã được xử lý hoàn toàn.

  • Đối với thông báo có mức độ ưu tiên cao: Bắt đầu một công việc ưu tiên bằng cách sử dụng WorkManager trên Android để xác minh rằng thông báo có mức độ ưu tiên cao của bạn được ưu tiên thời gian xử lý nhằm xác minh quá trình hiển thị thông báo của bạn chạy đến khi hoàn tất. Tin vui là nếu bạn lo lắng về việc sử dụng hết hạn mức công việc ưu tiên do quá trình xử lý FCM có mức độ ưu tiên cao, thì bạn không cần phải lo lắng. Có một trường hợp miễn trừ ngắn gọn đối với các công việc được ưu tiên lên lịch ngay sau khi onMessageReceived FCM có mức độ ưu tiên cao được gửi.
  • Đối với thông báo có mức độ ưu tiên bình thường: Bắt đầu một thông thường WorkRequest bằng cách sử dụng WorkManager trên Android thay vào đó. Điều này sẽ xác minh rằng công việc bổ sung cần thiết để xử lý thông báo của bạn sẽ được xử lý cuối cùng mà không cần sử dụng quy trình xử lý được ưu tiên và gây ra các vấn đề về mức sử dụng pin không cần thiết.

Đặt mức độ ưu tiên cho thông báo

Bạn có thể gửi thông báo cho người dùng bằng cách sử dụng Admin SDK, FCM API REST và bảng điều khiển Firebase. Để thay đổi chế độ cài đặt mức độ ưu tiên từ Admin SDK và API REST của FCM, bạn phải cập nhật tải trọng JSON của thông báo. Bạn có thể sử dụng mã mẫu sau để xem cách đặt mức độ ưu tiên thành cao. Đối với các thông báo được gửi từ bảng điều khiển, hệ thống không hỗ trợ việc đặ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ế độ Nghỉ

Để đảm bảo rằng thông báo có mức độ ưu tiên cao của bạn đang được nhận và xử lý đúng cách khi người dùng nhận được, 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ỉ bằng cách làm 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 của bạn trên thiết bị kiểm thử. Để biết thêm thông tin về cách truy cập vào mã thông báo, hãy xem bài viết Gửi thông báo kiểm thử đến ứng dụng ở 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 có các tham số cấu hình khớp với thông báo có mức độ ưu tiên cao của bạn.

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 nhìn thấy và sẽ dẫn đến thông báo cho người dùng. Nếu FCM phát hiện thấy một mẫu trong đó các thông báo không dẫn đến thông báo cho người dùng, thì các 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 để xử lý bởi Dịch vụ Google Play.

FCM sử dụng hành vi thông báo trong 7 ngày khi xác định có giảm mức độ ưu tiên hoặc thông báo proxy hay không; FCM xác định độc lập cho từng thực thể của ứng dụng. Nếu để phản hồi thông báo có mức độ ưu tiên cao, các thông báo được hiển thị theo cách mà người dùng nhìn thấy, thì các thông báo có mức độ ưu tiên cao trong tương lai 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 xử lý qua proxy thay vì bị giảm mức độ ưu tiên. Điều này có nghĩa là các thông báo đượ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. Điều này được thực hiện để 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 các thông báo được xử lý qua proxy sẽ thay đổi cách báo cáo số liệu phân tích liên quan đến các thông báo được nhận:

  • Để số liệu phân tích cho các thông báo được xử lý qua proxy được báo cáo, ứ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 ra mắt thông báo được xử lý qua proxy. Điều này là do số liệu phân tích cho các thông báo được xử lý qua proxy chỉ được báo cáo sau 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 xử lý thông báo qua proxy 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+ và Dịch vụ Google Play phiên bản 19054000 trở lên. Các thông báo được gửi thông qua HTTP v1 API sẽ được xử lý qua proxy, nhưng các thông báo được gửi thông qua bảng điều khiển Firebase hoặc API cũ sẽ không được xử lý qua proxy. Xin lưu ý rằng tính năng này hiện đang ở 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 các lợi ích của tính năng này đối với pin và bộ nhớ thiết bị, nhưng bạn có thể chọn không sử dụng hành vi này theo bất kỳ cách nào sau đây:

  • Ở 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"/>.
  • Ở cấp thực thể ứng dụng: Đối với thực thể ứng dụng, hãy đặt fun setNotificationDelegationEnabled(disable: Boolean): Task<Void!> trong luồng 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ể.
  • Ở cấp 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

  • Thông báo riêng lẻ. Khi gử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 gửi của thông báo đó (từ getPriority()) với mức độ ưu tiên ban đầu (từ getOriginalPriority()).

  • Tất cả thông báo. API Dữ liệu phân phối tổng hợp FCM có thể báo cáo tỷ lệ phần trăm của tất cả thông báo của 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, các báo cáo này sẽ cung cấp thông tin tổng quan về tỷ lệ giảm mức độ ưu tiên của thông báo. Hãy xem bài viết của chúng tôi về dữ liệu gử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á API này trong trình khám phá API.

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

Khắc phục sự cố về việc trì hoãn thông báo

  • Đảm bảo rằng thực thể ứ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 thực thể ứ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ỏ dân số di động Android đang sử dụng mạng có độ trễ cao, nên hãy tránh mở kết nối đến máy chủ của bạn trước khi hiển thị thông báo. Việc gọi lại máy chủ trước khi hết thời gian xử lý được phép có thể gây rủi ro cho người dùng trên 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á thêm nội dung trong ứng dụng trên Android, bạn có thể lên lịch một tác vụ bằng WorkManager để xử lý tác vụ đó ở chế độ nền.