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

使用C# .NET的FCM HTTP v1 SDK发通知时遇未知错误码

解决FCM HTTP v1 SDK生产环境返回Unknown错误的排查步骤

1. 验证服务账号配置

  • 确认生产环境使用的服务账号JSON文件正确,且该账号已配置Firebase Cloud Messaging Admin角色(在GCP IAM控制台设置)。注意Legacy API用的是服务器密钥,v1 SDK依赖服务账号权限,不要混淆配置。
  • 检查生产环境的配置文件/环境变量中,服务账号的路径或内容是否与测试环境一致,同时确保程序有读取该JSON文件的权限。

2. 排查网络连通性

  • 生产环境服务器必须能访问fcm.googleapis.com:443,检查防火墙、安全组、代理是否允许出站请求到该域名。可在生产服务器上执行curl https://fcm.googleapis.com/v1/projects/[你的项目ID]/messages:send测试连通性,确认能正常建立SSL连接。
  • 若使用代理,需确保Firebase SDK已正确配置代理(可通过自定义HttpClient传入SDK完成配置)。

3. 检查消息与设备令牌有效性

  • 拆分组播消息,先测试单条消息发送,排查是否因某几个无效令牌导致批量错误。SendEachForMulticastAsync返回的BatchResponse中,每个SendResponse都包含具体错误信息,遍历打印每个结果的ErrorCode和Reason,定位问题设备。
  • 生产环境的设备令牌可能存在过期、App卸载后失效的情况,需及时清理无效令牌。

4. 核对SDK版本与依赖

  • 确保生产环境的FirebaseAdmin NuGet包版本与测试环境完全一致,避免版本差异引发兼容性问题。优先使用最新稳定版,但不要跨大版本升级(比如从2.x直接跳到4.x)。
  • 检查项目依赖的Google.Apis系列包是否存在版本冲突,Firebase SDK依赖这些Google API包,版本不匹配可能触发隐性错误。

5. 捕获详细错误日志

仅靠FirebaseException.ErrorCode = Unknown无法定位问题,需捕获异常的深层信息并开启SDK详细日志:

try
{
    BatchResponse pushRes = await FirebaseMessaging.GetMessaging(firebaseApp).SendEachForMulticastAsync(message);
}
catch (FirebaseException ex)
{
    // 打印详细错误信息
    Console.WriteLine($"Firebase错误: {ex.Message}, 内部错误: {ex.InnerException?.Message}, 堆栈: {ex.StackTrace}");
    // 初始化时开启Firebase详细日志
    FirebaseApp.Create(new AppOptions() { Credential = GoogleCredential.FromFile("path/to/service-account.json") }, loggingEnabled: true);
}

详细日志能暴露底层HTTP请求的真实错误(如401权限失效、403配额超限等),这些通常是Unknown错误的根源。

6. 检查FCM配额与限制

  • 确认生产环境的FCM发送配额充足,未达到每日发送上限(可在Firebase控制台“项目设置-使用情况”查看)。Legacy API与v1 SDK共用配额,若生产环境发送量突增,可能触发限流。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 03:35:01