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

升级至FCM v1后,Azure通知中心模板推送通知无法送达

问题分析与解决方案

迁移至FCM v1后,原生通知可正常发送但模板通知失败,说明FCM v1基础通信链路正常,问题集中在模板格式适配、设备注册平台匹配这两个核心点上,以下是具体排查和解决步骤:


1. 校验FCM v1模板格式合法性

FCM v1对消息结构有严格要求,模板必须嵌套在message字段下,同时注意代码中的字符串转义问题:

  • 错误示例(易出现引号未转义问题):
    // 错误:直接使用未转义的双引号会导致语法错误
    string template = "{ "message" : { "notification" : { "body" : "$(message)", "title" : "Test" }}}";
    
  • 正确模板写法(二选一):
    // 方式1:转义双引号
    string template = "{\"message\":{\"notification\":{\"body\":\"$(message)\",\"title\":\"Test\"}}}";
    // 方式2:使用C#逐字字符串(@前缀)避免转义
    string template = @"{
        ""message"": {
            ""notification"": {
                ""body"": ""$(message)"",
                ""title"": ""Test""
            }
        }
    }";
    

2. 确认设备Installation的Platform字段

必须保证目标设备的Installation记录中Platform字段为FcmV1,而非旧版Gcm。可通过代码查询验证:

var installation = await client.GetInstallationAsync("61D21000-XXXX-");
// 输出必须为 NotificationPlatform.FcmV1
Console.WriteLine($"当前设备平台:{installation.Platform}");

如果平台不符,需重新创建/更新Installation记录,指定正确平台:

var installation = new Installation
{
    InstallationId = "61D21000-XXXX-",
    Platform = NotificationPlatform.FcmV1,
    PushChannel = "YOUR_FCM_V1_DEVICE_TOKEN",
    Templates = new Dictionary<string, InstallationTemplate>
    {
        {
            "defaultTemplate",
            new InstallationTemplate
            {
                Body = @"{
                    ""message"": {
                        ""notification"": {
                            ""body"": ""$(message)"",
                            ""title"": ""Test""
                        }
                    }
                }"
            }
        }
    }
};
await client.CreateOrUpdateInstallationAsync(installation);

3. 捕获具体错误信息定位问题

避免使用.Result阻塞调用,改用await并捕获异常,获取详细错误日志:

try
{
    var templateParams = new Dictionary<string, string>
    {
        { "message", "测试模板通知内容" }
    };
    var outcome = await client.SendTemplateNotificationAsync(
        templateParams, 
        "$InstallationId:{61D21000-XXXX-}"
    );
    // 打印整体发送状态
    Console.WriteLine($"发送状态:{outcome.State}");
    // 打印各平台的详细结果
    foreach (var platformResult in outcome.Results)
    {
        Console.WriteLine($"平台[{platformResult.Key}]结果:{platformResult.Value}");
    }
}
catch (NotificationHubException ex)
{
    Console.WriteLine($"错误信息:{ex.Message}");
    Console.WriteLine($"错误详情:{ex.Details}");
}

常见错误原因:

  • 模板格式不符合FCM v1规范(如缺少message嵌套)
  • Installation的Platform与模板注册平台不匹配
  • Firebase服务账号权限配置不全

4. Azure门户测试模板通知的注意事项

在Azure门户测试时,必须:

  • 选择FCM v1作为目标平台,而非旧版GCM
  • 模板内容严格遵循FCM v1的message结构
  • 填写正确的参数键值对(如message:测试内容)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 21:42:39