Для устранения текущих сбоев доставки сообщений воспользуйтесь средством устранения неполадок FCM и прочтите эту публикацию в блоге, чтобы понять различные причины, по которым вы можете не видеть свое сообщение.
FCM также предоставляет три набора инструментов, которые помогут вам получить представление о широкой оценке успеха и стратегии обмена сообщениями:
- Отчеты о доставке сообщений консоли Firebase
- Совокупные показатели доставки Android SDK из API данных Firebase Cloud Messaging
- Комплексный экспорт данных в Google BigQuery
Для работы всех инструментов отчетности, описанных на этой странице, требуется Google Analytics . Если Google Analytics не включен для вашего проекта, вы можете настроить его на вкладке «Интеграции» в настройках проекта Firebase.
Имейте в виду, что представление многих статистических данных на этой странице может задерживаться до 24 часов из-за пакетирования аналитических данных.
Отчеты о доставке сообщений
На вкладке «Отчеты» в консоли Firebase вы можете просмотреть следующие данные для сообщений, отправленных в SDK FCM платформы Android или Apple, в том числе отправленных через композитор уведомлений и API FCM:
- Отправляет — сообщение данных или сообщение уведомления было поставлено в очередь для доставки или было успешно передано сторонней службе, например APN, для доставки. Для получения дополнительной информации см. срок действия сообщения .
- Получено (доступно только на устройствах Android) — сообщение с данными или уведомление было получено приложением. Эти данные доступны, если на принимающем устройстве Android установлен FCM SDK 18.0.1 или более поздней версии.
- Показы (доступно только для уведомлений на устройствах Android) — уведомление об отображении отображалось на устройстве, пока приложение работало в фоновом режиме.
- Открывается — пользователь открыл уведомление. Сообщается только об уведомлениях, полученных, когда приложение работает в фоновом режиме.
Эти данные доступны для всех сообщений с полезной нагрузкой уведомлений и всех помеченных сообщений с данными . Дополнительные сведения о метках см. в разделе Добавление аналитических меток к сообщениям .
При просмотре отчетов о сообщениях вы можете установить диапазон дат для отображаемых данных с возможностью экспорта в CSV. Вы также можете фильтровать по этим критериям:
- Платформа (iOS или Android)
- Приложение
- Пользовательские метки аналитики
Добавление меток аналитики к сообщениям
Маркировка сообщений очень полезна для пользовательского анализа, позволяя фильтровать статистику доставки по меткам или наборам меток. Вы можете добавить метку к любому сообщению, отправленному через API HTTP v1, задав поле fcmOptions.analyticsLabel
в объекте сообщения или в полях AndroidFcmOptions
или ApnsFcmOptions
, зависящих от платформы.
Ярлыки Google Аналитики представляют собой текстовые строки в формате ^[a-zA-Z0-9-_.~%]{1,50}$
. Метки могут содержать строчные и прописные буквы, цифры и следующие символы:
-
-
-
~
-
%
Максимальная длина — 50 символов. Вы можете указать до 100 уникальных ярлыков в день; сообщения с метками, добавленными сверх этого предела, не сообщаются.
На вкладке «Отчеты» консоли Firebase вы можете выполнить поиск по списку всех существующих ярлыков и применить их по отдельности или в комбинации для фильтрации отображаемой статистики.
Агрегированные данные о доставке через API данных FCM .
API данных Firebase Cloud Messaging позволяет получать информацию, которая поможет вам понять результаты запросов сообщений, адресованных приложениям Android. API предоставляет агрегированные данные со всех устройств Android с поддержкой сбора данных в проекте. Сюда входит информация о проценте сообщений, доставленных без задержки, а также о том, сколько сообщений было задержано или удалено на транспортном уровне Android . Оценка этих данных может выявить общие тенденции в доставке сообщений и помочь вам найти эффективные способы повышения производительности ваших запросов на отправку. Информацию о доступности диапазонов дат в отчетах см. в разделе Сроки агрегированных данных .
API предоставляет все данные, доступные для данного приложения. См. справочную документацию по API .
Как разбиваются данные?
Данные о доставке разбиты по приложениям, датам и меткам аналитики . Вызов API вернет данные для каждой комбинации даты, приложения и метки аналитики. Например, один объект JSON androidDeliveryData
будет выглядеть так:
{
"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
}
}
Как интерпретировать показатели
Данные о доставке показывают процент сообщений, соответствующих каждому из следующих показателей. Вполне возможно, что одно сообщение соответствует нескольким показателям. Из-за ограничений в том, как мы собираем данные, и уровня детализации, с которым мы агрегировали показатели, некоторые результаты сообщений вообще не представлены в метриках, поэтому проценты, приведенные ниже, не будут в сумме составлять 100 %.
Подсчет принятых сообщений
Единственное число, включенное в набор данных, — это количество сообщений, которые были приняты FCM для доставки на устройства Android. Во всех процентах это значение используется в качестве знаменателя. Имейте в виду, что в этот подсчет не будут включены сообщения, предназначенные для пользователей, которые отключили сбор информации об использовании и диагностике на своих устройствах.
Процент результатов сообщений
Поля, включенные в объект MessageOutcomePercents
, предоставляют информацию о результатах запросов сообщений. Все категории являются взаимоисключающими. Он может отвечать на такие вопросы, как «Доставляются ли мои сообщения?» и «Что является причиной удаления сообщений?»
Например, высокое значение поля droppedTooManyPendingMessages
может сигнализировать о том, что экземпляры приложения получают объемы несворачиваемых сообщений, превышающие лимит FCM в 100 ожидающих сообщений. Чтобы избежать этого, убедитесь, что ваше приложение обрабатывает вызовы onDeletedMessages
, и рассмотрите возможность отправки свертываемых сообщений. Аналогичным образом, высокий процент droppedDeviceInactive
может быть сигналом к обновлению токенов регистрации на вашем сервере, удалению устаревших токенов и отмене их подписки на темы. Лучшие практики в этой области см. в разделе «Управление регистрационными токенами FCM .
Процент эффективности доставки
Поля объекта DeliveryPerformancePercents
предоставляют информацию об успешно доставленных сообщениях. Он может отвечать на такие вопросы, как «Мои сообщения задерживаются?» и «Почему сообщения задерживаются?» Например, высокое значение для delayedMessageThrottled
будет явно указывать на то, что вы превышаете максимальные ограничения для каждого устройства , и вам следует отрегулировать скорость отправки сообщений.
Процент понимания сообщений
Этот объект предоставляет дополнительную информацию обо всех отправленных сообщениях. Поле priorityLowered
показывает процент принятых сообщений, приоритет которых понижен с HIGH
до NORMAL
. Если это значение велико, попробуйте отправлять меньше сообщений с высоким приоритетом или убедитесь, что вы всегда отображаете уведомление при отправке сообщения с высоким приоритетом. Дополнительную информацию см. в нашей документации по приоритету сообщений.
Чем эти данные отличаются от данных, экспортированных в BigQuery?
Экспорт BigQuery предоставляет отдельные журналы сообщений о принятии сообщений серверной частью FCM и доставке сообщений в SDK на устройстве (шаги 2 и 4 архитектуры FCM ). Эти данные полезны для обеспечения принятия и доставки отдельных сообщений. Подробнее об экспорте данных BigQuery читайте в следующем разделе.
Напротив, API данных облачных сообщений Firebase предоставляет агрегированные сведения о том, что происходит конкретно на транспортном уровне Android (или на этапе 3 архитектуры FCM ). Эти данные, в частности, дают представление о доставке сообщений из серверных частей FCM в Android SDK. Это особенно полезно для отображения тенденций относительно того, почему сообщения были задержаны или удалены во время этой транспортировки.
В некоторых случаях возможно, что два набора данных могут не совпадать в точности по следующим причинам:
- Агрегированные показатели выбирают только часть всех сообщений.
- Агрегированные показатели округляются
- Мы не предоставляем показатели ниже порога конфиденциальности.
- Часть результатов сообщений отсутствует из-за оптимизации управления большим объемом трафика.
Ограничения API
Сроки агрегирования данных
API вернет исторические данные за 7 дней; однако данные, возвращаемые этим API, будут задержаны на срок до 5 дней. Например, 20 января будут доступны данные за 9–15 января, но не за 16 января или позже. Кроме того, данные предоставляются в лучшем виде. В случае сбоя данных FCM примет меры для исправления ситуации и не будет заполнять данные повторно после устранения проблемы. В случае более крупных сбоев данные могут быть недоступны в течение недели или более.
Охват данных
Метрики, предоставляемые API данных Firebase Cloud Messaging, предназначены для предоставления информации об общих тенденциях доставки сообщений. Однако они не обеспечивают 100% охвата всех сценариев передачи сообщений. Следующие сценарии представляют собой известные результаты, не отраженные в показателях.
Просроченные сообщения
Если срок жизни (TTL) истекает после окончания указанной даты журнала, сообщение не будет считаться droppedTtlExpired
в эту дату.
Сообщения неактивным устройствам
Сообщения, отправленные на неактивные устройства, могут отображаться или не отображаться в наборе данных в зависимости от того, какой путь к данным они выбирают. Это может привести к неправильным подсчетам в полях droppedDeviceInactive
и pending
.
Сообщения на устройства с определенными пользовательскими предпочтениями
Сообщения пользователей, отключивших сбор информации об использовании и диагностике на своих устройствах, не будут включены в наш подсчет в соответствии с их предпочтениями.
Округление и минимумы
FCM намеренно округляет и исключает суммы, в которых объемы недостаточно велики.
Экспорт данных BigQuery
Вы можете экспортировать данные своих сообщений в BigQuery для дальнейшего анализа. BigQuery позволяет анализировать данные с помощью BigQuery SQL, экспортировать их другому облачному провайдеру или использовать данные для собственных моделей машинного обучения. Экспорт в BigQuery включает в себя все доступные данные для сообщений, независимо от типа сообщения или от того, отправлено ли сообщение через API или через композитор уведомлений.
Для сообщений, отправленных на устройства со следующими минимальными версиями FCM SDK, у вас есть дополнительная возможность включить экспорт данных о доставке сообщений для вашего приложения:
- Android 20.1.0 или выше.
- iOS 8.6.0 или выше
- Firebase Web SDK 9.0.0 или выше
Подробную информацию о включении экспорта данных для Android и iOS см. ниже.
Для начала свяжите свой проект с BigQuery:
Выберите один из следующих вариантов:
Откройте композитор уведомлений , затем нажмите «Доступ к BigQuery» внизу страницы.
На странице «Интеграции» в консоли Firebase нажмите «Ссылка» на карточке BigQuery .
На этой странице отображаются параметры экспорта FCM для всех приложений с поддержкой FCM в проекте.
Следуйте инструкциям на экране, чтобы включить BigQuery.
Дополнительную информацию см. в разделе Связывание Firebase с BigQuery .
Если вы включите экспорт BigQuery для Cloud Messaging :
Firebase экспортирует ваши данные в BigQuery . Обратите внимание, что первоначальное распространение данных для экспорта может занять до 48 часов.
- Вы можете вручную запланировать повторное заполнение данных за последние 30 дней.
После создания набора данных его местоположение невозможно изменить, но вы можете скопировать набор данных в другое место или вручную переместить (воссоздать) набор данных в другом месте. Дополнительные сведения см. в разделе Изменение местоположения набора данных .
Firebase настраивает регулярную синхронизацию ваших данных из вашего проекта Firebase с BigQuery . Эти ежедневные экспортные операции начинаются в 4:00 утра по тихоокеанскому времени и обычно заканчиваются через 24 часа.
По умолчанию все приложения в вашем проекте связаны с BigQuery , а все приложения, которые вы позже добавите в проект, автоматически связываются с BigQuery . Вы можете управлять тем, какие приложения отправляют данные .
Чтобы деактивировать экспорт BigQuery , отсоедините свой проект в консоли Firebase .
Включить экспорт данных о доставке сообщений
Устройства Android с FCM SDK 20.1.0 или более поздней версии могут включить экспорт данных о доставке сообщений своего приложения. Экспорт данных отключен по умолчанию на уровне приложения . Программное включение его на уровне экземпляра приложения позволяет запрашивать у конечных пользователей разрешение на анализ данных о доставке их сообщений (рекомендуется). Если установлены оба параметра, значение уровня экземпляра приложения переопределяет значение уровня приложения.
Прежде чем включать эти параметры, необходимо сначала создать ссылку FCM -BiqQuery для вашего проекта, как описано в разделе «Экспорт данных BigQuery» .
Включить экспорт данных о доставке для экземпляров приложений
В большинстве случаев мы рекомендуем включать экспорт данных о доставке сообщений только на уровне экземпляра приложения и оставлять его отключенным на уровне приложения.
FirebaseMessaging.getInstance().setDeliveryMetricsExportToBigQuery(true)
Включить экспорт данных о доставке для приложения
Если вы предпочитаете включить экспорт на уровне приложения, не вызывайте метод setDeliveryMetricsExportToBigQuery
и добавьте следующее свойство к объекту приложения в манифесте приложения:
<application>
<meta-data android:name="delivery_metrics_exported_to_big_query_enabled"
android:value="true" />
</application>
Какие данные экспортируются в BigQuery?
Обратите внимание, что таргетинг на устаревшие токены или неактивные регистрации может привести к завышению некоторых из этих статистических данных.
Схема экспортируемой таблицы:
_PARTITIONTIME | ТАЙМ-МЕТКА | Этот псевдостолбец содержит временную метку начала дня (в формате UTC), в который были загружены данные. Для раздела ГГГГММДД этот псевдостолбец содержит значение TIMESTAMP('ГГГГ-ММ-ДД'). |
event_timestamp | ТАЙМ-МЕТКА | Временная метка события, записанная сервером |
номер_проекта | ЦЕЛОЕ ЧИСЛО | Номер проекта идентифицирует проект, отправивший сообщение. |
message_id | НИТЬ | Идентификатор сообщения идентифицирует сообщение. Идентификатор сообщения, созданный на основе идентификатора приложения и отметки времени, в некоторых случаях может не быть глобально уникальным. |
идентификатор_экземпляра | НИТЬ | Уникальный идентификатор приложения, в которое отправлено сообщение (если доступен). Это может быть идентификатор экземпляра или идентификатор установки Firebase . |
тип_сообщения | НИТЬ | Тип сообщения. Это может быть сообщение уведомления или сообщение данных. Тема используется для идентификации исходного сообщения для темы или отправки кампании; последующие сообщения представляют собой либо уведомление, либо сообщение с данными. |
sdk_platform | НИТЬ | Платформа приложения-получателя |
имя_приложения | НИТЬ | Имя пакета для приложений Android или идентификатор пакета для приложений iOS. |
свернуть_ключ | НИТЬ | Ключ свертывания идентифицирует группу сообщений, которые можно свернуть. Когда устройство не подключено, только последнее сообщение с заданным ключом свертывания ставится в очередь для возможной доставки. |
приоритет | ЦЕЛОЕ ЧИСЛО | Приоритет сообщения. Допустимые значения: «нормальный» и «высокий». В iOS они соответствуют приоритетам APN 5 и 10. |
ТТЛ | ЦЕЛОЕ ЧИСЛО | Этот параметр указывает, как долго (в секундах) сообщение должно храниться в хранилище FCM, если устройство находится в автономном режиме. |
тема | НИТЬ | Название темы, в которую было отправлено сообщение (если применимо) |
объемный_ид | ЦЕЛОЕ ЧИСЛО | Массовый идентификатор идентифицирует группу связанных сообщений, например конкретную отправку в тему. |
событие | НИТЬ | Тип мероприятия. Возможные значения:
|
аналитика_лейбл | НИТЬ | С помощью 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;
Для устранения текущих сбоев доставки сообщений воспользуйтесь средством устранения неполадок FCM и прочтите эту публикацию в блоге, чтобы понять различные причины, по которым вы можете не видеть свое сообщение.
FCM также предоставляет три набора инструментов, которые помогут вам получить представление о широкой оценке успеха и стратегии обмена сообщениями:
- Отчеты о доставке сообщений консоли Firebase
- Совокупные показатели доставки Android SDK из API данных Firebase Cloud Messaging
- Комплексный экспорт данных в Google BigQuery
Для работы всех инструментов отчетности, описанных на этой странице, требуется Google Analytics . Если Google Analytics не включен для вашего проекта, вы можете настроить его на вкладке «Интеграции» в настройках проекта Firebase.
Имейте в виду, что представление многих статистических данных на этой странице может задерживаться до 24 часов из-за пакетирования аналитических данных.
Отчеты о доставке сообщений
На вкладке «Отчеты» в консоли Firebase вы можете просмотреть следующие данные для сообщений, отправленных в SDK FCM платформы Android или Apple, в том числе отправленных через композитор уведомлений и API FCM:
- Отправляет — сообщение данных или сообщение уведомления было поставлено в очередь для доставки или было успешно передано сторонней службе, например APN, для доставки. Для получения дополнительной информации см. срок действия сообщения .
- Получено (доступно только на устройствах Android) — сообщение с данными или уведомление было получено приложением. Эти данные доступны, если на принимающем устройстве Android установлен FCM SDK 18.0.1 или более поздней версии.
- Показы (доступно только для уведомлений на устройствах Android) — уведомление об отображении отображалось на устройстве, пока приложение работало в фоновом режиме.
- Открывается — пользователь открыл уведомление. Сообщается только об уведомлениях, полученных, когда приложение работает в фоновом режиме.
Эти данные доступны для всех сообщений с полезной нагрузкой уведомлений и всех помеченных сообщений с данными . Дополнительные сведения о метках см. в разделе Добавление аналитических меток к сообщениям .
При просмотре отчетов о сообщениях вы можете установить диапазон дат для отображаемых данных с возможностью экспорта в CSV. Вы также можете фильтровать по этим критериям:
- Платформа (iOS или Android)
- Приложение
- Пользовательские метки аналитики
Добавление меток аналитики к сообщениям
Маркировка сообщений очень полезна для пользовательского анализа, позволяя фильтровать статистику доставки по меткам или наборам меток. Вы можете добавить метку к любому сообщению, отправленному через API HTTP v1, задав поле fcmOptions.analyticsLabel
в объекте сообщения или в полях AndroidFcmOptions
или ApnsFcmOptions
, зависящих от платформы.
Ярлыки Google Аналитики представляют собой текстовые строки в формате ^[a-zA-Z0-9-_.~%]{1,50}$
. Метки могут содержать строчные и прописные буквы, цифры и следующие символы:
-
-
-
~
-
%
Максимальная длина — 50 символов. Вы можете указать до 100 уникальных ярлыков в день; сообщения с метками, добавленными сверх этого предела, не сообщаются.
На вкладке «Отчеты» консоли Firebase вы можете выполнить поиск по списку всех существующих ярлыков и применить их по отдельности или в комбинации для фильтрации отображаемой статистики.
Агрегированные данные о доставке через API данных FCM .
API данных Firebase Cloud Messaging позволяет получать информацию, которая поможет вам понять результаты запросов сообщений, адресованных приложениям Android. API предоставляет агрегированные данные со всех устройств Android с поддержкой сбора данных в проекте. Сюда входит информация о проценте сообщений, доставленных без задержки, а также о том, сколько сообщений было задержано или удалено на транспортном уровне Android . Оценка этих данных может выявить общие тенденции в доставке сообщений и помочь вам найти эффективные способы повышения производительности ваших запросов на отправку. Информацию о доступности диапазонов дат в отчетах см. в разделе Сроки агрегированных данных .
API предоставляет все данные, доступные для данного приложения. См. справочную документацию по API .
Как разбиваются данные?
Данные о доставке разбиты по приложениям, датам и меткам аналитики . Вызов API вернет данные для каждой комбинации даты, приложения и метки аналитики. Например, один объект JSON androidDeliveryData
будет выглядеть так:
{
"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
}
}
Как интерпретировать показатели
Данные о доставке показывают процент сообщений, соответствующих каждому из следующих показателей. Вполне возможно, что одно сообщение соответствует нескольким показателям. Из-за ограничений в том, как мы собираем данные, и уровня детализации, с которым мы агрегировали показатели, некоторые результаты сообщений вообще не представлены в метриках, поэтому проценты, приведенные ниже, не будут в сумме составлять 100 %.
Подсчет принятых сообщений
Единственное число, включенное в набор данных, — это количество сообщений, которые были приняты FCM для доставки на устройства Android. Во всех процентах это значение используется в качестве знаменателя. Имейте в виду, что в этот подсчет не будут включены сообщения, предназначенные для пользователей, которые отключили сбор информации об использовании и диагностике на своих устройствах.
Процент результатов сообщений
Поля, включенные в объект MessageOutcomePercents
, предоставляют информацию о результатах запросов сообщений. Все категории являются взаимоисключающими. Он может отвечать на такие вопросы, как «Доставляются ли мои сообщения?» и «Что является причиной удаления сообщений?»
Например, высокое значение поля droppedTooManyPendingMessages
может сигнализировать о том, что экземпляры приложения получают объемы несворачиваемых сообщений, превышающие лимит FCM в 100 ожидающих сообщений. Чтобы избежать этого, убедитесь, что ваше приложение обрабатывает вызовы onDeletedMessages
, и рассмотрите возможность отправки свертываемых сообщений. Аналогично, высокий процент droppedDeviceInactive
может быть сигналом к обновлению токенов регистрации на вашем сервере, удалению устаревших токенов и отмене их подписки на темы. Рекомендации в этой области см. в разделе «Управление регистрационными токенами FCM .
Процент эффективности доставки
Поля объекта DeliveryPerformancePercents
предоставляют информацию об успешно доставленных сообщениях. Он может отвечать на такие вопросы, как «Мои сообщения задерживаются?» и «Почему сообщения задерживаются?» Например, высокое значение для delayedMessageThrottled
будет явно указывать на то, что вы превышаете максимальные ограничения для каждого устройства , и вам следует отрегулировать скорость отправки сообщений.
Процент понимания сообщений
Этот объект предоставляет дополнительную информацию обо всех отправленных сообщениях. Поле priorityLowered
показывает процент принятых сообщений, приоритет которых понижен с HIGH
до NORMAL
. Если это значение велико, попробуйте отправлять меньше сообщений с высоким приоритетом или убедитесь, что вы всегда отображаете уведомление при отправке сообщения с высоким приоритетом. Дополнительную информацию см. в нашей документации по приоритету сообщений.
Чем эти данные отличаются от данных, экспортированных в BigQuery?
Экспорт BigQuery предоставляет отдельные журналы сообщений о принятии сообщений серверной частью FCM и доставке сообщений в SDK на устройстве (шаги 2 и 4 архитектуры FCM ). Эти данные полезны для обеспечения принятия и доставки отдельных сообщений. Подробнее об экспорте данных BigQuery читайте в следующем разделе.
Напротив, API данных облачных сообщений Firebase предоставляет агрегированные сведения о том, что происходит конкретно на транспортном уровне Android (или на этапе 3 архитектуры FCM ). Эти данные, в частности, дают представление о доставке сообщений из серверных частей FCM в Android SDK. Это особенно полезно для отображения тенденций относительно того, почему сообщения были задержаны или удалены во время этой транспортировки.
В некоторых случаях возможно, что два набора данных могут не совпадать в точности по следующим причинам:
- Агрегированные показатели выбирают только часть всех сообщений.
- Агрегированные показатели округляются.
- Мы не предоставляем показатели ниже порога конфиденциальности.
- Часть результатов сообщений отсутствует из-за оптимизации управления большим объемом трафика.
Ограничения API
Сроки агрегирования данных
API вернет исторические данные за 7 дней; однако данные, возвращаемые этим API, будут задержаны на срок до 5 дней. Например, 20 января будут доступны данные за 9–15 января, но не за 16 января или позже. Кроме того, данные предоставляются в лучшем виде. В случае сбоя данных FCM примет меры для дальнейшего исправления и не будет заполнять данные повторно после устранения проблемы. В случае более крупных сбоев данные могут быть недоступны в течение недели или более.
Охват данных
Метрики, предоставляемые API данных Firebase Cloud Messaging, предназначены для предоставления информации об общих тенденциях доставки сообщений. Однако они не обеспечивают 100% охвата всех сценариев сообщений. Следующие сценарии представляют собой известные результаты, не отраженные в показателях.
Просроченные сообщения
Если время жизни (TTL) истекает после окончания указанной даты журнала, сообщение не будет считаться droppedTtlExpired
в эту дату.
Сообщения неактивным устройствам
Сообщения, отправленные на неактивные устройства, могут отображаться или не отображаться в наборе данных в зависимости от того, какой путь к данным они выбирают. Это может привести к неправильным подсчетам в полях droppedDeviceInactive
и pending
.
Сообщения на устройства с определенными пользовательскими предпочтениями
Сообщения пользователей, отключивших сбор информации об использовании и диагностике на своих устройствах, не будут включены в наш подсчет в соответствии с их предпочтениями.
Округление и минимумы
FCM намеренно округляет и исключает суммы, в которых объемы недостаточно велики.
Экспорт данных BigQuery
Вы можете экспортировать данные своих сообщений в BigQuery для дальнейшего анализа. BigQuery позволяет анализировать данные с помощью BigQuery SQL, экспортировать их другому облачному провайдеру или использовать данные для собственных моделей машинного обучения. Экспорт в BigQuery включает все доступные данные для сообщений, независимо от типа сообщения или от того, отправлено ли сообщение через API или через композитор уведомлений.
Для сообщений, отправленных на устройства со следующими минимальными версиями FCM SDK, у вас есть дополнительная возможность включить экспорт данных о доставке сообщений для вашего приложения:
- Android 20.1.0 или выше.
- iOS 8.6.0 или выше
- Firebase Web SDK 9.0.0 или выше
Подробную информацию о включении экспорта данных для Android и iOS см. ниже.
Для начала свяжите свой проект с BigQuery:
Выберите один из следующих вариантов:
Откройте композитор уведомлений , затем нажмите «Доступ к BigQuery» внизу страницы.
На странице «Интеграции» в консоли Firebase нажмите «Ссылка» на карточке BigQuery .
На этой странице отображаются параметры экспорта FCM для всех приложений с поддержкой FCM в проекте.
Следуйте инструкциям на экране, чтобы включить BigQuery.
Дополнительную информацию см. в разделе Связывание Firebase с BigQuery .
Если вы включите экспорт BigQuery для Cloud Messaging :
Firebase экспортирует ваши данные в BigQuery . Обратите внимание, что первоначальное распространение данных для экспорта может занять до 48 часов.
- Вы можете вручную запланировать заполнение данных за последние 30 дней.
После создания набора данных его местоположение невозможно изменить, но вы можете скопировать набор данных в другое место или вручную переместить (воссоздать) набор данных в другом месте. Дополнительные сведения см. в разделе Изменение местоположения набора данных .
Firebase настраивает регулярную синхронизацию ваших данных из вашего проекта Firebase с BigQuery . Эти ежедневные экспортные операции начинаются в 4:00 утра по тихоокеанскому времени и обычно заканчиваются через 24 часа.
По умолчанию все приложения в вашем проекте связаны с BigQuery , и все приложения, которые вы позже добавите в проект, автоматически связываются с BigQuery . Вы можете управлять тем, какие приложения отправляют данные .
Чтобы деактивировать экспорт BigQuery , отсоедините свой проект в консоли Firebase .
Включить экспорт данных о доставке сообщений
Устройства Android с FCM SDK 20.1.0 или более поздней версии могут включить экспорт данных о доставке сообщений своего приложения. Экспорт данных отключен по умолчанию на уровне приложения . Программное включение его на уровне экземпляра приложения позволяет запрашивать у конечных пользователей разрешение на анализ данных о доставке их сообщений (рекомендуется). Если установлены оба параметра, значение уровня экземпляра приложения переопределяет значение уровня приложения.
Прежде чем включать эти параметры, необходимо сначала создать ссылку FCM -BiqQuery для вашего проекта, как описано в разделе «Экспорт данных BigQuery» .
Включить экспорт данных о доставке для экземпляров приложений
В большинстве случаев мы рекомендуем включать экспорт данных о доставке сообщений только на уровне экземпляра приложения и оставлять его отключенным на уровне приложения.
FirebaseMessaging.getInstance().setDeliveryMetricsExportToBigQuery(true)
Включить экспорт данных доставки для приложения
Если вы предпочитаете включить экспорт на уровне приложения, обязательно не вызовуте метод setDeliveryMetricsExportToBigQuery
и добавьте следующее свойство в объект приложения в манифесте вашего приложения:
<application>
<meta-data android:name="delivery_metrics_exported_to_big_query_enabled"
android:value="true" />
</application>
Какие данные экспортируются в BigQuery?
Обратите внимание, что нацеливание на несвежие токены или неактивные регистрации могут раздуть некоторые из этих статистических данных.
Схема экспортированной таблицы:
_Partitiontime | ТАЙМ-МЕТКА | Этот псевдо столбец содержит временную метку для начала дня (в UTC), в которой данные были загружены. Для раздела yyyymmdd этот псевдо-столбец содержит значение времени значения ('yyyy-mm-dd'). |
event_timestamp | ТАЙМ-МЕТКА | TimeStance события, записанная сервером |
Project_number | ЦЕЛОЕ ЧИСЛО | Номер проекта идентифицирует проект, который отправил сообщение |
message_id | НИТЬ | Идентификатор сообщения идентифицирует сообщение. Сгенерированный из идентификатора приложения и временной метки, идентификатор сообщения может, в некоторых случаях, не быть глобально уникальным. |
exance_id | НИТЬ | Уникальный идентификатор приложения, в которое отправляется сообщение (когда доступно). Это может быть идентификатор экземпляра или идентификатор установки Firebase . |
message_type | НИТЬ | Тип сообщения. Может быть сообщением об уведомлении или сообщением данных. Тема используется для определения исходного сообщения для темы или кампании. Последующие сообщения - это либо сообщение уведомления, либо сообщение данных. |
sdk_platform | НИТЬ | Платформа приложения получателя |
app_name | НИТЬ | Имя пакета для приложений Android или идентификатор пакета для приложений для iOS |
COLLAPSE_KEY | НИТЬ | Ключ краха идентифицирует группу сообщений, которые можно обрушить. Когда устройство не подключено, только последнее сообщение с данным ключом обрушения находится в очереди на возможную доставку |
приоритет | ЦЕЛОЕ ЧИСЛО | Приоритет сообщения. Допустимые значения являются «нормальными» и «высокими». На iOS они соответствуют приоритетам APN 5 и 10 |
Ттл | ЦЕЛОЕ ЧИСЛО | Этот параметр указывает, как долго (в секунды) сообщение следует хранить в хранилище FCM, если устройство не в автономном режиме |
тема | НИТЬ | Название темы, на которую было отправлено сообщение (когда применимо) |
bulk_id | ЦЕЛОЕ ЧИСЛО | Основной идентификатор идентифицирует группу связанных сообщений, таких как конкретная отправка в тему |
событие | НИТЬ | Тип события. Возможные значения:
|
Analytics_label | НИТЬ | С помощью API HTTP V1 , Analytics Label может быть установлен при отправке сообщения, чтобы отметить сообщение для аналитических целей |
Что вы можете сделать с экспортируемыми данными?
В следующих разделах предлагаются примеры запросов, которые вы можете запустить в 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 = <your message id>;
отправленного в конкретную тему, измените этот запрос, чтобы заменить AND 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;
Для устранения неполадок в текущих сбоях доставки сообщений используйте неисправности FCM и посмотрите на этот пост в блоге , чтобы понять различные причины, по которым вы можете не увидеть свое сообщение.
FCM также предоставляет три набора инструментов, которые помогут вам понять широкую оценку успеха и стратегии обмена сообщениями:
- Отчеты о доставке сообщений Firebase Console
- Агрегированные метрики доставки Android SDK из API данных Firebase Cloud Messaging
- Комплексный экспорт данных в Google BigQuery
Инструменты отчетности, описанные на этой странице, требуют Google Analytics для функционирования. Если Google Analytics не включена для вашего проекта, вы можете настроить его на вкладке «Интеграции» в настройках проекта Firebase.
Имейте в виду, что отчетность многих статистических данных на этой странице подлежит задержке до 24 часов из -за падения аналитических данных.
Отчеты о доставке сообщений
На вкладке «Отчеты» в консоли Firebase вы можете просмотреть следующие данные для сообщений, отправленных Android или Apple FCM SDK, включая отправленные через композитор уведомлений и API FCM:
- Отправка-сообщение о сообщении данных или уведомление было включено для доставки или было успешно передано сторонней службе, такой как APN для доставки. Смотрите срок службы сообщения для получения дополнительной информации.
- Получен (доступен только на устройствах Android) - сообщение о сообщении данных или уведомлении было получено приложением. Эти данные доступны, когда приемное устройство Android имеет установлено FCM SDK 18.0.1 или выше.
- Показания (доступны только для сообщений уведомлений на устройствах Android) - уведомление дисплея было отображено на устройстве, в то время как приложение находится в фоновом режиме.
- Открывается - пользователь открыл сообщение уведомления. Сообщается только для уведомлений, полученных, когда приложение находится в фоновом режиме.
Эти данные доступны для всех сообщений с полезной нагрузкой уведомлений и всеми помеченными сообщениями данных . Чтобы узнать больше о ярлыках, см. Добавление аналитических ярлыков в сообщения .
При просмотре отчетов сообщений вы можете установить диапазон дат для отображаемых данных, с помощью опции экспорта в CSV. Вы также можете отфильтровать по этим критериям:
- Платформа (iOS или Android)
- Приложение
- Пользовательские аналитические этикетки
Добавление меток аналитики в сообщения
Маркировка сообщений очень полезна для пользовательского анализа, позволяя вам фильтровать статистику доставки по меткам или наборам метки. Вы можете добавить метку в любое сообщение, отправленное через API HTTP V1, установив поле fcmOptions.analyticsLabel
в объекте сообщения или в специфических для платформе AndroidFcmOptions
или ApnsFcmOptions
.
Аналитические метки представляют собой текстовые строки в формате ^[a-zA-Z0-9-_.~%]{1,50}$
. Метки могут включать буквы нижних и верхних регистра, числа и следующие символы:
-
-
-
~
-
%
Максимальная длина составляет 50 символов. Вы можете указать до 100 уникальных ярлыков в день; Сообщения с метками, добавленными за пределы этого предела, не сообщаются.
На вкладке «Отчеты об обмене консолью Firebase вы можете найти список всех существующих этикетков и применить их по отдельности или в комбинации, чтобы отфильтровать отображаемую статистику.
Агрегированные данные доставки через API данных FCM
API данных Firebase Cloud Messaging Message позволяет получить информацию, которая может помочь вам понять результаты запросов сообщений, предназначенных для приложений Android. API предоставляет агрегированные данные на всех устройствах Android с поддержкой данных в проекте. Это включает в себя подробную информацию о проценте сообщений, доставляемых без промедления, а также о том, сколько сообщений было отложено или сброшено в уровне транспорта Android . Оценка этих данных может выявить широкие тенденции в доставке сообщений и помочь вам найти эффективные способы повышения производительности ваших запросов на отправку. См. Совокупные временные рамки данных для получения информации о наличии диапазона дат в отчетах.
API предоставляет все данные, доступные для данного приложения. Смотрите справочную документацию API .
Как разбиты данные?
Данные о доставке разбиты по метке приложения, даты и аналитики . Вызов API вернет данные для каждой комбинации даты, приложения и аналитической метки. Например, один объект androidDeliveryData
JSON будет выглядеть так:
{
"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
}
}
Как интерпретировать метрики
Данные о доставке описывают процент сообщений, которые соответствуют каждому из следующих метрик. Возможно, что одно сообщение соответствует нескольким показателям. Из -за ограничений в том, как мы собираем данные и уровень гранулярности, при котором мы объединяли метрики, некоторые результаты сообщений вообще не представлены в показателях, поэтому процентные показатели ниже не будут суммироваться до 100%.
Сообщения счета приняты
Единственный счет, включенный в набор данных, - это количество сообщений, которые были приняты FCM для доставки на устройства Android. Все проценты используют это значение в качестве знаменателя. Имейте в виду, что этот счет не будет включать сообщения, предназначенные для пользователей, которые отключили коллекцию использования и диагностической информации на своих устройствах.
Проценты результатов сообщения
Поля, включенные в объект MessageOutcomePercents
предоставляют информацию о результатах запросов сообщений. Все категории взаимоисключают. Это может ответить на такие вопросы, как «Доставляются ли мои сообщения?» и "Что вызывает отбрасывание сообщений?"
Например, высокое значение для поля droppedTooManyPendingMessages
может сигнализировать о том, что экземпляры приложений получают объемы, не подлежащие сборочным сообщениям, превышающие предел FCM в 100 ожидающих сообщений. Чтобы смягчить это, убедитесь, что ваше приложение обрабатывает вызовы к onDeletedMessages
и рассмотрите возможность отправки складных сообщений. Аналогичным образом, высокий процент для droppedDeviceInactive
может быть сигналом для обновления токенов регистрации на вашем сервере, удаления нестандартных токенов и отмены их по темам. См. Управление токенами регистрации FCM для лучших практик в этой области.
Производительность доставки
Поля в объекте DeliveryPerformancePercents
предоставляют информацию о сообщениях, которые были успешно доставлены. Это может ответить на такие вопросы, как «Мои сообщения были задержаны?» и "Почему сообщения задерживаются?" Например, высокое значение для delayedMessageThrottled
четко указывало на то, что вы превышаете максимальные пределы для каждого устройства и должны отрегулировать скорость, с которой вы отправляете сообщения.
Процент понимания сообщений
Этот объект предоставляет дополнительную информацию обо всех отправках сообщения. priorityLowered
поле выражает процент принятых сообщений, которые имели приоритет, сниженный от HIGH
до NORMAL
. Если это значение высокое, попробуйте отправить меньше сообщений с высоким приоритетом или убедитесь, что вы всегда отображаете уведомление при отправке сообщения с высоким приоритетом. Смотрите нашу документацию по приоритету сообщения для получения дополнительной информации
Чем эти данные отличаются от экспорта данных в BigQuery?
Export BigQuery предоставляет отдельные журналы сообщений о принятии сообщений с помощью бэкэнда FCM и доставки сообщений в SDK на устройстве (шаги 2 и 4 архитектуры FCM ). Эти данные полезны для обеспечения принятия и доставки отдельных сообщений. Узнайте больше об экспорте данных BigQuery в следующем разделе.
В отличие от этого, API данных обмена обменами обмена Firebase содержит агрегированные подробности о том, что происходит конкретно на транспортном уровне Android (или шаг 3 архитектуры FCM ). Эти данные специально дают представление о доставке сообщений от FCM Backends в Android SDK. Это особенно полезно для демонстрации тенденций относительно того, почему сообщения были отложены или сброшены во время этого транспорта.
В некоторых случаях возможно, что два набора данных могут не соответствовать именно следующим:
- Агрегированные метрики только выберите часть всех сообщений
- Агрегированные метрики округлены
- Мы не представляем метрики ниже порога конфиденциальности
- Часть результатов сообщений отсутствует из -за оптимизации в том, как мы управляем большим объемом трафика.
Ограничения API
Совокупные сроки данных
API вернет 7 дней исторических данных; Тем не менее, данные, возвращаемые этим API, будут отложены на 5 дней. Например, 20 января будут доступны данные за 9 января по 15 января, но не на 16 января или позднее. Кроме того, данные предоставляются в лучшем случае. В случае отключения данных FCM будет работать, чтобы исправить вперед и не заполнить данные после исправления проблемы. В больших отключениях данные могут быть недоступны в течение недели или более.
Покрытие данных
Метрики, предоставленные API данных об обмене обмена сообщениями Firebase, предназначены для того, чтобы дать представление об широких тенденциях доставки сообщений. Тем не менее, они не предоставляют 100% охват всех сценариев сообщений. Следующие сценарии являются известными результатами, не отраженными в метрик.
Срок действия сообщений
Если время для жизни (TTL) истекает после окончания данной даты журнала, сообщение не будет подсчитано как droppedTtlExpired
в эту дату.
Сообщения на неактивные устройства
Сообщения, отправленные на неактивные устройства, могут отображаться или не отображаться в наборе данных в зависимости от того, какой путь данных они берут. Это может привести к некоторому ошибке в падении поля droppedDeviceInactive
и pending
.
Сообщения на устройства с определенными пользовательскими предпочтениями
Пользователи, которые отключили сбор информации об использовании и диагностике на своих устройствах, не будут включать свои сообщения в наш счет, в соответствии с их предпочтениями.
Округление и минимумы
FCM намеренно раунды и исключает счет, когда объемы недостаточно велики.
BigQuery Data Export
Вы можете экспортировать данные своих сообщений в BigQuery для дальнейшего анализа. BigQuery позволяет анализировать данные, используя BigQuery SQL, экспортировать их другому облачному поставщику или использовать данные для ваших пользовательских моделей ML. Экспорт в BigQuery включает в себя все доступные данные для сообщений, независимо от типа сообщения или отправляется ли сообщение через API или композитор уведомлений.
Для сообщений, отправленных устройствам со следующими версиями FCM SDK, у вас есть дополнительная опция, чтобы включить экспорт данных доставки сообщений для вашего приложения:
- Android 20.1.0 или выше.
- iOS 8.6.0 или выше
- Firebase Web SDK 9.0.0 или выше
См. Ниже для получения подробной информации о включении экспорта данных для Android и iOS .
Чтобы начать, свяжите свой проект с BigQuery:
Выберите один из следующих вариантов:
Откройте композитор уведомлений , затем нажмите Access BigQuery внизу страницы.
На странице интеграции в консоли Firebase нажмите ссылку на карте BigQuery .
На этой странице отображаются параметры экспорта FCM для всех приложений -подтвержденных FCM в проекте.
Следуйте инструкциям на экране, чтобы включить BigQuery.
Обратитесь к ссылке Firebase в BigQuery для получения дополнительной информации.
Когда вы включите BigQuery Export для Cloud Messaging :
Firebase экспортирует ваши данные в BigQuery . Обратите внимание, что первоначальное распространение данных для экспорта может занять до 48 часов.
- Вы можете вручную запланировать обратные засыпания данных вплоть до последних 30 дней.
После создания набора данных местоположение нельзя изменить, но вы можете скопировать набор данных в другое место или вручную перемещать (воссоздать) набор данных в другом месте. Чтобы узнать больше, см. Расположение набора данных об изменении .
Firebase устанавливает регулярные синхронизации ваших данных от вашего проекта Firebase в BigQuery . Эти ежедневные экспортные операции начинаются в 4:00 в Тихоокеанском времени и обычно заканчиваются через 24 часа.
По умолчанию все приложения в вашем проекте связаны с BigQuery , и любые приложения, которые вы позже добавляете в проект, автоматически связаны с BigQuery . Вы можете управлять тем, какие приложения отправляют данные .
Чтобы деактивировать экспорт BigQuery , не сообщите ваш проект в консоли Firebase .
Включить экспорт данных доставки сообщений
Устройства Android с FCM SDK 20.1.0 или выше могут включить экспорт данных о доставке сообщений их приложения. Экспорт данных отключен по умолчанию на уровне приложения . Программно включение его на уровне экземпляра приложения позволяет вам попросить конечных пользователей разрешить анализировать данные о доставке сообщений (рекомендуется). Где оба установлены, значение уровня экземпляра приложения переопределяет значение уровня приложения.
Прежде чем включить эти параметры, вы должны сначала создать ссылку FCM -Biqquery для вашего проекта, как описано в экспорте данных BigQuery .
Включить экспорт данных доставки для экземпляров приложений
В большинстве случаев мы рекомендуем включить экспорт данных о доставке сообщений только на уровне экземпляра приложения и оставить его отключенным на уровне приложения.
FirebaseMessaging.getInstance().setDeliveryMetricsExportToBigQuery(true)
Включить экспорт данных доставки для приложения
Если вы предпочитаете включить экспорт на уровне приложения, обязательно не вызовуте метод setDeliveryMetricsExportToBigQuery
и добавьте следующее свойство в объект приложения в манифесте вашего приложения:
<application>
<meta-data android:name="delivery_metrics_exported_to_big_query_enabled"
android:value="true" />
</application>
Какие данные экспортируются в BigQuery?
Обратите внимание, что нацеливание на несвежие токены или неактивные регистрации могут раздуть некоторые из этих статистических данных.
Схема экспортированной таблицы:
_Partitiontime | ТАЙМ-МЕТКА | Этот псевдо столбец содержит временную метку для начала дня (в UTC), в которой данные были загружены. Для раздела yyyymmdd этот псевдо-столбец содержит значение времени значения ('yyyy-mm-dd'). |
event_timestamp | ТАЙМ-МЕТКА | TimeStance события, записанная сервером |
Project_number | ЦЕЛОЕ ЧИСЛО | Номер проекта идентифицирует проект, который отправил сообщение |
message_id | НИТЬ | Идентификатор сообщения идентифицирует сообщение. Сгенерированный из идентификатора приложения и временной метки, идентификатор сообщения может, в некоторых случаях, не быть глобально уникальным. |
exance_id | НИТЬ | Уникальный идентификатор приложения, в которое отправляется сообщение (когда доступно). Это может быть идентификатор экземпляра или идентификатор установки Firebase . |
message_type | НИТЬ | Тип сообщения. Может быть сообщением об уведомлении или сообщением данных. Тема используется для определения исходного сообщения для темы или кампании. Последующие сообщения - это либо сообщение уведомления, либо сообщение данных. |
sdk_platform | НИТЬ | Платформа приложения получателя |
app_name | НИТЬ | Имя пакета для приложений Android или идентификатор пакета для приложений для iOS |
COLLAPSE_KEY | НИТЬ | Ключ краха идентифицирует группу сообщений, которые можно обрушить. Когда устройство не подключено, только последнее сообщение с данным ключом обрушения находится в очереди на возможную доставку |
приоритет | ЦЕЛОЕ ЧИСЛО | Приоритет сообщения. Допустимые значения являются «нормальными» и «высокими». На iOS они соответствуют приоритетам APN 5 и 10 |
Ттл | ЦЕЛОЕ ЧИСЛО | Этот параметр указывает, как долго (в секунды) сообщение следует хранить в хранилище FCM, если устройство не в автономном режиме |
тема | НИТЬ | Название темы, на которую было отправлено сообщение (когда применимо) |
bulk_id | ЦЕЛОЕ ЧИСЛО | Основной идентификатор идентифицирует группу связанных сообщений, таких как конкретная отправка в тему |
событие | НИТЬ | Тип события. Возможные значения:
|
Analytics_label | НИТЬ | С помощью API HTTP V1 , Analytics Label может быть установлен при отправке сообщения, чтобы отметить сообщение для аналитических целей |
Что вы можете сделать с экспортируемыми данными?
В следующих разделах предлагаются примеры запросов, которые вы можете запустить в 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 = <your message id>;
отправленного в конкретную тему, измените этот запрос, чтобы заменить AND 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;