Azure通知中心Android FCMv1推送消息无法正常工作排查
Android推送失效的代码问题分析与修复
你的代码存在FCM V1消息结构错误,这是导致Android推送无法生效的核心原因,具体问题和修复方案如下:
问题点
你当前的消息体在message字段里嵌套了FCM所需的内容,但createFcmV1Notification要求直接传入FCM V1标准的消息负载,不需要额外的message外层包裹。这种结构不匹配会导致Azure Notification Hubs发送的推送无法被Firebase正确解析。
另外,当前代码没有显式设置Android推送的优先级,可能导致后台状态下推送延迟或无法触发。
修复后的代码
import { createFcmV1Notification } from "@azure/notification-hubs"; import { createClientContext, sendNotification } from "@azure/notification-hubs/api"; const androidPushToken = context.device.pushToken; const clientContext = createClientContext( process.env.PUSH_CONNECTION_STRING || "", process.env.PUSH_HUB_NAME || "" ); // 修正FCM V1消息结构:直接使用顶层字段,去掉外层message包裹 const notificationBody = { notification: { title: "Default title", body: "Default message", }, android: { data: { test: "test" }, priority: "high" // 显式设置高优先级,确保推送及时到达 }, }; // 直接传入修正后的消息体,无需JSON.stringify(createFcmV1Notification会自动处理序列化) const notification = createFcmV1Notification(notificationBody); const res = await sendNotification(clientContext, notification, { deviceHandle: androidPushToken, });
关键说明
- 消息结构修正:FCM V1的API要求消息负载直接包含
notification、android等顶层字段,不需要嵌套在message对象中。原代码多了一层不必要的包装,导致Firebase无法识别有效内容。 - 移除手动JSON序列化:
createFcmV1Notification会自动处理消息体的序列化,无需提前用JSON.stringify转换,手动序列化反而会导致格式错误。 - 添加优先级设置:显式设置
android.priority: "high"可以确保推送在Android设备后台状态下也能及时弹出通知,避免被系统限流。
验证修复后,Android设备应该能正常接收推送,和Firebase测试的结果一致。
内容的提问来源于stack exchange,提问作者apes-together-strong
相关产品推荐
相关产品推荐

