Đặ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, không phải lúc nào bạn cũng có thể làm được điều này. Ví dụ: thiết bị có thể không hoạt động hoặc FCM có thể cố ý trì hoãn các thông báo để 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ữ thông báo và gửi thông báo đó 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ự 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 thông báo. Giá trị 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 thông báo. Theo mặc định, những 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 thông tin 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.

Dưới đây là một số cách có thể sử dụng tính năng này:

  • Cuộc gọi đến qua tính năng trò chuyện video
  • Sự kiện lời mời hết hạn
  • Sự kiện trên lịch

Một lợi thế khác của việc chỉ định thời gian tồn tại của một thông báo là FCM không áp dụng tính năng điều tiết thông báo có thể thu gọn cho các thông báo 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à những thông báo không thể gửi ngay sẽ bị loại bỏ. Tuy nhiên, vì những thông báo như vậy không bao giờ được lưu trữ, nên điều này mang lại độ trễ thấp nhất khi gửi thông báo.

Sau đây là ví dụ về một yêu cầu có 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"
      }
    }
  }
}

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

Khi một máy chủ ứng dụng đăng một thông báo lên FCM và nhận lại một mã nhận dạng thông báo, điều đó không có nghĩa là thông báo đã được gửi đến thiết bị. Thay vào đó, trạng thái này có nghĩa là yêu cầu đã được chấp nhận để giao hàng. Thời điểm gửi tin nhắn phụ thuộc vào nhiều yếu tố.

Nếu thiết bị đang kết nối nhưng ở chế độ Nghỉ, thì FCM sẽ lưu trữ một thông báo có mức độ ưu tiên thấp cho đến khi thiết bị thoát khỏi chế độ Nghỉ. Nếu bạn đặt collapse_key và có một thông báo hiện tại có cùng khoá thu gọn và mã thông báo đăng ký đang chờ được gửi, thì thông báo cũ sẽ bị loại bỏ và thông báo mới sẽ thay thế thông báo cũ. Tuy nhiên, nếu bạn không đặt khoá thu gọn, cả thông báo mới và 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 một kết nối được thiết lập, 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ì thông báo sẽ hết thời gian chờ và bị loại bỏ khỏi bộ nhớ FCM. 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 một thông báo đến thiết bị, FCM sẽ loại bỏ thông báo đó ngay lập tức và vô hiệu hoá mã thông báo đăng ký. Những lần sau đó khi bạn cố gắng gửi tin nhắn đến thiết bị đó sẽ dẫn đến lỗi NotRegistered.

Đối với các thiết bị Android, nếu thiết bị chưa kết nối với FCM trong hơn một tháng, thì FCM vẫn chấp nhận thông báo nhưng sẽ loại bỏ ngay thông báo đó. Nếu thiết bị kết nối trong vòng 4 tuần kể từ khi bạn gửi thông báo dữ liệu gần đây nhất đến thiết bị, ứng dụng khách của bạn sẽ nhận được lệnh gọi lại onDeletedMessages().

Để 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 trang tổng quan báo cáo FCM. 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 các ứng dụng Android.