FCM thường gửi tin nhắn ngay sau khi tin nhắn được gửi. Tuy nhiên, điều này có thể không phải lúc nào cũng thực hiện được. Ví dụ: thiết bị có thể không hoạt động hoặc FCM có thể cố ý trì hoãn tin nhắn để ngăn ứng dụng tiêu thụ quá nhiều tài nguyên và ảnh hưởng tiêu cực đến thời lượng pin.
Trong những trường hợp này, FCM sẽ lưu trữ tin nhắn và gửi tin nhắn đó sớm nhất có thể. Mặc dù điều này không có vấn đề gì trong hầu hết các trường hợp, nhưng có một số ứng dụng yêu cầu gửi thông báo ngay lập tức. Ví dụ: thông báo về cuộc gọi đến hoặc lời mời tham dự một sự kiện.
Trên Android và Web, bạn có thể chỉ định thời gian tồn tại tối đa của một tin nhắn. Giá trị này phải là khoảng thời gian từ 0 đến 2.419.200 giây (28 ngày) và tương ứng với khoảng thời gian tối đa mà FCM lưu trữ và cố gắng gửi tin nhắn. Theo mặc định, các yêu cầu không chứa trường này sẽ kéo dài tối đa 4 tuần.
Trên iOS, bạn có thể đặt tiêu đề apns-expiration trong đối tượng
ApnsConfig. Để biết thêm chi tiết, hãy tham khảo tài liệu của Apple về Gửi
yêu cầu thông báo đến
APNs.
Sau đây là một số trường hợp có thể sử dụng tính năng này:
- Cuộc gọi đến trong cuộc trò chuyện video
- Sự kiện lời mời sắp hết hạn
- Sự kiện trên lịch
Một ưu điểm khác của việc chỉ định thời gian tồn tại của một tin nhắn là
FCM không áp dụng tính năng điều tiết tin nhắn có thể thu gọn cho các tin nhắn có
giá trị thời gian tồn tại là 0 giây. Xin lưu ý rằng giá trị ttl bằng 0 có nghĩa là
các tin nhắn không gửi được ngay lập tức sẽ bị loại bỏ. Tuy nhiên, vì
những tin nhắn như vậy không bao giờ được lưu trữ, nên điều này sẽ mang lại độ trễ tốt nhất khi gửi
tin nhắn thông báo.
Sau đây là ví dụ về một yêu cầu có chứa ttl:
{
"message":{
"token":"bk3RNwTe3H0:CI2k_HHwgIpoDKCIZvvDMExUdFQ3P1...",
"data":{
"Nick" : "Mario",
"body" : "great match!",
"Room" : "PortugalVSDenmark"
},
"apns":{
"headers":{
"apns-expiration":"1604750400"
}
},
"android":{
"ttl":"4500s"
},
"webpush":{
"headers":{
"TTL":"4500"
}
}
}
}
Vòng đời của một tin nhắn
Khi một máy chủ ứng dụng đăng một tin nhắn lên FCM và nhận lại mã tin nhắn trở lại, điều đó không có nghĩa là tin nhắn đã được gửi đến thiết bị. Thay vào đó, điều đó có nghĩa là tin nhắn đã được chấp nhận để gửi. Thời điểm gửi tin nhắn phụ thuộc vào nhiều yếu tố.
Nếu thiết bị được kết nối nhưng ở chế độ Ngủ, thì FCM sẽ lưu trữ tin nhắn có mức độ ưu tiên thấp cho
FCM đến khi thiết bị thoát khỏi chế độ Ngủ. Nếu bạn đặt collapse_key và
có một tin nhắn hiện có có cùng khoá
thu gọn và
mã thông báo đăng ký đang chờ gửi, thì tin nhắn cũ sẽ bị loại bỏ và
tin nhắn mới sẽ thay thế tin nhắn cũ. Tuy nhiên, nếu bạn không đặt khoá thu gọn, thì cả tin nhắn mới và tin nhắn cũ đều được lưu trữ để gửi trong tương lai.
Nếu thiết bị không kết nối với FCM, thì tin nhắn sẽ được lưu trữ cho đến khi thiết lập được
kết nối. Khi thiết lập được kết nối, FCM
sẽ gửi tất cả tin nhắn đang chờ xử lý đến thiết bị. Nếu thiết bị không bao giờ kết nối lại, thì tin nhắn sẽ hết thời gian chờ và bị loại bỏ khỏi FCM
bộ nhớ. Thời gian chờ mặc định là 4 tuần, trừ phi bạn đặt cờ ttl. Nếu
ứng dụng đã bị gỡ cài đặt khi FCM cố gắng gửi tin nhắn đến
thiết bị, thì FCM sẽ loại bỏ ngay tin nhắn đó và vô hiệu hoá
mã thông báo đăng ký. Các lần cố gắng gửi tin nhắn đến thiết bị đó trong tương lai sẽ dẫn đến lỗi NotRegistered.
Đối với thiết bị Android, nếu thiết bị không kết nối với FCM trong hơn
một tháng, FCM vẫn chấp nhận tin nhắn nhưng sẽ loại bỏ ngay
tin nhắn đó. Nếu thiết bị kết nối trong vòng 4 tuần kể từ tin nhắn dữ liệu gần đây nhất mà bạn gửi
đến thiết bị đó, thì ứng dụng khách của bạn sẽ nhận được
onDeletedMessages()
lệnh gọi lại.
Để hiểu rõ hơn về việc gửi tin nhắn trên nền tảng Android hoặc Apple, bạn có thể sử dụng FCM báo cáo trang tổng quan, trang tổng quan này ghi lại số lượng tin nhắn đã gửi và mở trên thiết bị Apple và Android cùng với dữ liệu về số lượt hiển thị cho ứng dụng Android.