Catch up on everything announced at Firebase Summit, and learn how Firebase can help you accelerate app development and run your app with confidence. Learn More

Hiểu cách gửi tin nhắn

Sử dụng bộ sưu tập để sắp xếp ngăn nắp các trang Lưu và phân loại nội dung dựa trên lựa chọn ưu tiên của bạn.

FCM cung cấp ba bộ công cụ để giúp bạn hiểu sâu hơn về việc truyền tải thông điệp:

  • Báo cáo gửi tin nhắn trên bảng điều khiển Firebase
  • Chỉ số phân phối Android SDK tổng hợp từ API dữ liệu nhắn tin qua đám mây của Firebase
  • Xuất dữ liệu toàn diện sang Google BigQuery

Tất cả các công cụ báo cáo được mô tả trong trang này đều yêu cầu Google Analytics để hoạt động. Nếu Google Analytics không được bật cho dự án của bạn, bạn có thể thiết lập nó trong tab tích hợp của cài đặt dự án Firebase của bạn.

Hãy nhớ 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ễ đến 24 giờ do nhiều dữ liệu phân tích.

Báo cáo gửi tin nhắn

Trong tab Báo cáo trong bảng điều khiển Firebase, bạn có thể xem dữ liệu sau cho các tin nhắn được gửi tới SDK FCM nền tảng Android hoặc Apple, bao gồm cả những tin nhắn được gửi qua trình tổng hợp Thông báo và API FCM:

  • Gửi - Tin nhắn dữ liệu hoặc tin nhắn thông báo đã được xếp hàng để gửi hoặc đã được chuyển thành công đến dịch vụ của bên thứ ba như APN để gửi. Xem thời gian tồn tại của một tin nhắn để biết thêm thông tin.
  • Đã nhận (chỉ khả dụng trên thiết bị Android) - Ứng dụng đã nhận được tin nhắn dữ liệu hoặc tin nhắn thông báo. Dữ liệu này khả dụng khi thiết bị Android nhận được cài đặt FCM SDK 18.0.1 trở lên.
  • Số lần hiển thị (chỉ có sẵn cho tin nhắn thông báo trên thiết bị Android) - Thông báo hiển thị đã được hiển thị trên thiết bị trong khi ứng dụng ở chế độ nền.
  • Mở - Người dùng đã mở tin nhắn thông báo. Chỉ báo cáo cho các 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ư có khối lượng thông báo và tất cả cá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 Thêm nhãn phân tích vào thư .

Khi xem báo cáo tin nhắn, bạn có thể đặt phạm vi ngày cho dữ liệu được hiển thị, với tùy chọn xuất sang 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 tùy chỉnh

Thêm nhãn phân tích vào thư

Việc gắn nhãn thư rất hữu ích cho phân tích tùy chỉnh, cho phép bạn lọc thống kê phân phối theo nhãn hoặc bộ nhãn. Bạn có thể thêm nhãn vào bất kỳ thư nào được gửi qua API HTTP v1 bằng cách đặt trường fcmOptions.analyticsLabel trong đối tượng thư 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ữ thường và chữ hoa, 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 duy nhất mỗi ngày; tin nhắn có nhãn được thêm vượt quá giới hạn đó sẽ không được báo cáo.

Trong tab Báo cáo nhắn tin trên bảng điều khiển Firebase, 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 chúng đơn lẻ hoặc kết hợp để lọc các thống kê được hiển thị.

Dữ liệu phân phối tổng hợp qua API dữ liệu FCM

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

API 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 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 tháng và nhãn phân tích . Lệnh gọi tới API sẽ trả về dữ liệu cho mọi tổ hợp nhãn ngày tháng, ứng dụng và phân tích. Ví dụ: một đối tượng JSON androidDeliveryData sẽ trông giố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 số liệu

Dữ liệu phân phối phác thảo tỷ lệ tin nhắn phù hợp với từng chỉ số sau. Có thể một thông báo phù hợp với nhiều số liệu. 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ả thông báo hoàn toàn không được trình bày trong các chỉ số, vì vậy các tỷ lệ phần trăm bên dưới sẽ không tổng hợp thành 100%.

Đếm 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 tin nhắn đã được FCM chấp nhận để gửi đến thiết bị Android. Tất cả các tỷ lệ phần trăm sử dụng giá trị này làm mẫu số. Hãy nhớ rằng số lượng này sẽ không bao gồm các tin nhắn được nhắm mục tiêu đến những 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ọ.

Phần trăm kết quả 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. Các danh mục đều loại trừ lẫn nhau. Nó có thể trả lời các câu hỏi như "Tin nhắn của tôi có đang được gửi không?" và "Điều gì khiến thư bị 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 khối lượng tin nhắn không thể thu gọn vượt quá giới hạn 100 tin nhắn đang chờ xử lý của FCM. Để giảm thiểu điều này, hãy đảm bảo ứng dụng của bạn xử lý các cuộc gọi đến onDeletedMessages và cân nhắc gửi tin nhắn có thể thu gọn. Tương tự, tỷ lệ phần trăm cao cho droppedDeviceInactive có thể là một tín hiệu để cập nhật mã thông báo đăng ký trên máy chủ của bạn, xóa mã thông báo cũ và hủy đăng ký chúng khỏi các chủ đề. Xem 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.

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ề các thư đã được gửi thành công. Nó có thể trả lời các câu hỏi như "Tin nhắn của tôi có bị trì hoãn không?" và "Tại sao tin nhắn bị trì hoãn?" Ví dụ: giá trị cao cho delayedMessageThrottled sẽ chỉ rõ rằng bạn đang vượt quá giới hạn tối đa cho mỗi thiết bị và nên điều chỉnh tốc độ gửi tin nhắn.

Thông báo Insight Percentagess

Đối tượng này cung cấp thông tin bổ sung về tất cả các tin nhắn được gửi. Trường priorityLowered biểu thị phần trăm thư đượ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 tin nhắn 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 tin nhắn có mức độ ưu tiên cao được gửi đi. Xem tài liệu của chúng tôi về mức độ ưu tiên của tin nhắn để 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?

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

Ngược lại, API dữ liệu nhắn tin qua đám mây của Firebase 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 của Android (hoặc Bước 3 của Kiến trúc FCM ). Dữ liệu này đặc biệt cung cấp thông tin chi tiết về việc phân phối thông báo từ các phần mềm phụ trợ FCM tới Android SDK. Nó đặc biệt hữu ích để hiển thị các xu hướng tại sao tin nhắn bị trì hoãn hoặc bị rơi trong quá trình vận chuyển này.

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

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

Hạn chế của API

Lịch trình dữ liệu tổng hợp

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

Bảo hiểm dữ liệu

Các chỉ số được cung cấp bởi API dữ liệu nhắn tin qua đám mây của Firebase nhằm cung cấp thông tin chi tiết về các xu hướng gửi tin nhắn rộng rãi. Tuy nhiên, chúng không cung cấp phạm vi bảo hiểm 100% cho tất cả các kịch bản tin nhắn. Các tình huống sau đây là các kết quả đã biết không được phản ánh trong các chỉ số.

Tin nhắn đã thu gọn

Thư đã được thu gọn bởi một thư khác không xuất hiện trong tập dữ liệu.

Tin nhắn đến các 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ể hiển thị hoặc không hiển thị trong tập dữ liệu tùy thuộc vào đường dẫn dữ liệu mà chúng sử dụng. Điều này có thể dẫn đến một số tính toán sai trong các trường droppedDeviceInactivepending .

Tin nhắn đến các thiết bị có tùy chọn người dùng nhất định

Những 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ọ sẽ không đưa tin nhắn của họ vào bộ đếm của chúng tôi, theo sở thích của họ.

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

FCM cố tình làm tròn và loại trừ số lượng khi khối lượng không đủ lớn.

Xuất dữ liệu BigQuery

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

Đối với các tin nhắn được gửi đến các thiết bị có phiên bản tối thiểu FCM SDK sau đây, bạn có tùy chọn bổ sung để cho phép xuất dữ liệu gửi tin nhắn 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 9.0.0 trở lên

Xem bên dưới để biết chi tiết về cách bật 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 tổng hợp Thông báo , sau đó nhấp vào Truy cập BigQuery ở cuối trang.

    • Từ 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 tùy chọn xuất FCM cho tất cả các ứng dụng hỗ trợ FCM trong dự án.

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

Tham khảo Liên kết Firebase với BigQuery để biết thêm thông tin.

Khi bạn bật tính năng xuất BigQuery cho Nhắn tin qua đám mây:

  • Firebase xuất dữ liệu của bạn sang BigQuery. 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 thành.

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

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

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

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

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

dành cho

Các thiết bị iOS có FCM SDK 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 nền. Trước khi bật các tùy chọn này, trước tiên bạn phải tạo liên kết FCM-BiqQuery cho dự án của mình như được mô tả trong xuất dữ liệu BigQuery .

Bật tính năng xuất dữ liệu phân phối cho các 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 tiện ích mở rộng ứng dụng dịch vụ thông báo, bạn phải thêm tiện ích mở rộng 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 tiện ích mở rộng dịch vụ để bật 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 được gửi .

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

Nhanh

// 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 xây dựng các yêu cầu gửi bằng API HTTP v1, hãy đảm bảo chỉ định mutable-content = 1 trong đối tượng payload .

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

Đối với các thông báo nền nhận được khi ứng dụng ở nền trước hoặc nền, 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. Cuộc gọi này phải được thực hiện cho mọi thông báo nhận được:

Nhanh

// 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?

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

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

_PARTITIONTIME TIMESTAMP Cột giả này chứa dấu thời gian cho đầ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 TIMESTAMP Dấu thời gian của sự kiện được máy chủ ghi lại
project_number INTEGER Số dự án xác định dự án đã gửi tin nhắn
ID tin nhắn SỢI DÂY ID tin nhắn xác định một tin nhắn. Được tạo từ ID ứng dụng và dấu thời gian, trong một số trường hợp, ID thông báo có thể không phải là duy nhất trên toàn cầu.
instance_id SỢI DÂY Id duy nhất của ứng dụng mà tin nhắn được gửi đến (khi có sẵn). Nó có thể là ID phiên bản hoặc ID cài đặt Firebase.
loại tin nhắn SỢI DÂY Loại tin nhắn. Có thể là Tin nhắn thông báo hoặc Tin nhắn dữ liệu. Chủ đề được sử dụng để xác định thông điệp ban đầu cho một chủ đề hoặc chiến dịch gửi; các tin nhắn tiếp theo là thông báo hoặc tin nhắn dữ liệu.
sdk_platform SỢI DÂY Nền tảng của ứng dụng người nhận
tên ứng dụng SỢI DÂY Tên gói cho ứng dụng Android hoặc id gói cho ứng dụng iOS
sập_ khóa SỢI DÂY Phím thu gọn xác định một nhóm thư có thể được thu gọn. Khi một thiết bị không được kết nối, chỉ tin nhắn cuối cùng có phím thu gọn nhất định mới được xếp hàng đợi để gửi cuối cùng
quyền ưu tiên INTEGER Mức độ ưu tiên của tin nhắn. Các giá trị hợp lệ là "bình thường" và "cao". Trên iOS, những thứ này tương ứng với mức độ ưu tiên 5 và 10 của APN
ttl INTEGER Tham số này chỉ định thời gian (tính bằng giây) tin nhắn sẽ được lưu trong bộ nhớ FCM nếu thiết bị ngoại tuyến
chủ đề SỢI DÂY Tên của chủ đề mà tin nhắn đã được gửi đến (nếu có)
số lượng lớn INTEGER ID hàng loạt xác định một nhóm các thư có liên quan, chẳng hạn như một thư cụ thể gửi đến một chủ đề
Sự kiện SỢI DÂY Loại sự kiện. Giá trị có thể là:
  • MESSAGE_ACCEPTED: tin nhắn đã được máy chủ FCM nhận được và yêu cầu hợp lệ;
  • MESSAGE_DELIVERED: thông báo đã được gửi tới 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 được cung cấp trong setDeliveryMetricsExportToBigQuery(boolean) .
  • MISSING_REGISTRATIONS: yêu cầu đã bị từ chối do đăng ký bị thiếu;
  • UNAUTHORIZED_REGISTRATION: thư đã bị từ chối vì người gửi không được phép gửi đăng ký;
  • MESSAGE_RECEIVED_INTERNAL_ERROR: đã xảy ra lỗi không xác định khi xử lý yêu cầu thông báo;
  • MISMATCH_SENDER_ID: yêu cầu gửi tin nhắn đã bị từ chối do không khớp giữa id người gửi gửi tin nhắn và id đượ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 ngạch;
  • 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 thông 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 (kiểm tra Khóa API được sử 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 SỢI DÂY Với API HTTP v1 , nhãn phân tích có thể được đặt khi gửi thư, để đánh dấu thư 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 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 của mình.

Đếm tin nhắn đã 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 các phiên bản ứng dụng duy nhất được nhắm mục tiêu theo tin nhắn

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

Đếm tin nhắn 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 tin nhắn 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 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 tin nhắn được gửi đến một chủ đề cụ thể, hãy sửa đổi truy vấn này để thay thế AND message_id != '' AND message_id = <your message id>; .

Tính toán thời lượng fanout 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 ra thông báo cá nhân cuối cùng nhắm mục tiêu một trường hợp 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;

Đếm phần trăm tin nhắn đã 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ả các sự kiện cho một id tin nhắn nhất định và id phiên bản

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 id tin nhắn nhất định và id phiên bản

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;