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

VB.NET向Android模拟器发送FCM通知遇401未授权错误求助

解决VB.NET发送FCM通知时的401 Unauthorized问题

看起来你遇到了FCM发送请求时的401未授权问题,而且不管是VB.NET代码还是Postman都复现了这个问题——这说明问题大概率出在服务器密钥的配置或者权限设置上,而不是代码本身(毕竟Firebase控制台能正常发送,说明设备端和FCM的连接是没问题的)。下面我会一步步帮你排查和解决:

1. 先确认服务器密钥的正确性

这是最常见的原因,很多人会把Web API密钥和服务器密钥搞混:

  • 打开Firebase控制台,进入你的项目→项目设置→云消息传递标签页;
  • 找到“服务器密钥”这一项,复制完整的密钥字符串;
  • 对比你代码里的serverKey,确保没有多空格、少字符,或者用了已经作废的旧密钥(如果之前重新生成过密钥的话)。

2. 简化请求头,移除不必要的Sender头

FCM现在已经不再强制要求Sender: id={senderID}这个请求头,甚至有些情况下这个头会导致验证问题。你可以先把这行代码注释掉或者删除:

'.Headers.Add(String.Format("Sender: id={0}", senderID))

只保留Authorization: key={serverKey}这一个认证头即可。

3. 检查服务器密钥的IP限制(如果设置过)

如果你之前给服务器密钥配置了IP白名单,那么你的本地开发机器或者Postman的出口IP不在名单里就会被拒绝:

  • 进入Firebase控制台→项目设置→服务帐户→API密钥;
  • 找到对应的服务器密钥,查看它的“应用限制”;
  • 如果设置了IP限制,要么暂时取消限制(测试阶段),要么把你的公网IP添加到白名单中。

4. 修正请求体的格式问题

你的代码里有一个小的格式错误:content_available不属于notification对象的属性,它是FCM请求的顶级参数(或者属于data部分)。虽然这个不一定直接引发401,但可能导致请求不被正确解析,建议修正:

首先更新你的WebRequestFcmData类,添加顶级的content_available和priority属性:

Public Class WebRequestFcmData
    Public Property registration_ids As List(Of String)
    Public Property notification As New NotificationData
    Public Property content_available As Boolean ' 移到顶级
    Public Property priority As String ' 新增顶级优先级参数
End Class

Public Class NotificationData
    Public Property body As String
    Public Property title As String
    Public Property sound As String
    ' 移除content_available和priority,它们不在notification对象里
End Class

然后在构建请求体的时候调整赋值:

Dim webObject As New WebRequestFcmData
With webObject
    .registration_ids = deviceIDList
    .notification.title = title
    .notification.body = bodyMsg
    .notification.sound = "default"
    .content_available = True ' 顶级参数
    .priority = "high" ' 顶级参数,确保高优先级
End With

5. Postman测试的正确姿势

用Postman测试时,确保:

  • 请求方法是POST,URL是https://fcm.googleapis.com/fcm/send;
  • 请求头只保留Content-Type: application/json和Authorization: key=你的服务器密钥;
  • 请求体格式正确,比如:
{
  "registration_ids": ["你的设备ID"],
  "notification": {
    "title": "测试标题",
    "body": "测试内容",
    "sound": "default"
  },
  "content_available": true,
  "priority": "high"
}

按照以上步骤调整后,再测试你的VB.NET代码,应该就能解决401的问题了。

内容的提问来源于stack exchange,提问作者Pawich S.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 05:14:41