Bạn có hai lựa chọn để chỉ định ưu tiên phân phố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. Việc gử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 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ỉ, việc 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 những 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, giữ cho giao diện người dùng của bạn được đồ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 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ẽ dẫn đến lượt tương tác của người dùng 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à 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 bản 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 thành mức độ ưu tiên cao sẽ đảm bảo thông báo được gửi kịp thời. Ví dụ: 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 thành 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 được 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ị thông báo ngay lập tức. Nếu phải thực hiện thêm bất kỳ công việc nào, 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, 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 lập tức 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ẽ dẫn đến việc thông báo bị trì hoãn hoặc bị thiếu.
Nếu 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, bạn sẽ 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 sử dụng hướng dẫn sau đây 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
WorkManagercủa 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ý để xác minh quá trình hiển thị thông báo chạy đến khi hoàn tất. Tin tốt là nếu bạn lo lắng về việc hết hạn mức công việc đượ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 cho các công việc ưu tiên được lên lịch ngay sau khi FCMonMessageReceivedcó mức độ ưu tiên cao được gửi đ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
WorkRequestbằng cách sử dụng của AndroidWorkManagerthay 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 Admin SDK, FCM API REST và Firebase console. Để 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, 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 thông báo có mức độ ưu tiên cao của bạn đượ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:
- Đặ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ị 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 một ứng dụng ở chế độ nền.
- 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 mã gửi thông báo FCM hoặc một 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 hiển thị cho người dùng. Nếu FCM phát hiện thấy một mẫu trong đó thông báo không dẫn đến thông báo dành 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 để Dịch vụ Google Play xử lý.
FCM sử dụng 7 ngày hành vi thông báo khi xác định có giảm mức độ ưu tiên hay chuyển thông báo qua proxy thông báo hay không; FCM đưa ra quyết định này một cách độc lập cho mọi thực thể của ứng dụng. Nếu thông báo được hiển thị theo cách mà người dùng nhìn thấy để phản hồi thông báo có mức độ ưu tiên cao, 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 chuyển qua 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 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 chuyển qua proxy sẽ có những thay đổi về 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:
- Để số liệu phân tích cho thông báo được chuyển 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 giới thiệu thông báo được chuyển qua proxy. Điều này là do số liệu phân tích cho thông báo được chuyển 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 chuyển 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. Thông báo được gửi qua HTTP v1 API sẽ được chuyển qua proxy, nhưng thông báo được gửi qua Firebase console hoặ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 ở giai đoạn Beta và có thể thay đổi.
Mặc dù bạn nên bật tính năng uỷ quyền để hưởng lợi ích cho 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:
- Trên cơ sở 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"/>. - 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 của bạn, tuỳ thuộc vào trường hợp sử dụng cụ thể. - Trên cơ sở từng thông báo: Đặt khoá
proxythànhDENYtrong đối tượngAndroidNotificationcho 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 đã gửi (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 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 thông bá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á thông tin này từ trình khám phá API.
Thông báo được chuyển qua proxy. Thông báo được chuyển 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ể gặp phải tình trạng giảm tối đa 15% trong các chỉ số gửi thông báo. Để báo cáo về thông báo được chuyển qua proxy, hãy sử dụng FCM Aggregate Delivery Data API.
ProxyNotificationInsightPercentsbáo cáo tỷ lệ phần trăm thông báo được chuyển qua proxy thành công cũng như thông tin chi tiết về những thông báo không thể chuyển 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 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 đó, 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ỏ người dùng 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 kết thúc 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 lập tức. 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 một tác vụ bằng WorkManager để xử lý tác vụ đó ở chế độ nền.