Bạn có hai lựa chọn để chỉ định mức độ ưu tiên phân phối cho thông báo hạ nguồn trên Android: mức độ ưu tiên thông thường và cao. Việc phân phối thông báo có mức độ ưu tiên bình thường và cao hoạt động 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 thông thường được phân phối ngay lập tức khi thiết bị không ở trạng thái ngủ. Khi thiết bị ở chế độ Nghỉ, quá trình phân phối có thể bị trễ để 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 quan trọng về thời gian hơn, chẳng hạn như thông báo về email mới, duy trì đồ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 gửi thông thường.
Mức độ ưu tiên cao.FCM cố gắng phân phố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 thiết và chạy một số hoạt động 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 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 thông tin 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 việc 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 phân phối thông báo có mức độ ưu tiên thông thường có thể chịu ảnh hưởng của chế độ Ngủ, nên việc đặt hầu hết thông báo mà người dùng nhìn thấy thành thông báo có mức độ ưu tiên cao sẽ đảm bảo thông báo được phân phối kịp thời. Ví dụ: bạn nên đặt mức độ ưu tiên cao cho các 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ề dịch vụ giao đồ ăn.
Xử lý thông báo cho 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
Đối với cả 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 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
. Đố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 cung cấp cho trình xử lý onMessageReceived
.
Đối với thông báo có mức độ ưu tiên cao, bạn có thể lên lịch một công việc ưu tiên bằng cách sử dụ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 yêu cầu công việc một lần thông thường bằng WorkManager của Android. Đ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 tính năng 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 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à 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 đâ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ế độ Ngủ
Để đảm bảo rằng thông báo có mức độ ưu tiên cao được nhận và xử lý đúng cách khi người dùng nhận được, hãy làm theo hướng dẫn sau để kiểm thử thông báo:
- Đặ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 bằng chế độ Nghỉ.
- 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ị thử nghiệm. Để biết thêm thông tin về cách truy cập mã thông báo, hãy xem phần Gửi thông báo kiểm thử đến ứng dụng chạy ở chế độ nền.
- Sau khi bạn 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 mã gửi thông báo FCM hoặc lệnh cURL%3B%0A%7D)-,cURL,-curl%20%2DX) có các tham số cấu hình khớp với thông báo có mức độ ưu tiên cao.
Hạ thấp 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 có tính thời gian, nội dung hiển thị với người dùng và phải dẫn đến thông báo hiển thị với người dùng. Nếu FCM phát hiện một mẫu mà thông báo không dẫn đến thông báo hiển thị 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 thông thường hoặc uỷ quyền để Dịch vụ Google Play xử lý.
FCM sử dụng 7 ngày hành vi của thông báo khi xác định xem có giảm mức độ ưu tiên hoặc proxy thông báo hay không; lớp này xác định việc này một cách độc lập cho mọi thực thể 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ể 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
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 làm proxy thay vì bị giảm mức độ ưu tiên. Điều này có nghĩa là thông báo được Dịch vụ Google Play hiển thị thay mặt cho ứng dụng mà không cần khởi động ứng dụng. Việc 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 thông báo được proxy sẽ làm thay đổi cách báo cáo số liệu phân tích liên quan đến thông báo đang được nhận:
- Để báo cáo số liệu phân tích cho thông báo được proxy, ứng dụng của bạn phải sử dụng SDK FCM 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 triển khai thông báo được proxy. Điều này là do số liệu phân tích cho thông báo được proxy chỉ được báo cáo sau khi ứng dụng của bạn khởi động và có thể hoàn toàn không được báo cáo nếu thông báo không khiến ứng dụng mở ra.
Việc ủy quyền thông báo theo cách này là hành vi mặc định cho 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 thông qua API HTTP v1 sẽ được chuyển tiếp, nhưng các thông báo được gửi thông qua bảng điều khiển Firebase hoặc các API cũ sẽ không được chuyển tiếp. 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 vì những lợi ích của tính năng này đối với 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 bất kỳ cách nào sau đây:
- Trên cơ sở cấp ứng dụng: trong tệp kê khai ứng dụng, hãy thêm lệnh
<meta-data android:name= "delivery_metrics_exported_to_big_query_enabled" android:value="false"/>
. - Trên cơ sở 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, 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ànhDENY
trong đối tượngAndroidNotification
cho yêu cầu gửi.
Đo lường việc giảm mức độ ưu tiên của tin nhắn 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ư 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 đã phân phối của thư đó, từ getPriority(), với mức độ ưu tiên ban đầu của thư đó, từ getOriginalPriority().
Tất cả tin nhắn. FCM Aggregate Delivery Data API (API Dữ liệu phân phối tổng hợp) có thể báo cáo tỷ lệ phần trăm tất cả thông báo của bạn đến Android đang bị giảm mức độ ưu tiên. Một số thư 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ệ thư bị giảm mức độ ưu tiên. 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á API này trong trình khám phá API.
Thông báo được proxy. Thông báo được chuyển tiếp sẽ không được tính trong 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 các chỉ số phân phối thông báo giảm tối đa 15%. Để báo cáo về thông báo được proxy, hãy sử dụng FCM Aggregate Delivery Data API (API Tổng hợp dữ liệu phân phối).
ProxyNotificationInsightPercents
báo cáo tỷ lệ phần trăm thông báo được proxy thành công cũng như thông tin chi tiết về những thông báo không thể được proxy thành công.
Khắc phục sự cố trễ 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 thông báo cho ứng dụng của bạn, thì không có thông báo nào được đăng, do đó, 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 thêm lệnh gọi mạng khi xử lý thông báo. Vì một phần nhỏ người dùng thiết bị di động Android sử dụng mạng có độ trễ cao, nên hãy tránh mở kết nối với 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 kết thúc thời gian xử lý được 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á để 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.