Firebase 401未经授权的错误FCM


72

我正在尝试测试Firebase Cloud消息传递API,因为控制台无法提供所有功能(特别是在后台运行应用程序时自定义通知)。但是由于某些原因,我无法使其正常工作,并且始终显示401错误。我调查了这种情况的原因,并在重新生成新的服务器密钥后进行了尝试,但是错误仍然保持不变。令人惊讶的是,当我生成新的服务器密钥时,它没有反映在Firebase控制台中,并且显示服务器密钥为空。另外,我尝试将我的IP地址添加到服务器白名单IP中,但还是没有运气。我已附上我对Postman所做的请求的屏幕截图(我用服务器密钥代替serverKey

我坚持了几个小时,非常感谢您的帮助。在此处输入图片说明


尝试生成一个新密钥并注意设置:key-type = server(没有android,ios或浏览器)和ip-whitelist =保留为空(这将允许所有ips)
Diego Giorgini

我再次生成了一个新密钥,类型是服务器。ip-whitelist留空。仍然是相同的结果:(。只想知道我在提出请求时是否有任何错误?
gaurav jain 2016年

该请求看起来还可以。也许尝试使用curl并发布请求和响应的完整输出。如果找不到解决方案,请联系Firebase支持:firebase.google.com/support/contact/bugs-features
Diego Giorgini

谢谢迭戈,我删除了前面的注释,因为我没有在请求中发送任何通知有效负载,因此模拟器中没有通知,这是我的错误。我将重试并在此处再次发布结果。
gaurav jain

大!因此401是邮递员的问题。关于模拟器,请检查您的应用程序是否可以获得设备令牌。如果是的话,它应该能够接收到消息
Diego Giorgini

Answers:


36

我从您的屏幕截图中注意到,您正在使用“ key:serverKey”。您可以尝试使用“ key = serverKey”代替吗?

另外,您也不需要“ POST fcm.googleapus.com/fcm/send”;这是不正确的json,会解释您看到的错误。请求的URL已在其他位置定义,因此请将其从有效负载中删除。


1
位置0非预期的字符(P):我得到这样的结果:JSON_PARSING_ERROR
拉夫耆那

您能否将JSON负载添加到答案中,以便可以看到JSON的全文?
亚瑟·汤普森

1
您不需要使用“ POST fcm.googleapus.com/fcm/send ”,这不是正确的json,并且可以解释您所看到的错误。请求的URL已在其他位置定义,因此请将其从有效负载中删除。
亚瑟·汤普森

嗨亚瑟,您的上述评论解决了这个问题。如果您将其添加到答案中以便我可以接受,将不胜感激。谢谢。
gaurav jain

@ArthurThompson,您好,这对于获取我们放入数据库中的json并通过GET请求检索它有效吗?我正在尝试通过使用访问令牌下Authorization: Bearer xxx的网站文档(firebase.google.com/docs/reference/rest/database/user-auth)进行传递,但没有运气。仍然得到"Unauthorized request."
Edison Spencer

234

我不知道是否有人将[Web API密钥]用作POSTMAN测试的[YOUR_SERVER_KEY],并不断收到“ 401错误”。[Web API密钥]不是[YOUR_SERVER_KEY]。

您应该转到Firebase控制台并检查以下内容:

获取正确的服务器密钥。

希望对您有所帮助。


我正在尝试使用服务器密钥,但是它不断抛出错误invalid token,有人可以告诉我我做错了什么吗
Gardezi

19

我遇到了同样的问题。

问题是我正在使用旧服务器密钥。当我使用新版本的服务器密钥时,问题解决了。

在您的Firebase控制台中,转到设置->云消息传递

然后使用新的服务器密钥。它比旧版本密钥长。



2

我也面临着相同的问题...我在php中使用curl进行发布,并且仅当我在LocalHost服务器上存储了php文件时,它才起作用。当我尝试通过免费的在线主机访问文件时,它说是Unautorized 401。

因此,我建议您使用Localhost。


PS在FCM中,有一种方法可以允许多个访问客户端,例如Goolge Chrome或android客户端等。 FCM控制台项目中的客户。
Sugam Mankad'6

9
刚刚为我解决了这个问题,我更改了服务器API密钥,该密钥在FCM控制台的“云消息传递”选项卡上提供。在“项目概述”的“管理”中,有“云消息传递”选项卡,它显示了可能使用的SERVER API KEY。
Sugam Mankad

1
第二条评论对我有用。如果您遵循FCM官方文档,则它们会指导您单击“ <齿轮图标>->权限->服务帐户”,然后为您的服务器创建一个新的服务帐户。这将下载.json包含密钥的文件,但是内部的密钥不允许API访问。单击“管理->云消息传递”将提供正确的API密钥。如果您希望FCM工作,请忽略官方文档。
aroth's

1
API密钥错误。我正在使用在开发人员控制台上创建的一个。原来的关键是在console.firebase.google.com>齿轮图标>常规>云消息传递标签上。
黑色


-1

我遇到了同样的问题,我通过使用以下步骤解决了

1-在发送推送的服务器中,仅使用浏览器密钥,您可以从Firebase控制台或google api控制台获取它,如下图所示:-

Google API控制台

Firebase控制台,单击项目->设置

注意:Firebase控制台Web API密钥和Google控制台浏览器密钥相同,您可以使用它们中的任何一个

在此处输入图片说明

在此处输入图片说明

2-如果仅执行第一步,则会出现未授权错误,要解决此问题,您需要在Google控制台中通过添加服务器IP地址(从发送推送的位置)来授权浏览器密钥。在第一张图片上方的Google API控制台中,点击浏览器键右侧的编辑铅笔图标。

在此处输入图片说明

添加您的Ip地址后,单击“保存”。确保发送推送的设备令牌不为空,希望您的推送现在能够成功发送。


请为您的
不满意

1
Frebase控制台与Google控制台浏览器键不同。实际上,作为Firebase文档的一部分,他们建议您仅使用Firebase控制台中的密钥,而不使用任何其他密钥
N Czar
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.