Giới thiệu về tin nhắn FCM

Nhắn tin qua đám mây Firebase (FCM) cung cấp nhiều tùy chọn và khả năng nhắn tin. Thông tin trong trang này nhằm giúp bạn hiểu các loại thông báo FCM khác nhau và bạn có thể làm gì với chúng.

Các loại tin nhắn

Với FCM, bạn có thể gửi hai loại tin nhắn cho khách hàng:

  • Tin nhắn thông báo, đôi khi được coi là "tin nhắn hiển thị". Những điều này được FCM SDK tự động xử lý.
  • Thông báo dữ liệu, được xử lý bởi ứng dụng khách.

Tin nhắn thông báo chứa một tập hợp các khóa người dùng có thể nhìn thấy được xác định trước. Ngược lại, thông báo dữ liệu chỉ chứa các cặp khóa-giá trị tùy chỉnh do người dùng xác định. Tin nhắn thông báo có thể chứa một khối lượng dữ liệu tùy chọn. Tải trọng tối đa cho cả hai loại thông báo là 4000 byte, ngoại trừ khi gửi thư từ bảng điều khiển Firebase, bảng điều khiển này thực thi giới hạn 1024 ký tự.

Sử dụng kịch bản Làm cách nào để gửi
Tin nhắn thông báo FCM tự động hiển thị thông báo cho các thiết bị người dùng cuối thay mặt cho ứng dụng khách. Tin nhắn thông báo có một tập hợp các khóa người dùng có thể nhìn thấy được xác định trước và một khối lượng dữ liệu tùy chọn của các cặp khóa-giá trị tùy chỉnh.
  1. Trong một môi trường tin cậy như đám mây Chức năng hoặc máy chủ ứng dụng của bạn, sử dụng SDK quản trị hoặc FCM máy chủ giao thức : Đặt notification quan trọng. Có thể có tải trọng dữ liệu tùy chọn. Luôn có thể thu gọn.

    Xem một số ví dụ về hiển thị thông báo và gửi yêu cầu trọng tải.

  2. Sử dụng các nhà soạn nhạc Notifications : Nhập tin nhắn văn bản, Tiêu đề, vv, và gửi. Thêm tải trọng dữ liệu tùy chọn bằng cách cung cấp dữ liệu Tùy chỉnh.
Tin nhắn dữ liệu Ứng dụng khách chịu trách nhiệm xử lý thông báo dữ liệu. Thông báo dữ liệu chỉ có các cặp khóa-giá trị tùy chỉnh không có tên khóa dành riêng (xem bên dưới). Trong một môi trường tin cậy như đám mây Chức năng hoặc máy chủ ứng dụng của bạn, sử dụng SDK quản trị hoặc FCM máy chủ giao thức : Đặt data chỉ bàn phím.

Sử dụng tin nhắn thông báo khi bạn muốn FCM thay mặt ứng dụng khách của bạn xử lý việc hiển thị thông báo. Sử dụng thông báo dữ liệu khi bạn muốn xử lý thông báo trên ứng dụng khách của mình.

FCM có thể gửi một tin nhắn thông báo bao gồm một tải trọng dữ liệu tùy chọn. Trong những trường hợp như vậy, FCM xử lý hiển thị tải trọng thông báo và ứng dụng khách xử lý tải trọng dữ liệu.

Tin nhắn thông báo

Để thử nghiệm hoặc để tiếp thị và người dùng tương tác lại với, bạn có thể gửi tin nhắn thông báo bằng cách sử dụng căn cứ hỏa lực console . Các căn cứ hỏa lực console cung cấp phân tích dựa trên A / B thử nghiệm để giúp bạn tinh chỉnh và cải thiện các thông điệp tiếp thị.

Để tin nhắn thông báo lập trình gửi bằng cách sử dụng SDK quản trị hoặc các giao thức FCM, thiết lập các notification quan trọng với các thiết lập được xác định trước cần thiết lựa chọn quan trọng có giá trị cho các phần sử dụng có thể nhìn thấy các thông điệp thông báo. Ví dụ: đây là tin nhắn thông báo có định dạng JSON trong ứng dụng IM. Người dùng có thể mong đợi thấy một thông báo với tiêu đề "Bồ Đào Nha vs. Đan Mạch" và văn bản "trận đấu tuyệt vời!" trên thiết bị:

{
  "message":{
    "token":"bk3RNwTe3H0:CI2k_HHwgIpoDKCIZvvDMExUdFQ3P1...",
    "notification":{
      "title":"Portugal vs. Denmark",
      "body":"great match!"
    }
  }
}

Tin nhắn thông báo được gửi đến khay thông báo khi ứng dụng ở chế độ nền. Đối với các ứng dụng ở phía trước, tin nhắn được xử lý bởi một chức năng gọi lại.

Xem tài liệu tham khảo để biết danh sách đầy đủ các khóa được xác định trước có sẵn để xây dựng thông báo thông báo:

Tin nhắn dữ liệu

Đặt khóa thích hợp với các cặp khóa-giá trị tùy chỉnh của bạn để gửi tải trọng dữ liệu đến ứng dụng khách.

Ví dụ, đây là một thông điệp định dạng JSON trong ứng dụng IM tương tự như trên, nơi thông tin được đóng gói trong phổ biến data quan trọng và các ứng dụng khách hàng được dự kiến để giải thích các nội dung:

{
  "message":{
    "token":"bk3RNwTe3H0:CI2k_HHwgIpoDKCIZvvDMExUdFQ3P1...",
    "data":{
      "Nick" : "Mario",
      "body" : "great match!",
      "Room" : "PortugalVSDenmark"
    }
  }
}

Ví dụ chương trình sử dụng trên của cấp cao nhất, hoặc phổ biến data lĩnh vực, được giải thích bởi các khách hàng trên tất cả các nền tảng mà nhận được thông báo. Trên mỗi nền tảng, ứng dụng khách nhận tải dữ liệu trong một chức năng gọi lại.

Mã hóa cho thông điệp dữ liệu

Lớp Android Giao thông vận tải (xem kiến trúc FCM ) sử dụng point-to-point mã hóa. Tùy thuộc vào nhu cầu của bạn, bạn có thể quyết định thêm mã hóa end-to-end vào tin nhắn dữ liệu. FCM không cung cấp giải pháp đầu cuối. Tuy nhiên, có những giải pháp bên ngoài có sẵn như mao quản hoặc DTLS .

Tin nhắn thông báo với tải dữ liệu tùy chọn

Cả theo chương trình hoặc thông qua bảng điều khiển Firebase, bạn có thể gửi tin nhắn thông báo có chứa trọng tải tùy chọn của các cặp khóa-giá trị tùy chỉnh. Trong nhà soạn nhạc Notifications , sử dụng các trường dữ liệu tùy chỉnh trong tùy chọn nâng cao.

Hành vi của ứng dụng khi nhận được thông báo bao gồm cả tải thông báo và dữ liệu phụ thuộc vào việc ứng dụng đang ở chế độ nền hay nền tảng — về cơ bản, nó có đang hoạt động tại thời điểm nhận hay không.

  • Khi ở chế độ nền, ứng dụng nhận được tải trọng thông báo trong khay thông báo, và chỉ xử lý các tải trọng dữ liệu khi người dùng chạm vào thông báo.
  • Khi ở mặt trước, ứng dụng của bạn nhận được một đối tượng thông điệp với cả trọng tải sẵn.

Dưới đây là một thông điệp định dạng JSON chứa cả các notification quan trọng và các data quan trọng:

{
  "message":{
    "token":"bk3RNwTe3H0:CI2k_HHwgIpoDKCIZvvDMExUdFQ3P1...",
    "notification":{
      "title":"Portugal vs. Denmark",
      "body":"great match!"
    },
    "data" : {
      "Nick" : "Mario",
      "Room" : "PortugalVSDenmark"
    }
  }
}

Tùy chỉnh một thông điệp trên các nền tảng

Các căn cứ hỏa lực SDK quản trị và các giao thức HTTP FCM v1 cả phép các yêu cầu thông điệp của bạn để thiết lập tất cả các trường có sẵn trong message đối tượng. Điêu nay bao gôm:

  • một bộ chung của trường để được giải thích bởi tất cả các trường ứng dụng mà nhận được thông báo.
  • bộ nền tảng cụ thể của lĩnh vực, chẳng hạn như AndroidConfigWebpushConfig , chỉ giải thích bằng ví dụ ứng dụng chạy trên nền tảng nhất định.

Các khối dành riêng cho nền tảng giúp bạn linh hoạt tùy chỉnh thông báo cho các nền tảng khác nhau để đảm bảo rằng chúng được xử lý chính xác khi nhận được. Phần phụ trợ FCM sẽ tính đến tất cả các thông số được chỉ định và tùy chỉnh thông báo cho từng nền tảng.

Khi nào sử dụng các trường chung

Sử dụng các trường phổ biến khi bạn:

  • Nhắm mục tiêu các trường hợp ứng dụng trên tất cả các nền tảng - Apple, Android, và web
  • Gửi tin nhắn đến các chủ đề

Tất cả các phiên bản ứng dụng, bất kể nền tảng, đều có thể diễn giải các trường phổ biến sau:

Khi nào sử dụng các trường dành riêng cho nền tảng

Sử dụng các trường dành riêng cho nền tảng khi bạn muốn:

  • Chỉ gửi các trường đến các nền tảng cụ thể
  • Gửi lĩnh vực nền tảng cụ thể ngoài các lĩnh vực chung

Bất cứ khi nào bạn muốn gửi các giá trị chỉ đến các nền tảng đặc biệt, không sử dụng các trường phổ thông; sử dụng các trường dành riêng cho nền tảng. Ví dụ: để chỉ gửi thông báo đến các nền tảng của Apple và web chứ không phải Android, bạn phải sử dụng hai nhóm trường riêng biệt, một cho Apple và một cho web.

Khi bạn đang gửi tin nhắn với cụ thể tùy chọn phân phối , sử dụng các lĩnh vực nền tảng cụ thể để thiết lập chúng. Bạn có thể chỉ định các giá trị khác nhau cho mỗi nền tảng nếu bạn muốn. Tuy nhiên, ngay cả khi bạn muốn đặt cùng một giá trị về cơ bản trên các nền tảng, bạn phải sử dụng các trường dành riêng cho nền tảng. Điều này là do mỗi nền tảng có thể giải thích các giá trị hơi khác-ví dụ, thời gian đưa ra sống được thiết lập trên Android như một thời gian hết hạn trong vài giây, trong khi trên Apple nó được thiết lập như ngày hết hạn.

Ví dụ: tin nhắn thông báo với các tùy chọn phân phối theo nền tảng cụ thể

Yêu cầu gửi v1 sau gửi tiêu đề và nội dung thông báo chung cho tất cả các nền tảng, nhưng cũng gửi một số ghi đè dành riêng cho nền tảng. Cụ thể, yêu cầu:

  • đặt thời gian tồn tại lâu dài cho nền tảng Android và Web, trong khi đặt mức độ ưu tiên thông báo APN (nền tảng Apple) thành cài đặt thấp
  • đặt các phím thích hợp để xác định kết quả của một vòi nước dùng trên thông báo trên Android và Apple - click_action , và category , tương ứng.
{
  "message":{
     "token":"bk3RNwTe3H0:CI2k_HHwgIpoDKCIZvvDMExUdFQ3P1...",
     "notification":{
       "title":"Match update",
       "body":"Arsenal goal in added time, score is now 3-0"
     },
     "android":{
       "ttl":"86400s",
       "notification"{
         "click_action":"OPEN_ACTIVITY_1"
       }
     },
     "apns": {
       "headers": {
         "apns-priority": "5",
       },
       "payload": {
         "aps": {
           "category": "NEW_MESSAGE_CATEGORY"
         }
       }
     },
     "webpush":{
       "headers":{
         "TTL":"86400"
       }
     }
   }
 }

Xem các tài liệu tham khảo v1 HTTP để xem chi tiết đầy đủ về các phím có sẵn trong khối nền tảng cụ thể trong nội dung thư. Để biết thêm thông tin về việc xây dựng các yêu cầu gửi có chứa nội dung thư, xem Build Gửi yêu cầu .

Tùy chọn giao hàng

FCM cung cấp một tập hợp các tùy chọn gửi cụ thể cho các tin nhắn được gửi đến thiết bị Android và cho phép các tùy chọn tương tự trên nền tảng và web của Apple. Ví dụ, "đóng mở" hành vi nhắn được hỗ trợ trên Android thông qua FCM của collapse_key , trên Apple qua apns-collapse-id , và JavaScript / Web qua Topic . Để biết chi tiết, hãy xem mô tả trong phần này và tài liệu tham khảo liên quan.

Tin nhắn không thể thu gọn và có thể thu gọn

Một thông điệp không gập lại biểu thị rằng mỗi thông điệp cá nhân được gửi tới thiết bị. Thông báo không thể thu gọn cung cấp một số nội dung hữu ích, trái ngược với thông báo có thể thu gọn như "ping" không có nội dung đến ứng dụng dành cho thiết bị di động để liên hệ với máy chủ để tìm nạp dữ liệu.

Một số trường hợp sử dụng điển hình của tin nhắn không thể thu gọn là tin nhắn trò chuyện hoặc tin nhắn quan trọng. Ví dụ, trong một ứng dụng IM, bạn muốn gửi mọi tin nhắn, vì mọi tin nhắn đều có nội dung khác nhau.

Đối với Android, có giới hạn 100 tin nhắn có thể được lưu trữ mà không bị thu gọn. Nếu đạt đến giới hạn, tất cả các tin nhắn đã lưu trữ sẽ bị hủy. Khi thiết bị trực tuyến trở lại, nó sẽ nhận được một thông báo đặc biệt cho biết rằng đã đạt đến giới hạn. Sau đó, ứng dụng có thể xử lý tình huống đúng cách, thường bằng cách yêu cầu đồng bộ hóa hoàn toàn từ máy chủ ứng dụng.

Một thông báo đóng mở là một thông điệp có thể được thay thế bằng một tin nhắn mới nếu nó vẫn chưa được gửi tới thiết bị.

Các trường hợp sử dụng phổ biến của thông báo có thể thu gọn là thông báo được sử dụng để yêu cầu một ứng dụng di động đồng bộ hóa dữ liệu từ máy chủ. Một ví dụ sẽ là một ứng dụng thể thao cập nhật cho người dùng điểm số mới nhất. Chỉ tin nhắn gần đây nhất là có liên quan.

Để đánh dấu thư là đóng mở trên Android, bao gồm collapse_key tham số trong payload nhắn. Theo mặc định, khóa thu gọn là tên gói ứng dụng được đăng ký trong bảng điều khiển Firebase. Máy chủ FCM có thể lưu trữ đồng thời bốn thông báo có thể thu gọn khác nhau trên mỗi thiết bị, mỗi thông báo có một khóa thu gọn khác nhau. Nếu bạn vượt quá con số này, FCM chỉ giữ bốn phím thu gọn, không đảm bảo về việc giữ những phím nào.

Thông báo chủ đề không có tải trọng được thu gọn theo mặc định.

Tôi nên sử dụng cái nào?

Thông báo có thể thu gọn là lựa chọn tốt hơn từ quan điểm hiệu suất, miễn là ứng dụng của bạn không cần sử dụng thông báo không thể thu gọn. Tuy nhiên, nếu bạn sử dụng thông báo có thể thu gọn, hãy nhớ rằng FCM chỉ cho phép FCM sử dụng tối đa bốn khóa thu gọn khác nhau trên mỗi mã thông báo đăng ký tại bất kỳ thời điểm nào. Bạn không được vượt quá con số này, nếu không có thể gây ra hậu quả khó lường.

Sử dụng kịch bản Làm cách nào để gửi
Không thể thu gọn Mọi thông điệp đều quan trọng đối với ứng dụng khách và cần được gửi đi. Ngoại trừ tin nhắn thông báo, tất cả các tin nhắn đều không thể thu gọn theo mặc định.
Có thể thu gọn Khi có một thông báo mới hơn hiển thị một thông báo cũ hơn, có liên quan không liên quan đến ứng dụng khách, FCM sẽ thay thế thông báo cũ hơn. Ví dụ: tin nhắn được sử dụng để bắt đầu đồng bộ hóa dữ liệu từ máy chủ hoặc tin nhắn thông báo lỗi thời. Đặt thông số thích hợp trong yêu cầu tin nhắn của bạn:
  • collapseKey trên Android
  • apns-collapse-id trên Apple
  • Topic trên Web
  • collapse_key trong giao thức cũ (tất cả các nền tảng)

Đặt mức độ ưu tiên của một tin nhắn

Bạn có hai tùy chọn để chỉ định mức độ ưu tiên phân phối cho các tin nhắn xuống dòng trên Android: mức độ ưu tiên thông thường và mức độ ưu tiên cao. Việc phân phối các tin nhắn bình thường và có mức độ ưu tiên cao hoạt động như thế này:

  • Ưu tiên bình thường. Đây là ưu tiên mặc định cho thông điệp dữ liệu . Các tin nhắn ưu tiên thông thường được gửi ngay lập tức khi ứng dụng ở chế độ nền trước. Khi thiết bị ở chế độ Ngủ đông, việc giao hàng có thể bị chậm lại để tiết kiệm pin. Đối với các tin nhắn ít nhạy cảm về thời gian, chẳng hạn như thông báo về email mới, giữ giao diện người dùng của bạn được đồng bộ hóa hoặc đồng bộ hóa dữ liệu ứng dụng trong nền, hãy chọn mức độ ưu tiên phân phối bình thường.

    Khi nhận được một thông điệp ưu tiên bình thường trên Android mà yêu cầu một đồng bộ hóa dữ liệu nền cho ứng dụng, bạn có thể lên lịch một nhiệm vụ với WorkManager để xử lý nó khi mạng có sẵn.

  • Ưu tiên cao. FCM cố gắng gửi tin nhắn 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ố xử lý hạn chế (bao gồm cả truy cập mạng rất hạn chế). Thông báo có mức độ ưu tiên cao thường dẫn đến tương tác của người dùng với ứng dụng của bạn hoặc thông báo của ứng dụng. Nếu FCM phát hiện ra một mẫu không có trong đó, các tin nhắn của bạn có thể bị loại bỏ ưu tiên. Android P giới thiệu ứng dụng xô chờ nhằm hạn chế số của FCM thông điệp ưu tiên cao, bạn có thể gửi cho ứng dụng của bạn mà không dẫn đến việc người dùng sử dụng ứng dụng của bạn hoặc xem thông báo. Nếu phản hồi với một thông báo có mức độ ưu tiên cao, thông báo được hiển thị theo cách người dùng có thể nhìn thấy, thì hạn ngạch nhóm chờ ứng dụng của bạn sẽ không bị thông báo đó sử dụng.

    Vì một phần nhỏ dân số di động Android đang sử dụng mạng có độ trễ cao, nên 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. Gọi lại máy chủ trước khi kết thúc thời gian xử lý cho 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 tin nhắn FCM và hiển thị ngay lập tức. Nếu bạn cần phải đồng bộ để biết thêm nội dung trong ứng dụng trên Android, bạn có thể lên lịch một nhiệm vụ với WorkManager để xử lý mà ở chế độ nền.

Dưới đây là một ví dụ về một tin nhắn ưu tiên thông thường được gửi qua giao thức FCM HTTP v1 để thông báo cho người đăng ký tạp chí rằng có sẵn nội dung mới để tải xuống:

{
  "message":{
    "topic":"subscriber-updates",
    "notification":{
      "body" : "This week's edition is now available.",
      "title" : "NewsMagazine.com",
    },
    "data" : {
      "volume" : "3.21.15",
      "contents" : "http://www.news-magazine.com/world-week/21659772"
    },
    "android":{
      "priority":"normal"
    },
    "apns":{
      "headers":{
        "apns-priority":"5"
      }
    },
    "webpush": {
      "headers": {
        "Urgency": "high"
      }
    }
  }
}

Để biết thêm chi tiết về nền tảng cụ thể về cách đặt mức độ ưu tiên của tin nhắn:

Đặt tuổi thọ của một tin nhắn

FCM thường gửi tin nhắn ngay sau khi chúng được gửi đi. Tuy nhiên, điều này có thể không phải lúc nào cũng khả thi. Ví dụ: nếu nền tảng là Android, thiết bị có thể bị tắt, ngoại tuyến hoặc không khả dụng. Hoặc FCM có thể cố tình 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 tuổi thọ pin.

Khi điều này xảy ra, FCM sẽ lưu trữ thông báo và gửi nó ngay khi có thể. Mặc dù điều này là tốt trong hầu hết các trường hợp, nhưng có một số ứng dụng có thể không bao giờ gửi được tin nhắn trễ. Ví dụ: nếu tin nhắn là cuộc gọi đến hoặc thông báo trò chuyện video, thì nó chỉ có ý nghĩa trong một khoảng thời gian ngắn trước khi cuộc gọi kết thúc. Hoặc nếu tin nhắn là lời mời tham gia một sự kiện, thì sẽ vô ích nếu nhận được sau khi sự kiện kết thúc.

Trên Android và Web / JavaScript, bạn có thể chỉ định thời lượng tối đa của một tin nhắn. Giá trị phải có thời lượng 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. Các yêu cầu không chứa trường này được mặc định trong khoảng thời gian tối đa là bốn tuần.

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

  • Cuộc gọi đến trò chuyện video
  • Các sự kiện lời mời sắp hết hạn
  • Lịch sự kiện

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 bao giờ điều chỉnh các tin nhắn có giá trị thời gian tồn tại là 0 giây. Nói cách khác, FCM đảm bảo nỗ lực tốt nhất cho các tin nhắn phải được gửi "ngay bây giờ hoặc không bao giờ". Hãy ghi nhớ rằng một time_to_live giá trị từ 0 điệp phương tiện mà không thể được gửi ngay lập tức bị loại bỏ. Tuy nhiên, vì những tin nhắn như vậy không bao giờ được lưu trữ, điều này cung cấp độ trễ tốt nhất để gửi tin nhắn thông báo.

Dưới đây là một ví dụ về yêu cầu bao gồm 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"
      }
    }
  }
}

Nhận tin nhắn từ nhiều người gửi

FCM cho phép nhiều bên gửi tin nhắn đến cùng một ứng dụng khách. Ví dụ: giả sử ứng dụng khách là một công cụ tổng hợp bài viết với nhiều cộng tác viên và mỗi người trong số họ sẽ có thể gửi một tin nhắn khi họ xuất bản một bài báo mới. Thông báo này có thể chứa một URL để ứng dụng khách có thể tải xuống bài viết. Thay vì phải tập trung tất cả hoạt động gửi ở một vị trí, FCM cung cấp cho bạn khả năng cho phép mỗi cộng tác viên này gửi tin nhắn của riêng mình.

Để kích hoạt tính năng này, hãy chắc chắn rằng bạn có mỗi người gửi ID người gửi . Khi yêu cầu đăng ký, ứng dụng khách tìm nạp mã thông báo nhiều lần, mỗi lần với một ID người gửi khác nhau trong trường đối tượng, sử dụng phương pháp truy xuất mã thông báo cho nền tảng nhất định:

Hãy chắc chắn rằng bạn không thêm nhiều ID người gửi một yêu cầu thẻ duy nhất, vì điều này có thể có những kết quả không thể đoán trước. Thực hiện từng cuộc gọi riêng biệt, một lần cho mỗi ID người gửi.

Cuối cùng, chia sẻ mã thông báo đăng ký với những người gửi tương ứng và họ sẽ có thể gửi tin nhắn đến ứng dụng khách bằng các khóa xác thực của riêng họ.

Lưu ý rằng có giới hạn 100 người gửi.

Thời gian tồn tạ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ột ID tin nhắn, điều đó không có nghĩa là tin nhắn đó đã được gửi đến thiết bị. Đúng hơn, nó có nghĩa là nó đã được chấp nhận để giao hàng. Điều gì xảy ra với tin nhắn sau khi nó được chấp nhận phụ thuộc vào nhiều yếu tố.

Trong trường hợp tốt nhất, nếu thiết bị được kết nối với FCM, màn hình sáng và không có giới hạn điều chỉnh, thông báo sẽ được gửi ngay lập tức.

Nếu thiết bị được kết nối nhưng đang ở chế độ Ngủ gật, thì một thông báo có mức độ ưu tiên thấp sẽ được FCM lưu trữ cho đến khi thiết bị ở chế độ Ngủ gật. Và đó là nơi các collapse_key cờ đóng một vai trò: nếu có đã là một thông điệp với phím cùng sụp đổ (và mã thông báo đăng ký) được lưu giữ và chờ đợi giao hàng, thông điệp cũ được bỏ đi và tin nhắn mới diễn ra của nó (có nghĩa là, người già thư mới bị thu gọn). Tuy nhiên, nếu phím thu gọn không được đặt, cả tin nhắn mới và cũ đều được lưu trữ để gửi trong tương lai.

Nếu thiết bị không được kết nối với FCM, tin nhắn sẽ được lưu trữ cho đến khi kết nối được thiết lập (lại tuân theo quy tắc phím thu gọn). Khi kết nối được thiết lập, FCM sẽ gửi tất cả các tin nhắn đang chờ xử lý đến thiết bị. Nếu thiết bị không bao giờ được kết nối lại (ví dụ: nếu thiết bị đã được khôi phục cài đặt gốc), thông báo cuối cùng sẽ hết thời gian chờ và bị hủy khỏi bộ nhớ FCM. Thời gian chờ mặc định là bốn tuần, trừ khi time_to_live cờ được thiết lập.

Để có thêm thông tin chi tiết về việc chuyển tải một thông điệp:

    Để có được cái nhìn sâu sắc hơn vào việc cung cấp các thông điệp trên nền tảng Android hoặc Apple, vui lòng xem bảng điều khiển báo cáo FCM , trong đó ghi rõ số lượng tin nhắn đã gửi và mở trên các thiết bị của Apple và Android, cùng với dữ liệu cho "ấn tượng" (thông báo nhìn thấy bởi người dùng) cho Ứng dụng Android.

Đối với các thiết bị Android đã bật tính năng nhắn tin kênh trực tiếp, 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ẽ ngay lập tức loại bỏ tin nhắn đó. Nếu thiết bị kết nối trong vòng bốn tuần của thông điệp dữ liệu cuối cùng bạn gửi đến nó, khách hàng của bạn nhận được onDeletedMessages () gọi lại. Sau đó, ứng dụng có thể xử lý tình huống đúng cách, thường bằng cách yêu cầu đồng bộ hóa hoàn toàn từ máy chủ ứng dụng.

Cuối cùng, khi FCM cố gắng gửi một thông báo đến thiết bị và ứng dụng đã được gỡ cài đặt, FCM sẽ loại bỏ thông báo đó ngay lập tức và làm mất hiệu lực của mã thông báo đăng ký. Nỗ lực trong tương lai để gửi một thông điệp tới những kết quả thiết bị trong một NotRegistered lỗi.

Điều chỉnh và mở rộng quy mô

Mục tiêu của chúng tôi là luôn chuyển tải mọi thông điệp được gửi qua FCM. Tuy nhiên, việc truyền tải mọi thông điệp đôi khi dẫn đến trải nghiệm người dùng tổng thể kém. Trong các trường hợp khác, chúng tôi cần cung cấp ranh giới để đảm bảo rằng FCM cung cấp dịch vụ có thể mở rộng cho tất cả người gửi.

Điều chỉnh thông báo có thể thu gọn

Như đã mô tả ở trên, thông báo có thể thu gọn là thông báo không có nội dung được thiết kế để thu gọn chồng lên nhau. Trong trường hợp nhà phát triển lặp lại cùng một thông báo cho một ứng dụng quá thường xuyên, chúng tôi sẽ trì hoãn (điều chỉnh) thông báo để giảm tác động đến pin của người dùng.

Ví dụ: nếu bạn gửi một số lượng lớn yêu cầu đồng bộ hóa email mới đến một thiết bị, chúng tôi có thể trì hoãn yêu cầu đồng bộ hóa email tiếp theo vài phút để thiết bị có thể đồng bộ hóa với tốc độ trung bình thấp hơn. Việc điều chỉnh này được thực hiện nghiêm ngặt để hạn chế ảnh hưởng đến pin của người dùng.

Nếu trường hợp sử dụng của bạn yêu cầu các kiểu gửi liên tục cao, thì các tin nhắn không thể thu gọn có thể là lựa chọn phù hợp. Đối với những tin nhắn như vậy, hãy đảm bảo bao gồm nội dung trong những tin nhắn đó để giảm chi phí pin.

Chúng tôi giới hạn tin nhắn có thể thu gọn ở mức 20 tin nhắn cho mỗi ứng dụng trên mỗi thiết bị, với một tin nhắn được lấp đầy sau mỗi 3 phút.

Điều chỉnh máy chủ XMPP

Chúng tôi giới hạn tốc độ bạn có thể kết nối với máy chủ FCM XMPP ở mức 400 kết nối mỗi phút cho mỗi dự án. Đây không phải là vấn đề đối với việc gửi tin nhắn, nhưng điều quan trọng là đảm bảo sự ổn định của hệ thống của chúng tôi.

Đối với mỗi dự án, FCM cho phép 2500 kết nối song song.

Tốc độ tin nhắn tối đa cho một thiết bị

Bạn có thể gửi tối đa 240 tin nhắn / phút và 5.000 tin nhắn / giờ đến một thiết bị. Ngưỡng cao này có nghĩa là cho phép bùng nổ lưu lượng truy cập ngắn hạn, chẳng hạn như khi người dùng tương tác nhanh qua trò chuyện. Giới hạn này ngăn lỗi gửi logic vô tình làm tiêu hao pin trên thiết bị.

Giới hạn tin nhắn ngược dòng

Chúng tôi giới hạn thông điệp ngược dòng tại 1.500.000 / phút cho mỗi dự án để tránh quá tải máy chủ nơi thượng nguồn.

Chúng tôi giới hạn tin nhắn ngược dòng trên mỗi thiết bị ở mức 1.000 / phút để bảo vệ khỏi việc tiêu hao pin do hành vi xấu của ứng dụng.

Giới hạn tin nhắn chủ đề

Tỷ lệ thêm / bớt đăng ký chủ đề được giới hạn ở 3.000 QPS cho mỗi dự án.

Đối với cước phí tin nhắn gửi, xem Fanout tốc độ nhâp .

Fanout điều chỉnh

Tin fanout là quá trình gửi một thông điệp tới nhiều thiết bị, chẳng hạn như khi bạn nhắm mục tiêu chủ đề và các nhóm, hoặc khi bạn sử dụng các nhà soạn nhạc Notifications để khán giả mục tiêu hoặc phân khúc người dùng.

Quá trình gửi tin nhắn không phải là tức thời và vì vậy, đôi khi bạn có nhiều tệp tin đang được xử lý đồng thời. Chúng tôi giới hạn số lượng thư gửi đồng thời cho mỗi dự án là 1.000. Sau đó, chúng tôi có thể từ chối các yêu cầu fanout bổ sung hoặc hoãn lại các yêu cầu cho đến khi một số fanout đang trong quá trình hoàn thành.

Tỷ lệ phân phối thực tế có thể đạt được bị ảnh hưởng bởi số lượng các dự án yêu cầu phân bổ cùng một lúc. Tỷ lệ fanout 10.000 QPS cho một dự án riêng lẻ không phải là hiếm, nhưng con số đó không phải là sự đảm bảo và là kết quả của tổng tải trên hệ thống. Điều quan trọng cần lưu ý là dung lượng fanout có sẵn được chia cho các dự án chứ không phải theo các yêu cầu fanout. Vì vậy, nếu dự án của bạn có hai fanout đang được tiến hành, thì mỗi fanout sẽ chỉ thấy một nửa tỷ lệ fanout có sẵn. Cách được khuyến nghị để tối đa hóa tốc độ fanout của bạn là chỉ có một fanout đang hoạt động tại một thời điểm.

Cổng FCM và tường lửa của bạn

Nếu tổ chức của bạn có tường lửa để hạn chế lưu lượng truy cập vào hoặc từ Internet, bạn cần định cấu hình tường lửa để cho phép các thiết bị di động kết nối với FCM để các thiết bị trên mạng của bạn nhận được tin nhắn. FCM thường sử dụng cổng 5228, nhưng đôi khi nó sử dụng 443, 5229 và 5230.

Đối với các thiết bị kết nối trên mạng của bạn, FCM không cung cấp các IP cụ thể vì dải IP của chúng tôi thay đổi quá thường xuyên và các quy tắc tường lửa của bạn có thể lỗi thời, ảnh hưởng đến trải nghiệm của người dùng. Lý tưởng nhất là các cổng danh sách cho phép 5228-5230 & 443 không có giới hạn IP. Tuy nhiên, nếu bạn phải có một hạn chế IP, bạn nên allowlist tất cả các địa chỉ IP được liệt kê trong goog.json . Danh sách lớn này được cập nhật thường xuyên và bạn nên cập nhật các quy tắc của mình hàng tháng. Các sự cố do hạn chế IP của tường lửa thường không liên tục và khó chẩn đoán.

Chúng tôi cung cấp một tập hợp các tên miền có thể được cho phép thay vì địa chỉ IP. Những tên máy chủ được liệt kê dưới đây. Nếu chúng tôi bắt đầu sử dụng các tên máy chủ bổ sung, chúng tôi sẽ cập nhật danh sách tại đây. Sử dụng tên miền cho quy tắc tường lửa của bạn có thể có hoặc có thể không hoạt động trong thiết bị tường lửa của bạn.

Các cổng để mở:

  • 5228
  • 5229
  • 5230
  • 443

Tên máy chủ để mở:

  • mtalk.google.com
  • mtalk4.google.com
  • mtalk-staging.google.com
  • mtalk-dev.google.com
  • alt1-mtalk.google.com
  • alt2-mtalk.google.com
  • alt3-mtalk.google.com
  • alt4-mtalk.google.com
  • alt5-mtalk.google.com
  • alt6-mtalk.google.com
  • alt7-mtalk.google.com
  • alt8-mtalk.google.com
  • android.clients.google.com
  • device-provisinstall.googleapis.com

Tường lửa dịch địa chỉ mạng và / hoặc kiểm tra gói tin có trạng thái:

Nếu mạng của bạn triển khai Dịch địa chỉ mạng (NAT) hoặc Kiểm tra gói tin có trạng thái (SPI), hãy triển khai thời gian chờ 30 phút hoặc lớn hơn cho các kết nối của chúng tôi qua các cổng 5228-5230. Điều này cho phép chúng tôi cung cấp kết nối đáng tin cậy đồng thời giảm mức tiêu thụ pin trên thiết bị di động của người dùng.

Thông tin xác thực

Tùy thuộc vào việc triển khai các tính năng FCM nào, bạn có thể cần các thông tin đăng nhập sau từ dự án Firebase của mình:

ID dự án Một số nhận dạng duy nhất cho dự án Firebase của bạn, được sử dụng trong các yêu cầu tới điểm cuối HTTP FCM v1. Giá trị này có sẵn trong các căn cứ hỏa lực console Cài đặt cửa sổ.
Mã thông báo đăng ký

Một chuỗi mã thông báo duy nhất xác định từng phiên bản ứng dụng khách. Mã thông báo đăng ký là bắt buộc để nhắn tin cho một thiết bị và nhóm thiết bị. Lưu ý rằng mã thông báo đăng ký phải được giữ bí mật.

ID người gửi Một số giá trị đặc biệt được tạo ra khi bạn tạo dự án căn cứ hỏa lực của bạn, có sẵn trong Cloud Messaging tab của cửa sổ căn cứ hỏa lực console Settings. ID người gửi được sử dụng để xác định từng người gửi có thể gửi tin nhắn đến ứng dụng khách.
Truy cập thẻ Mã thông báo OAuth 2.0 tồn tại trong thời gian ngắn cho phép các yêu cầu tới API HTTP v1. Mã thông báo này được liên kết với tài khoản dịch vụ thuộc dự án Firebase của bạn. Để tạo và truy cập xoay tokens, hãy làm theo các bước được mô tả trong Authorize Gửi yêu cầu .
Khóa máy chủ (dành cho các giao thức kế thừa)

Khóa máy chủ cho phép máy chủ ứng dụng của bạn truy cập vào các dịch vụ của Google, bao gồm cả việc gửi tin nhắn qua các giao thức cũ của Firebase Cloud Messaging. Bạn có được khóa máy chủ khi tạo dự án Firebase của mình. Bạn có thể xem nó trong Cloud Messaging tab của cửa sổ căn cứ hỏa lực console Settings.

Chú ý: Không bao gồm các máy chủ quan trọng bất cứ nơi nào trong mã khách hàng của bạn. Ngoài ra, hãy đảm bảo chỉ sử dụng các khóa máy chủ để cấp quyền cho máy chủ ứng dụng của bạn. Các phím trình duyệt và nền tảng Android, Apple và trình duyệt đều bị FCM từ chối.