Tìm hiểu về cách gửi thư

Để khắc phục sự cố liên tục không gửi được thông báo, hãy sử dụng trình khắc phục sự cố FCM và xem bài đăng này trên blog để hiểu rõ các lý do khiến bạn có thể không thấy thông báo của mình. Bạn cũng có thể truy cập vào trang tổng quan về trạng thái của FCM để xác định xem có dịch vụ nào đang bị gián đoạn ảnh hưởng đến FCM hay không.

FCM cũng cung cấp 3 bộ công cụ để giúp bạn hiểu rõ về việc đánh giá tổng thể mức độ thành công và chiến lược gửi thông báo:

  • Firebase báo cáo về hoạt động gửi thông báo trên bảng điều khiển
  • Các chỉ số tổng hợp về việc phân phối SDK Android từ Data API Firebase Cloud Messaging
  • Xuất dữ liệu toàn diện sang Google BigQuery

Tính năng xuất dữ liệu BigQuery và thẻ Báo cáo trong bảng điều khiển Firebase cần có Google Analytics để hoạt động. Nếu chưa bật Google Analytics cho dự án của mình, bạn có thể thiết lập Google Analytics trong thẻ tích hợp của phần cài đặt dự án Firebase. Dữ liệu giao hàng tổng hợp không yêu cầu Google Analytics hoạt động.

Xin lưu ý rằng việc báo cáo nhiều số liệu thống kê trên trang này có thể bị chậm trễ tối đa 24 giờ do việc xử lý dữ liệu phân tích theo lô.

Báo cáo gửi thư

Trong thẻ Báo cáo trong bảng điều khiển Firebase, bạn có thể xem dữ liệu sau đây cho những thông báo được gửi đến FCM SDK của nền tảng Android hoặc Apple, bao gồm cả những thông báo được gửi qua Trình soạn thông báo và FCM API:

  • Gửi – Thông báo dữ liệu hoặc thông báo đã được đưa vào hàng đợi để gửi hoặc đã được chuyển thành công đến một dịch vụ bên thứ ba như APNs để gửi. Xin lưu ý rằng số liệu thống kê về lượt gửi có thể bị trễ vài giờ. Hãy xem thời gian tồn tại của một thông báo để biết thêm thông tin.
  • Đã nhận (chỉ có trên thiết bị Android) – Ứng dụng đã nhận được thông báo dữ liệu hoặc thông báo. Dữ liệu này có sẵn khi thiết bị Android nhận được thông báo đã cài đặt FCM SDK 18.0.1 trở lên.
  • Số lần hiển thị (chỉ có cho thông báo trên thiết bị Android) – Thông báo hiển thị đã xuất hiện trên thiết bị trong khi ứng dụng đang chạy ở chế độ nền.
  • Lượt mở – Người dùng đã mở thông báo. Chỉ được báo cáo cho những thông báo nhận được khi ứng dụng ở chế độ nền.

Dữ liệu này có sẵn cho tất cả các thông báo có tải trọng thông báo và tất cả thông báo dữ liệu được gắn nhãn. Để tìm hiểu thêm về nhãn, hãy xem phần Thêm nhãn phân tích vào thư.

Khi xem báo cáo về thông báo, bạn có thể đặt một phạm vi ngày cho dữ liệu được hiển thị, đồng thời có thể xuất dữ liệu sang tệp CSV. Bạn cũng có thể lọc theo các tiêu chí sau:

  • Nền tảng (iOS hoặc Android)
  • Ứng dụng
  • Nhãn phân tích tuỳ chỉnh

Thêm nhãn phân tích vào thông báo

Việc gắn nhãn cho thư rất hữu ích cho việc phân tích tuỳ chỉnh, cho phép bạn lọc số liệu thống kê về việc gửi theo nhãn hoặc nhóm nhãn. Bạn có thể thêm nhãn vào mọi tin nhắn được gửi qua HTTP v1 API bằng cách đặt trường fcmOptions.analyticsLabel trong đối tượng message hoặc trong các trường AndroidFcmOptions hoặc ApnsFcmOptions dành riêng cho nền tảng.

Nhãn phân tích là các chuỗi văn bản có định dạng ^[a-zA-Z0-9-_.~%]{1,50}$. Nhãn có thể bao gồm chữ cái viết thường và viết hoa, chữ số và các ký hiệu sau:

  • -
  • ~
  • %

Độ dài tối đa là 50 ký tự. Bạn có thể chỉ định tối đa 100 nhãn riêng biệt mỗi ngày; những thư có nhãn được thêm ngoài giới hạn đó sẽ không được báo cáo.

Trong thẻ FirebaseBáo cáo của tính năng nhắn tin qua bảng điều khiển , bạn có thể tìm kiếm danh sách tất cả các nhãn hiện có và áp dụng từng nhãn hoặc kết hợp các nhãn để lọc số liệu thống kê được hiển thị.

Dữ liệu phân phối tổng hợp bằng FCM Data API

API Dữ liệu của Giải pháp gửi thông báo qua đám mây của Firebase cho phép bạn truy xuất thông tin có thể giúp bạn nắm được kết quả của các yêu cầu gửi thông báo nhắm đến ứng dụng Android. API này cung cấp dữ liệu tổng hợp trên tất cả các thiết bị Android đã bật tính năng thu thập dữ liệu trong một dự án. Báo cáo này bao gồm thông tin chi tiết về tỷ lệ phần trăm tin nhắn được gửi mà không bị trễ, cũng như số lượng tin nhắn bị trễ hoặc bị bỏ qua trong Tầng truyền tải Android. Việc đánh giá dữ liệu này có thể cho thấy các xu hướng chung trong việc gửi tin nhắn và giúp bạn tìm ra những cách hiệu quả để cải thiện hiệu suất của các yêu cầu gửi. Hãy xem Dòng thời gian dữ liệu tổng hợp để biết thông tin về phạm vi ngày có sẵn trong báo cáo.

API này cung cấp tất cả dữ liệu có sẵn cho một ứng dụng nhất định. Xem tài liệu tham khảo về API.

Dữ liệu được chia nhỏ như thế nào?

Dữ liệu phân phối được chia nhỏ theo ứng dụng, ngày và nhãn phân tích. Một lệnh gọi đến API sẽ trả về dữ liệu cho mọi tổ hợp ngày, ứng dụng và nhãn phân tích. Ví dụ: một đối tượng JSON androidDeliveryData duy nhất sẽ có dạng như sau:

 {
  "appId": "1:23456789:android:a93a5mb1234efe56",
  "date": {
    "year": 2021,
    "month": 1,
    "day": 1
  },
  "analyticsLabel": "foo",
  "data": {
    "countMessagesAccepted": "314159",
    "messageOutcomePercents": {
      "delivered": 71,
      "pending": 15
    },
   "deliveryPerformancePercents": {
      "deliveredNoDelay": 45,
      "delayedDeviceOffline": 11
    }
  }

Cách diễn giải các chỉ số

Dữ liệu phân phối cho biết tỷ lệ phần trăm số thư phù hợp với từng chỉ số sau đây. Có thể một thông báo duy nhất phù hợp với nhiều chỉ số. Do những hạn chế trong cách chúng tôi thu thập dữ liệu và mức độ chi tiết mà chúng tôi tổng hợp các chỉ số, một số kết quả của tin nhắn hoàn toàn không được thể hiện trong các chỉ số, vì vậy, tổng các tỷ lệ phần trăm dưới đây sẽ không bằng 100%.

Số lượng tin nhắn được chấp nhận

Số lượng duy nhất có trong tập dữ liệu là số lượng thông báo mà FCM đã chấp nhận để gửi đến các thiết bị Android. Tất cả tỷ lệ phần trăm đều sử dụng giá trị này làm mẫu số. Xin lưu ý rằng số lượng này sẽ không bao gồm những thông báo nhắm đến người dùng đã tắt tính năng thu thập thông tin sử dụng và chẩn đoán trên thiết bị của họ.

Tỷ lệ phần trăm kết quả của tin nhắn

Các trường có trong đối tượng MessageOutcomePercents cung cấp thông tin về kết quả của các yêu cầu thông báo. Tất cả các danh mục đều loại trừ lẫn nhau. Công cụ này có thể trả lời các câu hỏi như "Tin nhắn của tôi có được gửi không?" và "Điều gì khiến tin nhắn bị loại bỏ?"

Ví dụ: giá trị cao cho trường droppedTooManyPendingMessages có thể báo hiệu rằng các phiên bản ứng dụng đang nhận được số lượng thông báo không thu gọn vượt quá giới hạn 100 thông báo đang chờ xử lý của FCM. Để giảm thiểu vấn đề này, hãy đảm bảo ứng dụng của bạn xử lý các lệnh gọi đến onDeletedMessages và cân nhắc gửi các thông báo có thể thu gọn. Tương tự, tỷ lệ droppedDeviceInactive cao có thể là tín hiệu cho thấy bạn cần cập nhật mã thông báo đăng ký trên máy chủ, xoá mã thông báo không còn hiệu lực và huỷ đăng ký các mã thông báo đó khỏi các chủ đề. Hãy xem phần Quản lý mã thông báo đăng ký FCM để biết các phương pháp hay nhất trong lĩnh vực này.

Tỷ lệ phần trăm hiệu suất phân phối

Các trường trong đối tượng DeliveryPerformancePercents cung cấp thông tin về những thông báo đã được gửi thành công. Công cụ này có thể trả lời các câu hỏi như "Tin nhắn của tôi có bị trễ không?" và "Tại sao tin nhắn bị trễ?" Ví dụ: giá trị cao cho delayedMessageThrottled sẽ cho biết rõ rằng bạn đang vượt quá giới hạn tối đa cho mỗi thiết bị và bạn nên điều chỉnh tốc độ gửi thông báo.

Tỷ lệ phần trăm thông tin chi tiết về tin nhắn

Đối tượng này cung cấp thêm thông tin về tất cả các lần gửi tin nhắn. Trường priorityLowered biểu thị tỷ lệ phần trăm số thông báo được chấp nhận có mức độ ưu tiên giảm từ HIGH xuống NORMAL. Nếu giá trị này cao, hãy thử gửi ít thông báo có mức độ ưu tiên cao hơn hoặc đảm bảo rằng bạn luôn hiển thị thông báo khi gửi thông báo có mức độ ưu tiên cao. Hãy xem tài liệu của chúng tôi về mức độ ưu tiên của thông báo để biết thêm thông tin

Dữ liệu này khác với dữ liệu được xuất sang BigQuery như thế nào?

Tính năng xuất dữ liệu sang BigQuery cung cấp nhật ký thông báo riêng lẻ về việc FCM backend chấp nhận thông báo và việc SDK gửi thông báo trên thiết bị (Bước 2 và 4 của Cấu trúc FCM). Dữ liệu này hữu ích trong việc đảm bảo từng thông báo được chấp nhận và gửi đi. Đọc thêm về tính năng xuất dữ liệu BigQuery trong phần tiếp theo.

Ngược lại, Firebase Cloud Messaging Data API cung cấp thông tin chi tiết tổng hợp về những gì xảy ra cụ thể trong Lớp truyền tải Android (hoặc Bước 3 của Cấu trúc FCM). Dữ liệu này cung cấp thông tin chi tiết về việc gửi thông báo từ các máy chủ phụ trợ FCM đến Android SDK. Điều này đặc biệt hữu ích khi cho thấy xu hướng về lý do khiến thông báo bị trễ hoặc bị loại bỏ trong quá trình truyền tải này.

Trong một số trường hợp, có thể hai tập dữ liệu không khớp chính xác do những lý do sau:

  • Các chỉ số tổng hợp chỉ lấy mẫu một phần trong tổng số thư
  • Các chỉ số tổng hợp được làm tròn
  • Chúng tôi không trình bày các chỉ số dưới ngưỡng quyền riêng tư
  • Một phần kết quả của thông báo bị thiếu do các hoạt động tối ưu hoá cách chúng tôi quản lý lưu lượng truy cập lớn.

Các giới hạn của API

Dòng thời gian tổng hợp dữ liệu

API này sẽ trả về dữ liệu trong 7 ngày trước đó; tuy nhiên, dữ liệu do API này trả về sẽ bị trễ tối đa 5 ngày. Ví dụ: vào ngày 20 tháng 1, dữ liệu cho khoảng thời gian từ ngày 9 tháng 1 đến ngày 15 tháng 1 sẽ có sẵn, nhưng không có dữ liệu cho ngày 16 tháng 1 trở đi. Ngoài ra, dữ liệu được cung cấp trong khả năng tốt nhất có thể. Trong trường hợp xảy ra sự cố mất dữ liệu, FCM sẽ cố gắng khắc phục và sẽ không điền lại dữ liệu sau khi vấn đề được khắc phục. Trong trường hợp ngừng hoạt động trên diện rộng, dữ liệu có thể không có sẵn trong một tuần hoặc lâu hơn.

Mức độ phù hợp của dữ liệu

Các chỉ số do Firebase Cloud Messaging Data API cung cấp nhằm mục đích cung cấp thông tin chi tiết về các xu hướng chung của việc gửi thông báo. Tuy nhiên, các thông báo này không bao gồm 100% tất cả các trường hợp về thông báo. Các trường hợp sau đây là những kết quả đã biết nhưng không được phản ánh trong các chỉ số.

Tin nhắn đã hết hạn

Nếu Thời gian tồn tại (TTL) hết hạn sau khi kết thúc ngày ghi nhật ký đã cho, thì thông báo sẽ không được tính là droppedTtlExpired vào ngày này.

Tin nhắn gửi đến thiết bị không hoạt động

Tin nhắn được gửi đến các thiết bị không hoạt động có thể xuất hiện hoặc không xuất hiện trong tập dữ liệu, tuỳ thuộc vào đường dẫn dữ liệu mà tin nhắn đó đi qua. Điều này có thể dẫn đến việc tính sai trong các trường droppedDeviceInactivepending.

Thông báo cho các thiết bị có một số lựa chọn ưu tiên của người dùng

Những người dùng đã tắt chế độ thu thập thông tin sử dụng và thông tin chẩn đoán trên thiết bị của họ sẽ không được tính tin nhắn vào số liệu của chúng tôi, theo đúng lựa chọn ưu tiên của họ.

Làm tròn và mức tối thiểu

FCM cố ý làm tròn và loại trừ những số liệu thống kê có số lượng không đủ lớn.

Xuất dữ liệu BigQuery

Bạn có thể xuất dữ liệu tin nhắn vào BigQuery để phân tích thêm. BigQuery cho phép bạn phân tích dữ liệu bằng BigQuery SQL, xuất dữ liệu sang một nhà cung cấp dịch vụ đám mây khác hoặc sử dụng dữ liệu cho các mô hình học máy tuỳ chỉnh của bạn. Hoạt động xuất sang BigQuery bao gồm tất cả dữ liệu có sẵn cho các thông báo, bất kể loại thông báo hay việc thông báo được gửi qua API hay Trình soạn thông báo.

Đối với những thông báo được gửi đến các thiết bị có phiên bản SDK tối thiểu FCM sau đây, bạn có thêm lựa chọn để bật tính năng xuất dữ liệu về việc gửi thông báo cho ứng dụng của mình:

  • Android 20.1.0 trở lên.
  • iOS 8.6.0 trở lên
  • Firebase Web SDK phiên bản 9.0.0 trở lên

Xem thông tin chi tiết bên dưới về cách bật tính năng xuất dữ liệu cho AndroidiOS.

Để bắt đầu, hãy liên kết dự án của bạn với BigQuery:

  1. Chọn một trong các tùy chọn sau:

    • Mở trình soạn thảo Thông báo, sau đó nhấp vào Truy cập vào BigQuery ở cuối trang.

    • Trên trang Tích hợp trong bảng điều khiển Firebase, hãy nhấp vào Liên kết trong thẻ BigQuery.

      Trang này hiển thị các lựa chọn xuất FCM cho tất cả các ứng dụng có bật FCM trong dự án.

  2. Làm theo hướng dẫn trên màn hình để bật BigQuery.

Hãy tham khảo bài viết Liên kết Firebase với BigQuery để biết thêm thông tin.

Khi bạn bật chế độ xuất BigQuery cho Cloud Messaging:

  • Firebase xuất dữ liệu của bạn sang BigQuery. Xin lưu ý rằng quá trình truyền dữ liệu ban đầu để xuất có thể mất đến 48 giờ để hoàn tất.

  • Sau khi tạo tập dữ liệu, bạn sẽ không thể thay đổi vị trí này nữa. Tuy nhiên, bạn có thể sao chép tập dữ liệu sang một vị trí khác hoặc tự di chuyển (tạo lại) tập dữ liệu ở một vị trí khác. Để tìm hiểu thêm, hãy xem bài viết Thay đổi vị trí của tập dữ liệu.

  • Firebase thiết lập các quy trình đồng bộ hoá dữ liệu thường xuyên từ dự án Firebase của bạn sang BigQuery. Các hoạt động xuất dữ liệu hằng ngày này bắt đầu lúc 4:00 sáng theo giờ Thái Bình Dương và thường kết thúc trong vòng 24 giờ.

  • Theo mặc định, mọi ứng dụng trong dự án của bạn đều được liên kết với BigQuery và mọi ứng dụng mà bạn thêm vào dự án sau thời điểm liên kết cũng sẽ tự động liên kết với BigQuery. Bạn có thể quản lý những ứng dụng gửi dữ liệu.

Để huỷ kích hoạt tính năng xuất BigQuery, hãy huỷ liên kết dự án trong bảng điều khiển Firebase.

Bật tính năng xuất dữ liệu về việc gửi tin nhắn

Các thiết bị iOS có SDK FCM 8.6.0 trở lên có thể bật tính năng xuất dữ liệu gửi tin nhắn của ứng dụng. FCM hỗ trợ xuất dữ liệu cho cả thông báo cảnh báo và thông báo ở chế độ nền. Trước khi bật các lựa chọn này, trước tiên, bạn phải tạo mối liên kết FCM-BigQuery cho dự án của mình như mô tả trong phần Xuất dữ liệu BigQuery.

Bật tính năng xuất dữ liệu giao hàng cho thông báo cảnh báo

Vì chỉ thông báo cảnh báo mới có thể kích hoạt các tiện ích ứng dụng dịch vụ thông báo, nên bạn phải thêm một tiện ích dịch vụ thông báo vào ứng dụng của mình và gọi API này bên trong một tiện ích dịch vụ để bật tính năng theo dõi thông báo hiển thị. Xem tài liệu của Apple về Sửa đổi nội dung trong thông báo mới gửi.

Bạn phải thực hiện lệnh gọi sau cho mọi thông báo nhận được:

Swift

// For alert notifications, call the API inside the service extension:
class NotificationService: UNNotificationServiceExtension {
  override func didReceive(_ request: UNNotificationRequest, withContentHandler contentHandler: @escaping (UNNotificationContent) -> Void) {
  Messaging.extensionHelper()
      .exportDeliveryMetricsToBigQuery(withMessageInfo:request.content.userInfo)
  }
}

Objective-C

// For alert notifications, call the API inside the service extension:
@implementation NotificationService
- (void)didReceiveNotificationRequest:(UNNotificationRequest *)request
                   withContentHandler:(void (^)(UNNotificationContent *_Nonnull))contentHandler {
  [[FIRMessaging extensionHelper] exportDeliveryMetricsToBigQueryWithMessageInfo:request.content.userInfo];
}
@end

Nếu bạn đang tạo yêu cầu gửi bằng API HTTP phiên bản 1, hãy nhớ chỉ định mutable-content = 1 trong đối tượng tải trọng.

Bật tính năng xuất dữ liệu phân phối cho thông báo trong nền

Đối với các thông báo ở chế độ nền nhận được khi ứng dụng đang chạy ở nền trước hoặc nền sau, bạn có thể gọi API xuất dữ liệu bên trong trình xử lý thông báo dữ liệu của ứng dụng chính. Bạn phải thực hiện lệnh gọi này cho mọi thông báo nhận được:

Swift

// For background notifications, call the API inside the UIApplicationDelegate or NSApplicationDelegate method:
func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable : Any]) {
  Messaging.extensionHelper().exportDeliveryMetricsToBigQuery(withMessageInfo:userInfo)
}

Objective-C

// For background notifications, call the API inside the UIApplicationDelegate or NSApplicationDelegate method:
@implementation AppDelegate
- (void)application:(UIApplication *)application
    didReceiveRemoteNotification:(NSDictionary *)userInfo
          fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler {
  [[FIRMessaging extensionHelper] exportDeliveryMetricsToBigQueryWithMessageInfo:userInfo];
}
@end

Dữ liệu nào được xuất sang BigQuery?

Xin lưu ý rằng việc nhắm đến các mã thông báo cũ hoặc lượt đăng ký không hoạt động có thể làm tăng một số số liệu thống kê này.

Giản đồ của bảng được xuất là:

_PARTITIONTIME DẤU THỜI GIAN Cột giả này chứa dấu thời gian cho thời điểm bắt đầu ngày (theo giờ UTC) mà dữ liệu được tải. Đối với phân vùng YYYYMMDD, cột giả này chứa giá trị TIMESTAMP('YYYY-MM-DD').
event_timestamp DẤU THỜI GIAN Dấu thời gian của sự kiện do máy chủ ghi lại
project_number INTEGER Số dự án xác định dự án đã gửi thông báo
message_id STRING Mã nhận dạng thư xác định một thư. Được tạo từ Mã ứng dụng và dấu thời gian, mã thông báo có thể không phải là mã nhận dạng riêng biệt trên toàn cầu trong một số trường hợp.
instance_id STRING Mã nhận dạng duy nhất của ứng dụng mà thông báo được gửi đến (nếu có). Đây có thể là mã nhận dạng phiên bản hoặc mã nhận dạng lượt cài đặt Firebase.
message_type STRING Loại thông báo. Có thể là Thông báo hoặc Thông báo dữ liệu. Chủ đề được dùng để xác định thông báo ban đầu cho một chủ đề hoặc chiến dịch gửi; các thông báo tiếp theo là thông báo hoặc thông báo dữ liệu.
sdk_platform STRING Nền tảng của ứng dụng nhận
app_name STRING Tên gói cho ứng dụng Android hoặc mã nhận dạng gói cho ứng dụng iOS
collapse_key STRING Khoá thu gọn xác định một nhóm các thông báo có thể thu gọn. Khi một thiết bị không kết nối, chỉ thông báo cuối cùng có một khoá thu gọn nhất định được xếp hàng để gửi sau cùng
tuyển sinh ưu tiên INTEGER Mức độ ưu tiên của thông báo. Các giá trị hợp lệ là "normal" (bình thường) và "high" (cao). Trên iOS, các giá trị này tương ứng với mức độ ưu tiên 5 và 10 của APNs
ttl INTEGER Tham số này chỉ định khoảng thời gian (tính bằng giây) mà thông báo sẽ được lưu giữ trong bộ nhớ FCM nếu thiết bị không có kết nối mạng
chủ đề STRING Tên của chủ đề mà một thông báo đã được gửi đến (khi có thể)
bulk_id INTEGER Mã nhận dạng gửi hàng loạt xác định một nhóm thư liên quan, chẳng hạn như một lần gửi cụ thể đến một chủ đề
sự kiện STRING Loại sự kiện. Các giá trị có thể là:
  • MESSAGE_ACCEPTED: máy chủ FCM đã nhận được thông báo và yêu cầu hợp lệ;
  • MESSAGE_DELIVERED: thông báo đã được gửi đến FCM SDK của ứng dụng trên thiết bị. Theo mặc định, trường này không được truyền. Để bật, hãy làm theo hướng dẫn trong setDeliveryMetricsExportToBigQuery(boolean).
  • MISSING_REGISTRATIONS: yêu cầu bị từ chối do thiếu thông tin đăng ký;
  • UNAUTHORIZED_REGISTRATION: thư bị từ chối vì người gửi không được phép gửi đến địa chỉ đăng ký;
  • MESSAGE_RECEIVED_INTERNAL_ERROR: đã xảy ra một lỗi không xác định khi xử lý yêu cầu về thông báo;
  • MISMATCH_SENDER_ID: yêu cầu gửi tin nhắn bị từ chối do mã nhận dạng người gửi gửi tin nhắn không khớp với mã nhận dạng được khai báo cho điểm cuối;
  • QUOTA_EXCEEDED: yêu cầu gửi tin nhắn bị từ chối do không đủ hạn mức;
  • INVALID_REGISTRATION: yêu cầu gửi tin nhắn đã bị từ chối do đăng ký không hợp lệ;
  • INVALID_PACKAGE_NAME: yêu cầu gửi tin nhắn đã bị từ chối do tên gói không hợp lệ;
  • INVALID_APNS_CREDENTIAL: yêu cầu gửi tin nhắn bị từ chối do chứng chỉ APNS không hợp lệ;
  • INVALID_PARAMETERS: yêu cầu gửi tin nhắn đã bị từ chối do các tham số không hợp lệ;
  • PAYLOAD_TOO_LARGE: yêu cầu gửi tin nhắn bị từ chối do tải trọng lớn hơn giới hạn;
  • AUTHENTICATION_ERROR: yêu cầu gửi tin nhắn bị từ chối do lỗi xác thực (hãy kiểm tra Khoá API dùng để gửi tin nhắn);
  • INVALID_TTL: yêu cầu gửi tin nhắn đã bị từ chối do TTL không hợp lệ.
analytics_label STRING Với HTTP API phiên bản 1, bạn có thể đặt nhãn phân tích khi gửi thông báo để đánh dấu thông báo cho mục đích phân tích

Bạn có thể làm gì với dữ liệu đã xuất?

Các phần sau đây cung cấp ví dụ về các truy vấn mà bạn có thể chạy trong BigQuery dựa trên dữ liệu FCM đã xuất.

Đếm số thư đã gửi theo ứng dụng

SELECT app_name, COUNT(1)
FROM `project ID.firebase_messaging.data`
WHERE
  _PARTITIONTIME = TIMESTAMP('date as YYYY-MM-DD')
  AND event = 'MESSAGE_ACCEPTED'
  AND message_id != ''
GROUP BY 1;

Đếm số lượng phiên bản ứng dụng riêng biệt mà thông báo nhắm đến

SELECT COUNT(DISTINCT instance_id)
FROM `project ID.firebase_messaging.data`
WHERE
  _PARTITIONTIME = TIMESTAMP('date as YYYY-MM-DD')
  AND event = 'MESSAGE_ACCEPTED';

Số lượng thông báo đã gửi

SELECT COUNT(1)
FROM `project ID.firebase_messaging.data`
WHERE
  _PARTITIONTIME = TIMESTAMP('date as YYYY-MM-DD')
  AND event = 'MESSAGE_ACCEPTED'
  AND message_type = 'DISPLAY_NOTIFICATION';

Đếm số lượng thông báo dữ liệu đã gửi

SELECT COUNT(1)
FROM `project ID.firebase_messaging.data`
WHERE
  _PARTITIONTIME = TIMESTAMP('date as YYYY-MM-DD')
  AND event = 'MESSAGE_ACCEPTED'
  AND message_type = 'DATA_MESSAGE';

Đếm số lượng tin nhắn được gửi đến một chủ đề hoặc chiến dịch

SELECT COUNT(1)
FROM `project ID.firebase_messaging.data`
WHERE
  _PARTITIONTIME = TIMESTAMP('date as YYYY-MM-DD')
  AND event = 'MESSAGE_ACCEPTED'
  AND bulk_id = your bulk id AND message_id != '';

Để theo dõi các sự kiện cho một thông báo được gửi đến một chủ đề cụ thể, hãy sửa đổi truy vấn này để thay thế AND message_id != '' bằng AND message_id = <your message id>;.

Tính toán thời gian phát sóng cho một chủ đề hoặc chiến dịch nhất định

Thời gian bắt đầu fanout là khi yêu cầu ban đầu được nhận và thời gian kết thúc là thời gian tạo tin nhắn riêng lẻ cuối cùng nhắm đến một phiên bản duy nhất.

SELECT
  TIMESTAMP_DIFF(
    end_timestamp, start_timestamp, MILLISECOND
  ) AS fanout_duration_ms,
  end_timestamp,
  start_timestamp
FROM (
    SELECT MAX(event_timestamp) AS end_timestamp
    FROM `project ID.firebase_messaging.data`
    WHERE
      _PARTITIONTIME = TIMESTAMP('date as YYYY-MM-DD')
      AND event = 'MESSAGE_ACCEPTED'
      AND bulk_id = your bulk id
  ) sent
  CROSS JOIN (
    SELECT event_timestamp AS start_timestamp
    FROM `project ID.firebase_messaging.data`
    WHERE
      _PARTITIONTIME = TIMESTAMP('date as YYYY-MM-DD')
      AND event = 'MESSAGE_ACCEPTED'
      AND bulk_id = your bulk id
      AND message_type = 'TOPIC'
  ) initial_message;

Tỷ lệ phần trăm số thư đã gửi

SELECT
  messages_sent,
  messages_delivered,
  messages_delivered / messages_sent * 100 AS percent_delivered
FROM (
    SELECT COUNT(DISTINCT CONCAT(message_id, instance_id)) AS messages_sent
    FROM `project ID.firebase_messaging.data`
    WHERE
      _PARTITIONTIME = TIMESTAMP('date as YYYY-MM-DD')
      AND event = 'MESSAGE_ACCEPTED'
  ) sent
  CROSS JOIN (
    SELECT COUNT(DISTINCT CONCAT(message_id, instance_id)) AS messages_delivered
    FROM `project ID.firebase_messaging.data`
    WHERE
      _PARTITIONTIME = TIMESTAMP('date as YYYY-MM-DD')
      AND (event = 'MESSAGE_DELIVERED'
      AND message_id
      IN (
        SELECT message_id FROM `project ID.firebase_messaging.data`
        WHERE
          _PARTITIONTIME = TIMESTAMP('date as YYYY-MM-DD')
          AND event = 'MESSAGE_ACCEPTED'
        GROUP BY 1
      )
  ) delivered;

Theo dõi tất cả sự kiện cho một mã nhận dạng thông báo và mã nhận dạng phiên bản nhất định

SELECT *
FROM `project ID.firebase_messaging.data`
WHERE
    _PARTITIONTIME = TIMESTAMP('date as YYYY-MM-DD')
    AND message_id = 'your message id'
    AND instance_id = 'your instance id'
ORDER BY event_timestamp;

Tính toán độ trễ cho một mã thông báo và mã thực thể nhất định

SELECT
  TIMESTAMP_DIFF(
    MAX(delivered_time), MIN(accepted_time), MILLISECOND
  ) AS latency_ms
FROM (
    SELECT event_timestamp AS accepted_time
    FROM `project ID.firebase_messaging.data`
    WHERE
      _PARTITIONTIME = TIMESTAMP('date as YYYY-MM-DD')
      AND message_id = 'your message id'
      AND instance_id = 'your instance id'
      AND event = 'MESSAGE_ACCEPTED'
  ) sent
  CROSS JOIN (
    SELECT event_timestamp AS delivered_time
    FROM `project ID.firebase_messaging.data`
    WHERE
      _PARTITIONTIME = TIMESTAMP('date as YYYY-MM-DD') AND
      message_id = 'your message id' AND instance_id = 'your instance id'
      AND (event = 'MESSAGE_DELIVERED'
  ) delivered;