You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用NotificationHubClient发送FCM推送时sessionId属性未接收问题

FCM模板推送sessionId丢失问题排查与解决

问题根因

你遇到的情况是典型的客户端模板注册与服务端推送字段不匹配:

  • 客户端向Notification Hub注册的FCM模板中,没有包含$(sessionId)这个占位符,所以服务端传递的sessionId会被Notification Hub直接过滤,不会出现在推送消息里。
  • 而phone和message是模板里已定义的占位符,哪怕服务端不传值,Notification Hub也会自动填充为空字符串返回给客户端,这就是它们始终存在的原因。

修复步骤

  1. 检查并更新客户端模板注册
    客户端注册模板时,必须在模板JSON中加入sessionId的占位符,示例如下:

    {
      "data": {
        "message": "$(message)",
        "phone": "$(phone)",
        "sessionId": "$(sessionId)"
      }
    }
    

    遗留项目大概率是早期模板没定义这个字段,后续服务端加了参数但没同步更新客户端模板。

  2. 验证模板注册状态
    登录Azure Portal进入你的Notification Hub,查看对应设备注册项的模板内容,确认sessionId占位符是否存在。如果是旧注册项,需要让客户端重新注册或者更新模板。

  3. 优化服务端字段传递逻辑(可选)
    如果你不想让空值字段出现在消息里,可以修改服务端代码,只添加非空的字段:

    public static Dictionary<string, string> GetNotificationBody(string message, string phone = "", string sessionId = "")
    {
        var body = new Dictionary<string, string>();
        if (!string.IsNullOrWhiteSpace(message)) body.Add("message", message);
        if (!string.IsNullOrWhiteSpace(phone)) body.Add("phone", phone);
        if (!string.IsNullOrWhiteSpace(sessionId)) body.Add("sessionId", sessionId);
        return body;
    }
    

    注意:如果模板里的占位符没有标记为可选(比如$(message?)),必须保证对应的字段有值,否则Notification Hub会拒绝推送请求。

关键逻辑说明

Notification Hub模板推送的核心规则:

  • 服务端传递的键必须与客户端模板中的占位符完全匹配,不存在的占位符对应的键会被丢弃。
  • 模板中已定义的占位符,如果服务端没有传对应值,会被替换为空字符串(未标记可选时),或者直接移除该字段(标记可选时)。

内容的提问来源于stack exchange,提问作者coder

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 13:00:18