Google is committed to advancing racial equity for Black communities. See how.
Эта страница была переведа с помощью Cloud Translation API.
Switch to English

Понимание доставки сообщений

FCM предоставляет инструменты, которые помогут вам разобраться в доставке сообщений. Помимо отчетов о доставке и анализа воронки уведомлений, встроенных в консоль Firebase, FCM обеспечивает полный экспорт данных в Google BigQuery.

Для работы всех инструментов отчетности, описанных на этой странице, требуется Google Analytics. Если Google Analytics не включен для вашего проекта, вы можете настроить его на вкладке интеграции в настройках вашего проекта Firebase.

Имейте в виду, что представление многих статистических данных на этой странице может задерживаться до 24 часов из-за пакетной обработки данных аналитики.

Отчеты о доставке сообщений

Вы можете оценить, доходят ли отправляемые сообщения вашим пользователям. На вкладке « Отчеты » в консоли Firebase вы можете просмотреть следующие данные для сообщений, отправленных в Android или iOS FCM SDK, в том числе отправленных через композитор уведомлений и API FCM:

  • Отправляет - сообщение с данными или уведомление было поставлено в очередь для доставки или было успешно передано сторонней службе, такой как APN, для доставки. См. Время жизни сообщения для получения дополнительной информации.
  • Получено (доступно только на устройствах Android): сообщение с данными или уведомление было получено приложением. Эти данные доступны, если на принимающем устройстве Android установлен FCM SDK 18.0.1 или выше.
  • Впечатления (доступно только для уведомлений на устройствах Android) - уведомление на дисплее отображалось на устройстве, пока приложение находилось в фоновом режиме.
  • Открывается - пользователь открыл уведомление. Сообщается только для уведомлений, полученных, когда приложение работает в фоновом режиме.

Эти данные доступны для всех сообщений с полезной нагрузкой уведомления и всех помеченных сообщений данных . Чтобы узнать больше о ярлыках, см. Добавление ярлыков аналитики к сообщениям .

При просмотре отчетов о сообщениях вы можете установить диапазон дат для отображаемых данных с возможностью экспорта в CSV. Вы также можете фильтровать по этим критериям:

  • Платформа (iOS или Android)
  • Приложение
  • Пользовательские ярлыки аналитики

Добавление меток аналитики к сообщениям

Пометка сообщений очень полезна для пользовательского анализа, позволяя фильтровать статистику доставки по ярлыкам или наборам ярлыков. Вы можете добавить метку к любому сообщению, отправляемому через API HTTP v1, задав поле fcmOptions.analyticsLabel в объекте сообщения или в полях AndroidFcmOptions или ApnsFcmOptions конкретной ApnsFcmOptions .

Ярлыки ^[a-zA-Z0-9-_.~%]{1,50}$ Analytics представляют собой текстовые строки в формате ^[a-zA-Z0-9-_.~%]{1,50}$ . Ярлыки могут включать прописные и строчные буквы, цифры и следующие символы:

  • -
  • ~
  • %

Максимальная длина - 50 символов. Вы можете указать до 100 уникальных этикеток в день; сообщения с метками, добавленными сверх этого лимита, не сообщаются.

На вкладке « Отчеты » консоли Firebase вы можете выполнить поиск по списку всех существующих ярлыков и применить их по отдельности или в комбинации для фильтрации отображаемой статистики.

Анализ воронки уведомлений

Встроенный анализ воронки уведомлений показывает, как ваши пользователи реагируют на определенные уведомления, отправленные из консоли Firebase. Это представление включает данные для целевых устройств iOS и Android следующих категорий:

  • Уведомления отправлены - сообщение было поставлено в очередь для доставки или было успешно передано сторонней службе, например APN, для доставки. Обратите внимание, что таргетинг на устаревшие токены или неактивные регистрации может привести к завышению этой статистики.
  • Уведомления открыты - количество открытых уведомлений. Сообщается только для уведомлений, полученных, когда приложение работает в фоновом режиме.
  • Количество уникальных пользователей, инициировавших событие конверсии, если оно определено.

Чтобы просмотреть анализ воронки уведомлений:

  1. В компоновщике уведомлений выберите вкладку Уведомления .
  2. Щелкните завершенное или текущее сообщение в списке сообщений. Отображается расширенное представление, включая анализ последовательности.

Отчеты Google Analytics периодически обновляются, но может быть некоторая задержка между открытием уведомления пользователем и появлением данных о событии в консоли. В дополнение к этим отчетам на вкладке « Уведомления » вы также можете создавать собственные последовательности в Google Analytics, чтобы визуализировать скорость выполнения последовательности шагов в вашем приложении.

Экспорт данных BigQuery

Вы можете экспортировать данные своего сообщения в BigQuery для дальнейшего анализа. BigQuery позволяет анализировать данные с помощью BigQuery SQL, экспортировать их в другой облачный провайдер или использовать данные для ваших пользовательских моделей машинного обучения. Экспорт в BigQuery включает все доступные данные для сообщений, независимо от типа сообщения и от того, отправлено ли сообщение через API или композитор уведомлений.

Для сообщений, отправленных на устройства Android с FCM SDK 20.1.0 или более поздней версии, у вас есть дополнительная возможность включить экспорт данных о доставке сообщений для вашего приложения. Дополнительные сведения см. В разделе « Включение экспорта данных о доставке сообщений на Android» .

Для начала свяжите свой проект с BigQuery:

  1. Выберите один из следующих вариантов:

    • Откройте редактор уведомлений , затем нажмите « Доступ к BigQuery» внизу страницы.

    • На странице интеграции в консоли Firebase щелкните ссылку на карточке BigQuery .

      На этой странице отображаются параметры экспорта FCM для всех приложений с поддержкой FCM в проекте.

  2. Следуйте инструкциям на экране, чтобы включить BigQuery.

Дополнительные сведения см. В разделе «Связывание Firebase с BigQuery» .

После того, как вы свяжете свой проект с BigQuery:

  • Firebase экспортирует ваши данные в BigQuery. Обратите внимание, что первоначальное распространение данных для экспорта может занять до 48 часов.

  • Firebase настраивает регулярную синхронизацию ваших данных из проекта Firebase с BigQuery. Эти ежедневные экспортные операции начинаются в 4:00 утра по тихоокеанскому времени и могут занять до десяти часов.

  • По умолчанию все приложения в вашем проекте связаны с BigQuery, а любые приложения, которые вы позже добавляете в проект, автоматически связываются с BigQuery. Вы можете управлять тем, какие приложения отправляют данные .

Чтобы отключить экспорт BigQuery, отключите свой проект в консоли Firebase.

Включить экспорт данных о доставке сообщений на Android

Для сообщений, отправляемых на устройства Android с FCM SDK 20.1.0 или более поздней версии, вы можете включить экспорт данных о доставке сообщений для своего приложения. Хотя экспорт этих данных отключен по умолчанию на уровне приложения, вы можете включить его на уровне экземпляра приложения , что позволит вам дать конечным пользователям возможность предоставить вам согласие на анализ их данных о доставке сообщений (рекомендуется). Если заданы оба параметра, параметр уровня экземпляра переопределяет параметр уровня приложения.

Помните, что перед включением этих параметров вы должны сначала создать ссылку FCM-BiqQuery для своего проекта, как описано в разделе «Экспорт данных BigQuery» .

Включить экспорт данных о доставке для экземпляров приложения

Чтобы включить экспорт данных о доставке сообщений для каждого экземпляра приложения, вызовите метод setDeliveryMetricsExportToBigQuery() класса FirebaseMessaging и передайте значение true . Например:

 setDeliveryMetricsExportToBigQuery(true)

Используйте этот метод вместе с настройкой уровня приложения по умолчанию (отключено), чтобы предоставить пользователям возможность отказать или предоставить согласие на экспорт данных.

Чтобы приостановить или отключить экспорт, вызовите метод и передайте false .

Включить экспорт данных о доставке для приложения

В большинстве случаев мы рекомендуем включить экспорт данных о доставке сообщений только на уровне экземпляра приложения и оставить его отключенным на уровне приложения. Если вы предпочитаете включить экспорт на уровне приложения, добавьте следующее свойство к объекту приложения в манифесте приложения:

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

Приложения, которые разрешают экспорт в манифесте, могут по-прежнему позволять пользователям отказаться, установив значение false для setDeliveryMetricsExportToBigQuery() . Вызов этого метода во время выполнения переопределяет значение уровня приложения.

Какие данные экспортируются в BigQuery?

Обратите внимание, что ориентация на устаревшие токены или неактивные регистрации может привести к завышению некоторых из этих статистических данных.

Схема экспортируемой таблицы:

_PARTITIONTIME TIMESTAMP Этот псевдостолбец содержит метку времени начала дня (в формате UTC), в который были загружены данные. Для раздела ГГГГММДД этот псевдостолбец содержит значение TIMESTAMP ('ГГГГ-ММ-ДД').
event_timestamp TIMESTAMP Отметка времени события, записанная сервером
номер проекта ЦЕЛОЕ Номер проекта определяет проект, отправивший сообщение.
message_id STRING Идентификатор сообщения идентифицирует сообщение. Сгенерированный из идентификатора приложения и отметки времени, идентификатор сообщения в некоторых случаях может не быть уникальным в глобальном масштабе.
instance_id STRING Идентификатор экземпляра приложения, которому отправлено сообщение (если доступно)
message_type STRING Тип сообщения. Может быть уведомлением или сообщением с данными. Тема используется для идентификации исходного сообщения для рассылки темы или кампании; последующие сообщения являются либо уведомлением, либо сообщением данных.
sdk_platform STRING Платформа приложения-получателя
Имя приложения STRING Имя пакета для приложений Android или идентификатор пакета для приложений iOS.
collapse_key STRING Ключ сворачивания определяет группу сообщений, которые можно свернуть. Когда устройство не подключено, только последнее сообщение с данным ключом свертывания ставится в очередь для возможной доставки.
приоритет ЦЕЛОЕ Приоритет сообщения. Допустимые значения: «нормальный» и «высокий». В iOS они соответствуют приоритетам APN 5 и 10.
ttl ЦЕЛОЕ Этот параметр указывает, как долго (в секундах) сообщение должно храниться в хранилище FCM, если устройство отключено.
тема STRING Название темы, в которую было отправлено сообщение (если применимо)
bulk_id ЦЕЛОЕ Идентификатор пакета идентифицирует группу связанных сообщений, например, конкретную отправку в тему.
событие STRING Тип события. Возможные значения:
  • MESSAGE_ACCEPTED: сообщение было получено сервером FCM, и запрос действителен;
  • MESSAGE_DELIVERED: сообщение было доставлено в FCM SDK приложения на устройстве. По умолчанию это поле не распространяется. Чтобы включить, следуйте инструкциям в setDeliveryMetricsExportToBigQuery(boolean) .
  • MISSING_REGISTRATIONS: запрос был отклонен из-за отсутствия регистрации;
  • UNAUTHORIZED_REGISTRATION: сообщение было отклонено, потому что отправитель не авторизован на отправку для регистрации;
  • MESSAGE_RECEIVED_INTERNAL_ERROR: при обработке запроса сообщения произошла неопределенная ошибка;
  • MISMATCH_SENDER_ID: запрос на отправку сообщения был отклонен из-за несоответствия между идентификатором отправителя, отправившего сообщение, и идентификатором, объявленным для конечной точки;
  • QUOTA_EXCEEDED: запрос на отправку сообщения отклонен из-за недостаточной квоты;
  • INVALID_REGISTRATION: запрос на отправку сообщения был отклонен из-за недействительной регистрации;
  • INVALID_PACKAGE_NAME: запрос на отправку сообщения был отклонен из-за неверного имени пакета;
  • INVALID_APNS_CREDENTIAL: запрос на отправку сообщения был отклонен из-за недействительного сертификата APNS;
  • INVALID_PARAMETERS: запрос на отправку сообщения отклонен из-за неверных параметров;
  • PAYLOAD_TOO_LARGE: запрос на отправку сообщения был отклонен из-за того, что полезная нагрузка превышает лимит;
  • AUTHENTICATION_ERROR: запрос на отправку сообщения был отклонен из-за ошибки аутентификации (проверьте API-ключ, используемый для отправки сообщения);
  • INVALID_TTL: запрос на отправку сообщения был отклонен из-за неверного TTL.
analytics_label STRING С помощью API HTTP v1 можно установить метку аналитики при отправке сообщения, чтобы пометить сообщение для аналитических целей.

Что вы можете сделать с экспортированными данными?

В следующих разделах приведены примеры запросов, которые вы можете запустить в BigQuery для экспортированных данных FCM.

Подсчет отправленных сообщений приложением

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;

Подсчет уникальных экземпляров приложения, на которые нацелены сообщения

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

Подсчет отправленных уведомлений

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';

Подсчитать отправленные сообщения с данными

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';

Подсчет сообщений, отправленных в тему или кампанию

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 != '';

Чтобы отслеживать события для сообщения, отправленного в определенную тему, измените этот запрос, заменив AND message_id != '' AND message_id = <your message id>; .

Вычислить продолжительность разветвления для заданной темы или кампании

Время начала разветвления - это время получения исходного запроса, а время окончания - время создания последнего отдельного сообщения, предназначенного для одного экземпляра.

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;

Подсчитать процент доставленных сообщений

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;

Отслеживайте все события для данного идентификатора сообщения и идентификатора экземпляра

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;

Вычислить задержку для данного идентификатора сообщения и идентификатора экземпляра

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;