Đặt thời gian tồn tại của một thông báo

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.