FCM cung cấp 3 bộ công cụ để giúp bạn nắm được thông tin chi tiết về việc phân phố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ố phân phối SDK Android tổng hợp từ API Dữ liệu Firebase Cloud Messaging
- Xuất dữ liệu toàn diện sang Google BigQuery
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 chưa được bật cho dự án, bạn có thể thiết lập trong thẻ tích hợp của phần cài đặt dự án Firebase.
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ễ đến 24 giờ do việc phân lô dữ liệu phân tích.
Báo cáo về hoạt động gửi thư
Trong thẻ Báo cáo trên bảng điều khiển Firebase, bạn có thể xem dữ liệu sau đây cho các thông báo gửi đến SDK FCM 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à API FCM:
- Gửi – Tin nhắn dữ liệu hoặc thông báo đã được thêm vào hàng đợi để gửi hoặc đã được chuyển thành công tới một dịch vụ bên thứ ba như APN để gửi. Xem thời gian hoạt động 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 hoặc thông báo dữ liệu. Dữ liệu này có sẵn khi thiết bị Android nhận đã cài đặt FCM SDK 18.0.1 trở lên.
- Số lượt hiển thị (chỉ dành cho thông báo trên thiết bị Android) – Thông báo hiển thị đã hiển thị trên thiết bị trong khi ứng dụng đang chạy ở chế độ nền.
- Mở – Người dùng đã mở thư thông báo. Chỉ được báo cáo đối với thông báo nhận được khi ứng dụng đang chạy ở chế độ nền.
Dữ liệu này có sẵn cho tất 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 phạm vi ngày cho dữ liệu hiển thị, cùng với tuỳ 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 tuỳ chỉnh
Thêm nhãn phân tích vào thư
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 phân phối theo nhãn hoặc nhóm nhãn. Bạn có thể thêm nhãn cho bất kỳ thông báo nào được gửi qua API HTTP v1 bằng cách đặt trường fcmOptions.analyticsLabel
trong đối tượng thông báo hoặc trong các trường AndroidFcmOptions
hoặc ApnsFcmOptions
dành riêng cho nền tảng.
Nhãn Analytics là các chuỗi văn bản ở đị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, 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; những thư có nhãn được thêm vượt quá giới hạn đó sẽ không được báo cáo.
Trong thẻ Báo cáo của tính năng 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ả 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ê hiển thị.
Dữ liệu phân phối tổng hợp thông qua API Dữ liệu FCM
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 hiểu kết quả của các yêu cầu 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ả thiết bị Android có 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 phân phối mà không bị chậm trễ cũng như số lượng tin nhắn bị chậm trễ hoặc bị loại bỏ trong Lớp 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 phân phối thư 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 thư. Hãy xem bài viết Tiến trình tổng hợp dữ liệu để 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 cụ thể. 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 theo ứng dụng, ngày và nhãn phân tích.
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
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 thông báo phù hợp với từng chỉ số sau. Một thông báo có thể 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ố, nên một số kết quả của thông báo hoàn toàn không được thể hiện trong các chỉ số, vì vậy, tổng tỷ lệ phần trăm bên dưới sẽ không bằng 100%.
Số lượng tin nhắn đã 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 để phân phố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 các thông báo được nhắm đến những người dùng đã tắt tính năng thu thập thông tin chẩn đoán và sử dụng 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 gửi tin nhắn. 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 thực thể ứng dụng đang nhận số lượng thông báo không thể 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 thông báo có thể thu gọn. Tương tự, tỷ lệ phần trăm cao cho droppedDeviceInactive
có thể là tín hiệu để cập nhật mã thông báo đăng ký trên máy chủ, xoá mã thông báo cũ và huỷ đăng ký các mã thông báo đó khỏi 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.
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ông báo đã được gửi thành công. Tính năng này có thể trả lời các câu hỏi như "Tin nhắn của tôi có bị chậm trễ không?" và "Tại sao tin nhắn bị chậm 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 trên mỗi thiết bị và bạn nên điều chỉnh tốc độ gửi tin nhắn.
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ả tin nhắn đã gửi. Trường priorityLowered
thể hiện tỷ lệ phần trăm số thông báo được chấp nhận đã giảm mức độ ưu tiên 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 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?
Tính năng xuất BigQuery cung cấp nhật ký thông báo riêng lẻ về việc phần phụ trợ FCM chấp nhận thông báo và phân phối thông báo trong SDK 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 để đảm bảo từng tin nhắn đã được chấp nhận và phân phối. Hãy đọc thêm về tính năng xuất dữ liệu BigQuery trong phần tiếp theo.
Ngược lại, API Dữ liệu của Giải pháp gửi thông báo 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 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 cụ thể về việc phân phối thông báo từ phần phụ trợ FCM đến SDK Android. Điều này đặc biệt hữu ích khi cho biết các xu hướng như tại sao thông báo bị trì hoãn hoặc bị bỏ qua trong quá trình truyền tải này.
Trong một số trường hợp, 2 tập dữ liệu này có thể không khớp chính xác do:
- Các chỉ số tổng hợp chỉ lấy mẫu một phần trong tất cả 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 biện pháp tối ưu hoá trong 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
Tiến trình tổng hợp dữ liệu
API này sẽ trả về dữ liệu trong quá khứ trong 7 ngày; 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 từ ngày 9 đến ngày 15 tháng 1 sẽ có sẵn nhưng không có dữ liệu từ ngày 16 tháng 1 trở đi. Ngoài ra, chúng tôi sẽ cố gắng cung cấp dữ liệu một cách chính xác 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 sự cố và sẽ không bổ sung dữ liệu sau khi khắc phục sự cố. Trong trường hợp ngừng hoạt động lớn hơn, dữ liệu có thể không có 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 API Dữ liệu của Giải pháp gửi thông báo qua đám mây của Firebase cung cấp nhằm cung cấp thông tin chi tiết về các xu hướng chung của việc phân phối thông báo. Tuy nhiên, các trường hợp này không bao phủ 100% tất cả các tình huống về thông báo. Các trường hợp sau đây là kết quả đã biết 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 nhật ký đã cho, thì thông báo sẽ không được tính là droppedTtlExpired
vào ngày này.
Thông báo đế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ể 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à chúng đi theo. Điều này có thể dẫn đến việc tính sai một số trong các trường droppedDeviceInactive
và pending
.
Thông báo cho các thiết bị có một số lựa chọn ưu tiên nhất định của người dùng
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 được tính vào thông báo của họ theo các lựa chọn ưu tiên của họ.
Làm tròn và giá trị tối thiểu
FCM cố ý làm tròn và loại trừ các số lượng không đủ lớn.
Xuất dữ liệu sang 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. Quá trình xuất sang BigQuery bao gồm tất cả dữ liệu có sẵn cho thông báo, bất kể loại thông báo hoặc thông báo được gửi qua API hay trình soạn thông báo.
Đối với các 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 để cho phép xuất dữ liệu 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 9.0.0 trở lên
Hãy xem bên dưới để biết thông tin chi tiết về cách bật tính năng xuất dữ liệu cho Android và iOS.
Để bắt đầu, hãy liên kết dự án của bạn với BigQuery:
Chọn một trong các tùy chọn sau:
Mở trình soạn thông báo, sau đó nhấp vào Truy cập BigQuery ở cuối trang.
Trên trang Tích hợp trong bảng điều khiển của Firebase, hãy nhấp vào Liên kết trong thẻ BigQuery.
Trang này hiển thị các tuỳ chọn xuất FCM cho tất cả ứng dụng đã bật FCM trong dự án.
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 tính năng 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ờ mới hoàn tất.
- Bạn có thể lên lịch bổ sung dữ liệu theo cách thủ công trong tối đa 30 ngày qua.
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 phần Thay đổi vị trí của tập dữ liệu.
Firebase thiết lập tính năng đồng bộ hoá thường xuyên dữ liệu của bạn từ dự án Firebase sang BigQuery. Các hoạt động xuất hằng ngày này bắt đầu lúc 4:00 AM 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 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 thư
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 phân phố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 tuỳ chọn này, trước tiên bạn phải tạo đường liên kết FCM-BiqQuery 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 phân phối 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 tiện ích ứng dụng dịch vụ thông báo, bạn phải thêm 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 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ề Cách sửa đổi nội dung trong thông báo mới được gửi đ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 v1, 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 thông báo ở chế độ nền nhận được khi ứng dụng đang chạy ở chế độ 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 mục tiêu 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ố thống kê này.
Giản đồ của bảng đã 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 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ã thông báo xác định một thông báo. Đượ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ã duy nhấ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 nhận thông báo (nếu có). Đây có thể là mã phiên bản hoặc mã cài đặt Firebase. |
message_type | STRING | Loại thông báo. Có thể là Thông báo tin nhắn hoặc Tin nhắn 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. |
nền tảng SDK | STRING | Nền tảng của ứng dụng nhận |
app_name | STRING | Tên gói đối với ứng dụng Android hoặc mã nhận dạng gói đối với ứng dụng iOS |
khoá_thu gọn | STRING | Khoá thu gọn xác định một nhóm thông báo có thể được thu gọn. Khi thiết bị chưa được kết nối, chỉ thông báo cuối cùng chứa khoá thu gọn nhất định được đưa vào hàng đợi để phân phố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". Trên iOS, những giá trị 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 khoảng thời gian (tính bằng giây) mà thông báo sẽ được lưu trữ 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à thông báo đã được gửi đến (nếu có) |
bulk_id | INTEGER | Mã nhận dạng hàng loạt xác định một nhóm thông báo có liên quan, chẳng hạn như một thông báo gửi đến một chủ đề cụ thể |
sự kiện | STRING | Loại sự kiện.
Các giá trị có thể sử dụng là:
|
analytics_label | STRING | Với API HTTP 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.
Số lượng 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 số lượng thực thể ứ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';
Đếm số 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';
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ố 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 lượng của sự kiện lan truyền cho một chủ đề hoặc chiến dịch nhất định
Thời gian bắt đầu phân phối là thời điểm nhận được yêu cầu ban đầu và thời gian kết thúc là thời điểm tạo tin nhắn riêng lẻ cuối cùng nhắm đến một thực thể.
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 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ã thư và mã thực thể 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;