完成FCM交付指标配置后,BigQuery无MESSAGE_DELIVERED事件数据
解决FCM BigQuery仅上报MESSAGE_ACCEPTED无MESSAGE_DELIVERED问题
针对你遇到的BigQuery仅接收MESSAGE_ACCEPTED事件、缺失MESSAGE_DELIVERED的问题,可按以下步骤排查修复:
1. 确认客户端SDK版本兼容性
你当前使用的FCM客户端SDK为9.8.4,experimentalSetDeliveryMetricsExportedToBigQueryEnabled作为实验性API,旧版本可能存在交付事件上报的缺陷。建议升级至v9.x系列的最新稳定版(或直接迁移到v10+),确保API的完整功能支持。
2. 验证Data消息的客户端处理逻辑
MESSAGE_DELIVERED事件的触发依赖客户端成功处理消息:
- 前台场景:必须确保
onMessage回调正常执行(无未捕获异常),FCM SDK仅在回调触发后才会上报交付事件。 - 后台Service Worker场景:
onBackgroundMessage回调需完整执行,且showNotification调用成功。检查Service Worker控制台日志,确认:- 回调内无报错中断流程
- 用户已授予浏览器通知权限,未被阻止
3. 调整实验性API的调用时机
在Service Worker中,建议将experimentalSetDeliveryMetricsExportedToBigQueryEnabled的调用放在activate事件内,确保在Service Worker激活后再启用上报:
self.addEventListener('activate', (event) => { event.waitUntil( Promise.all([ experimentalSetDeliveryMetricsExportedToBigQueryEnabled(messaging, true), self.clients.claim() ]) ); });
4. 检查Admin SDK消息发送参数
确保发送的是纯Data消息,不要混合notification字段(混合后会被识别为Notification消息,交付判定逻辑不同)。正确的Data消息发送示例:
const message = { token: 'DEVICE_TOKEN', data: { title: 'Test Title', body: 'Test Body' } }; admin.messaging().send(message);
5. 确认FCM BigQuery配置与数据延迟
- 登录FCM控制台,检查BigQuery导出配置是否勾选了DELIVERED事件类型
- FCM数据导出到BigQuery存在1-2小时的延迟,请勿立即查询,等待足够时间后再验证数据
6. 排查浏览器限制
部分浏览器(如Chrome)在标签页后台或浏览器最小化时,会限制Service Worker的执行优先级,可能导致交付事件上报延迟。可先在前台打开页面测试消息发送,确认是否能正常触发MESSAGE_DELIVERED。
内容的提问来源于stack exchange,提问作者Ali Tavafi
相关产品推荐
相关产品推荐

