Google is committed to advancing racial equity for Black communities. See how.
Trang này được dịch bởi Cloud Translation API.
Switch to English

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à 4KB, ngoại trừ khi gửi tin nhắn 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 đáng tin cậy 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 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 tin nhắn thông báo bao gồm tải 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 các giao thức FCM, hãy đặt khóa notification với tập hợp các 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 ở phía trước, tin nhắn được xử lý bởi 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 data 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. :

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 lượng 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 trọng 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 thông báo 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 thông điệp trên các nền tảng

Cả SDK quản trị Firebase và giao thức FCM v1 HTTP đề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 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 - iOS, 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 tới iOS và web mà không gửi tới Android, bạn phải sử dụng hai nhóm trường riêng biệt, một cho iOS 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 giá trị cơ bản giống nhau 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 iOS, 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 đây 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 (iOS) 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 nhấn vào thông báo trên Android và iOS - 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 iOS và web. Ví dụ: hành vi thông báo "có thể thu gọn" được hỗ trợ trên Android qua apns-collapse-id collapse_key của FCM, trên iOS 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à thu gọn được

Tin nhắn 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 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 thư đã 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ộ 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. FCM cho phép máy chủ ứng dụng sử dụng tối đa bốn phím thu gọn khác nhau trên mỗi thiết bị Android vào bất kỳ thời điểm nào. Nói cách khác, 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 chỉ giữ bốn phím thu gọn, không đảm bảo về việc giữ những phím nào.

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 máy chủ kết nối FCM sử dụng tối đa bốn khóa thu gọn khác nhau cho 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ả tin nhắn đều không thể thu gọn theo mặc định.
Có thể thu gọn Khi có thông báo mới hơn hiển thị 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 tham 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 iOS
  • Topic trên web
  • collapse_key trong các 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 thư 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 thư thông thường và có mức độ ưu tiên cao hoạt động như sau:

  • Ưu tiên bình thường. Đây là ưu tiên mặc định cho các 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 gửi bình thường.

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

  • Ư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 dịch vụ 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. Giới thiệu nhóm ứng dụng ở chế độ chờ Android P giới hạn số lượng tin nhắn có mức độ ưu tiên cao FCM mà bạn có thể gửi đến ứng dụng của mình 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 mà 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ị nó ngay lập tức. Nếu bạn cần đồng bộ hóa cho nội dung trong ứng dụng bổ sung trên Android, bạn có thể lên lịch tác vụ với WorkManager để xử lý tác vụ đó trong nền.

Dưới đây là một ví dụ về thông báo ư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ó 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 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 mà tin nhắn muộn cũng có thể không bao giờ được gửi. Ví dụ: nếu tin nhắn là cuộc gọi đến hoặc thông báo trò chuyện video, 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à nó 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
  • Sự kiện lời mời sắp hết hạn
  • Sự kiệ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 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"
      }
    }
  }
}

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 tập 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 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.

Để bật tính năng này, hãy đảm bảo rằng bạn có ID người gửi của từng người gửi . Khi yêu cầu đăng ký, ứng dụng khách hàng sẽ 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:

Đảm bảo rằng bạn không thêm nhiều ID người gửi vào một yêu cầu mã thông báo, vì điều này có thể dẫn đến 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 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 thông báo lên FCM và nhận lại ID thông báo, điều đó không có nghĩa là thông báo đó đã đượ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 mà cờ collapse_key đóng một vai trò nào đó: nếu đã có một tin nhắn 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ì tin nhắn cũ sẽ bị loại bỏ và tin nhắn 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 thông điệp:

    Để biết thêm thông tin chi tiết về việc gửi tin nhắn trên Android hoặc iOS, 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 thiết bị iOS 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 Android ứng dụng.

Đố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ẽ loại bỏ ngay lập tức. 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 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 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 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 các 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 điền lại 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à một 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 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ị ở 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.

Để 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 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à đả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 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 5229 và 5230.

Đối với các kết nối đi, 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 người dùng của bạn. Lý tưởng nhất là bạn sẽ đưa các cổng 5228-5230 vào danh sách trắng mà 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 đưa vào danh sách trắng tất cả các địa chỉ IP trong các khối IPv4 và IPv6 được liệt kê trong ASN 15169 của Google . Đây là một danh sách lớn và bạn nên có kế hoạch 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.

Các cổng để mở cho các tin nhắn đến:

  • 5228
  • 5229
  • 5230
  • 443

Các cổng cho phép kết nối đi:

Một trong số này (tùy chọn số 1 được ưu tiên):

  1. Không có giới hạn IP
  2. Tất cả các địa chỉ IP có trong các khối IP được liệt kê trong ASN 15169 của Google . Đừng quên cập nhật điều này ít nhất mỗi tháng một lần.

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 cho 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ý

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 nhóm thiết bị và 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 yêu cầu đối vớ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 cũ)

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. FCM từ chối khóa Android, iOS và trình duyệt.