获取我们在 Firebase 峰会上发布的所有信息,了解 Firebase 可如何帮助您加快应用开发速度并满怀信心地运行应用。了解详情

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 hiển thị đượ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ôi trường đáng tin cậy, chẳng hạn như Chức năng đám mây hoặc máy chủ ứng dụng của bạn, hãy sử dụng SDK quản trị hoặc Giao thức máy chủ FCM : Đặt khóa notification . 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ề thông báo hiển thị và gửi tải trọng yêu cầu.

  2. Sử dụng trình soạn thảo Thông báo : Nhập Văn bản Tin nhắn, Tiêu đề, v.v. 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ôi trường đáng tin cậy, chẳng hạn như Chức năng đám mây hoặc máy chủ ứng dụng của bạn, hãy sử dụng SDK quản trị hoặc Giao thức máy chủ FCM : Chỉ đặt khóa data .

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ý việc 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à tương tác lại với người dùng, bạn có thể gửi tin nhắn thông báo bằng bảng điều khiển Firebase . Bảng điều khiển Firebase cung cấp thử nghiệm A / B dựa trên phân tích để giúp bạn tinh chỉnh và cải thiện thông điệp tiếp thị.

Để gửi tin nhắn thông báo theo chương trình bằng cách sử dụng SDK quản trị hoặc giao thức FCM, hãy đặt khóa notification với bộ tùy chọn khóa-giá trị được xác định trước cần thiết cho phần người dùng có thể nhìn thấy trong thông báo 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 ở nền 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 báo có định dạng JSON trong cùng một ứng dụng IM như trên, trong đó thông tin được gói gọn trong khóa data chung và ứng dụng khách được mong đợi sẽ diễn giải nội dung:

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

Ví dụ trên cho thấy việc sử dụng trường dữ liệu cấp cao nhất hoặc trường data chung, được các ứng dụng khách trên tất cả các nền tảng nhận được thông báo diễn giải. 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 truyền tải của Android (xem kiến ​​trúc FCM ) sử dụng mã hóa điểm-điểm. Tùy thuộc vào nhu cầu của mình, 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ó các giải pháp bên ngoài có sẵn như Cap Mao 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 trình tổng hợp Thông báo , hãy sử dụng 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 tin nhắn 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 - 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 , các ứng dụng nhận tải trọng thông báo trong khay thông báo và chỉ xử lý tải trọng dữ liệu khi người dùng nhấn vào thông báo.
  • Khi ở phía trước , ứng dụng của bạn nhận được một đối tượng tin nhắn có sẵn cả hai trọng tải.

Đây là thông báo có định dạng JSON chứa cả khóa notification và khóa data :

{
  "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ả SDK quản trị Firebase và giao thức HTTP FCM v1 đều cho phép các yêu cầu tin nhắn của bạn đặt tất cả các trường có sẵn trong đối tượng message . Điêu nay bao gôm:

  • một tập hợp các trường chung sẽ được giải thích bởi tất cả các phiên bản ứng dụng nhận được thông báo.
  • tập hợp các trường dành riêng cho nền tảng, chẳng hạn như AndroidConfigWebpushConfig , chỉ được diễn giải bởi các phiên bản ứng dụng chạy trên nền tảng được chỉ đị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 phiên bản ứ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 các trường dành riêng cho nền tảng ngoài các trường chung

Bất cứ khi nào bạn chỉ muốn gửi giá trị đến các nền tảng cụ thể, đừng sử dụng các trường phổ biến; 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ác tùy chọn gửi cụ thể, hãy sử dụng các trường dành riêng cho nền tảng để đặt 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ể diễn giải giá trị hơi khác nhau — ví dụ: thời gian tồn tại được đặt trên Android là thời gian hết hạn tính bằng giây, trong khi trên Apple, thời gian tồn tại được đặt là 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ả khi người dùng chạm vào thông báo trên Android và Apple - click_actioncategory , 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 tài liệu tham chiếu HTTP v1 để biết chi tiết đầy đủ về các khóa có sẵn trong các khối dành riêng cho nền tảng trong nội dung thư. Để biết thêm thông tin về việc xây dựng yêu cầu gửi có chứa nội dung thư, hãy xem Xây dựng yêu cầu gửi .

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ụ: hành vi thông báo "có thể thu gọn" được hỗ trợ trên Android thông qua phím collapse_key của FCM, trên Apple qua apns-collapse-id và trên 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

Thông báo không thể thu gọn biểu thị rằng từng tin nhắn riêng lẻ được gửi đến 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 ứ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.

Tin nhắn có thể thu gọn là một tin nhắn có thể được thay thế bằng một tin nhắn mới nếu nó chưa được gửi đến 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 ứ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 một tin nhắn là có thể thu gọn trên Android, hãy bao gồm tham số collapse_key trong tải trọng tin 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 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 sẽ 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. Tin nhắn thông báo luôn có thể thu gọn và sẽ bỏ qua tham số collapse_key .

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 các giao thức kế thừa (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 thư dưới: mức độ ưu tiên thông thường và mức độ ưu tiên cao. Mặc dù hành vi hơi khác nhau giữa các nền tảng, nhưng việc phân phối các thông báo có mức độ ưu tiên cao và bình thường hoạt động như thế này:

  • Ưu tiên bình thường. 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. Đối với các ứng dụng chạy nền, việc phân phối có thể bị chậm trễ. Đố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.

  • Ưu tiên cao. FCM cố gắng gửi các tin nhắn có mức độ ưu tiên cao ngay lập tức ngay cả khi thiết bị đang ở chế độ Ngủ gật. Các tin nhắn có mức độ ưu tiên cao dành cho nội dung người dùng có thể nhìn thấy được nhạy cảm về thời gian.

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 thời lượng 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 không phải lúc nào cũng có thể thực hiện được. 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 thư. 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 nhớ rằng giá trị time_to_live bằng 0 có nghĩa là các thư không thể gửi 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ữ, đ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"
      }
    }
  }
}

Thời gian tồn tại của một tin nhắn

Khi máy chủ ứng dụng đăng tin nhắn lên FCM và nhận lại 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ờ collapse_key đóng một vai trò nào đó: nếu đã có một thông báo có cùng khóa thu gọn (và mã thông báo đăng ký) được lưu trữ và đang chờ gửi, thì thông báo cũ sẽ bị loại bỏ và thông báo mới sẽ thế chỗ (tức là cũ 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 cờ time_to_live được đặt.

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

    Để hiểu rõ hơn về việc gửi tin nhắn trên nền tảng Android hoặc Apple, hãy xem trang tổng quan báo cáo FCM , ghi lại số lượng tin nhắn được gửi và mở trên các thiết bị Apple và Android, cùng với dữ liệu về "số lần hiển thị" (thông báo mà người dùng nhìn thấy) 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 kể từ thông báo dữ liệu cuối cùng mà bạn gửi cho nó, ứng dụng khách của bạn sẽ nhận được lệnh gọi lại onDeletedMessages () . 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ý. Những nỗ lực trong tương lai để gửi tin nhắn đến thiết bị đó dẫn đến lỗi NotRegistered .

Đ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 gử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 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 mẫ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 độ mà 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ị

Đối với Android, 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ị.

Đối với iOS, chúng tôi trả lại lỗi khi tỷ lệ vượt quá giới hạn APN.

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

Chúng tôi giới hạn tin nhắn ngược dòng ở mức 1.500.000 / phút cho mỗi dự án để tránh làm quá tải các máy chủ đích ngược dòng.

Chúng tôi giới hạn tin nhắn ngược dòng trên mỗi thiết bị ở 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 / xóa đăng ký chủ đề được giới hạn ở mức 3.000 QPS cho mỗi dự án.

Để biết tốc độ gửi tin nhắn, hãy xem Fanout Throttling .

Fanout điều chỉnh

Message fanout là quá trình gửi tin nhắn đến nhiều thiết bị, chẳng hạn như khi bạn nhắm mục tiêu các chủ đề và nhóm hoặc khi bạn sử dụng trình tổng hợp Thông báo để nhắm mục tiêu đối tượng hoặc phân khúc người dùng.

Tin nhắn fanout không phải là tức thời và vì vậy đôi khi bạn có nhiều fanout đang tiến hành đồ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 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à đả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ó giới hạn IP, bạn nên cho phép liệt kê 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 TCP để 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.apis.google.com
  • device-provisinstall.googleapis.com
  • firebaseinstallations.googleapis.com

Tường lửa Dịch Địa chỉ Mạng và / hoặc Kiểm tra Gói 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 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 ngăn Cài đặt bảng điều khiển Firebase .
Mã thông báo đăng ký

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 giá trị số duy nhất được tạo khi bạn tạo dự án Firebase của mình, có sẵn trong tab Nhắn tin qua đám mây của ngăn Cài đặt bảng điều khiển Firebase. 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à xoay mã thông báo truy cập, hãy làm theo các bước được mô tả trong Ủy quyền 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 tab Nhắn tin qua đám mây của ngăn Cài đặt bảng điều khiển Firebase.

Quan trọng: Không đưa khóa máy chủ vào bất kỳ đâu trong mã máy khách 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.