Google cam kết thúc đẩy công bằng chủng tộc cho Cộng đồng người da đen. Xem cách thực hiện.
Trang này được dịch bởi Cloud Translation API.
Switch to English

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

FCM cung cấp các công cụ để giúp bạn hiểu sâu hơn về cách gửi thông điệp. Ngoài báo cáo phân phối và phân tích kênh thông báo được tích hợp trong bảng điều khiển Firebase, FCM cung cấp tính năng 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 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 dữ liệu phân tích nhiều lần.

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

Bạn có thể đánh giá xem liệu các tin nhắn bạn gửi có đến được với người dùng của mình hay không. 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 Android hoặc iOS, 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 việc 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 một nhãn để bất kỳ thông điệp được gửi qua HTTP v1 API bằng cách thiết lập fcmOptions.analyticsLabel trường trong thông điệp đối tượng, hoặc trong nền tảng cụ thể AndroidFcmOptions hoặc ApnsFcmOptions lĩnh vực.

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ị.

Phân tích kênh thông báo

Phân tích kênh Thông báo tích hợp cho bạn biết cách người dùng của bạn phản hồi với các thông báo cụ thể được gửi từ bảng điều khiển Firebase. Chế độ xem này bao gồm dữ liệu cho các thiết bị iOS và Android được nhắm mục tiêu trong các danh mục sau:

  • Thông báo đã được gửi - Thư đã đượ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. 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 các thống kê này.
  • Đã mở thông báo - Số lượng thông báo đã mở. Chỉ báo cáo cho các thông báo nhận được khi ứng dụng ở chế độ nền.
  • Số lượng người dùng duy nhất đã kích hoạt sự kiện chuyển đổi, nếu một sự kiện được xác định.

Để xem phân tích kênh Thông báo:

  1. Trong trình soạn thảo Thông báo, hãy chọn tab Thông báo .
  2. Bấm vào một tin nhắn đã hoàn thành hoặc đang xử lý trong danh sách tin nhắn. Chế độ xem mở rộng bao gồm cả phân tích Kênh được hiển thị.

Báo cáo Analytics cập nhật định kỳ, nhưng có thể có một số thời gian trễ giữa thời điểm người dùng mở thông báo và khi dữ liệu sự kiện có sẵn trong bảng điều khiển. Ngoài các báo cáo này trong tab Thông báo , bạn cũng có thể tạo kênh tùy chỉnh trong Analytics để trực quan hóa tỷ lệ hoàn thành của một chuỗi các bước trong ứng dụng của mình.

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 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 thiết bị Android có FCM SDK 20.1.0 trở lên, 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. Xem Bật tính năng xuất dữ liệu gửi tin nhắn trên Android để biết thêm thông tin.

Để 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, 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.

Sau khi bạn liên kết dự án của mình với BigQuery:

  • 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.

  • 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 hàng ngày này bắt đầu lúc 4:00 sáng theo giờ PDT và có thể mất đến mười giờ để hoàn thành.

  • 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 trên Android

Đối với các tin nhắn được gửi đến thiết bị Android có FCM SDK 20.1.0 trở lên, bạn có thể bật tính năng xuất dữ liệu gửi tin nhắn cho ứng dụng của mình. Mặc dù tính năng xuất dữ liệu này bị tắt theo mặc định ở cấp ứng dụng, nhưng bạn có thể bật tính năng này ở cấp phiên bản ứng dụng , cho phép bạn cung cấp cho người dùng cuối tùy chọn đồng ý để bạn phân tích dữ liệu gửi tin nhắn của họ (được khuyến nghị). Khi cả hai được đặt, cài đặt cấp phiên bản sẽ ghi đè cài đặt cấp ứng dụng.

Hãy nhớ rằng 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 phiên bản ứng dụng

Để cho phép xuất dữ liệu gửi thư trên cơ sở từng trường hợp ứng dụng, hãy gọi phương thức setDeliveryMetricsExportToBigQuery() của lớp FirebaseMessaging và chuyển true . Ví dụ:

 setDeliveryMetricsExportToBigQuery(true)

Sử dụng phương pháp này cùng với cài đặt cấp ứng dụng mặc định (đã tắt) để cung cấp cho người dùng tùy chọn giữ lại hoặc đồng ý xuất dữ liệu.

Để tạm ngừng hoặc vô hiệu hóa việc xuất, hãy gọi phương thức và chuyển false .

Cho phép xuất dữ liệu phân phối cho một ứng dụng

Đối với hầu hết các trường hợp, chúng tôi khuyên bạn chỉ nên bật tính năng xuất dữ liệu gửi tin nhắn ở cấp phiên bản ứng dụng và tắt tính năng này ở cấp ứng dụng. Nếu bạn muốn bật xuất ở cấp ứng dụng, hãy thêm thuộc tính sau vào đối tượng ứng dụng trong tệp kê khai ứng dụng của bạn:

<application>
  <meta-data android:name="delivery_metrics_exported_to_big_query_enabled"
      android:value="true" />
</application>

Các ứng dụng cho phép xuất trong tệp kê khai vẫn có thể cho phép người dùng chọn không tham gia bằng cách đặt giá trị false cho setDeliveryMetricsExportToBigQuery() . Việc gọi phương thức này trong thời gian chạy sẽ ghi đè giá trị cấp ứng dụng.

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 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 CHUỖI 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 CHUỖI Id phiên bản của ứng dụng mà tin nhắn được gửi đến (khi có sẵn)
loại tin nhắn CHUỖI 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 CHUỖI Nền tảng của ứng dụng người nhận
tên ứng dụng CHUỖI Tên gói cho ứng dụng Android hoặc id gói cho ứng dụng iOS
sập_ khóa CHUỖI 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
sự ư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 Thông 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
đề tài CHUỖI 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ủ đề
biến cố CHUỖI Loại sự kiện. 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 đượ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 CHUỖI Với API HTTP v1 , nhãn phân tích có thể được đặt khi gửi tin nhắn, để đánh dấu tin nhắn 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 nhận được yêu cầu ban đầu 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 phiên bản.

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;