谷歌Firebase下行消息的HTTP POST请求中,“Authorization”部分是什么?

26

我想尝试使用谷歌的FCM消息服务发送一条消息,根据文档所述,HTTP请求应该像这样:

https://fcm.googleapis.com/fcm/send
Content-Type:application/json
Authorization:key=AIzaSyZ-1u...0GBYzPu7Udno5aA

{ "data": {
    "score": "5x1",
    "time": "15:10"
  },
  "to" : "bk3RNwTe3H0:CI2k_HHwgIpoDKCIZvvDMExUdFQ3P1..."
}

我的问题是我不知道Authorization应该填什么值,而当我删除这个头部然后发送请求时,我会收到401:未经授权的错误。我想这必须是某种API密钥之类的东西,但我在我的项目中找不到它。有人能帮我吗?

PS:出于测试目的,我目前正在使用此网站向我的设备发送消息。

3个回答

33
根据 Firebase云消息传递服务器文档

身份验证

要发送消息,应用程序服务器发出POST请求。例如:

https://fcm.googleapis.com/fcm/send

消息请求由两部分组成:HTTP标头和HTTP正文。

HTTP标头必须包含以下标头:

  • Authorization: key=YOUR_SERVER_KEY

确保这是“服务器”密钥,其值在 Firebase 项目控制台的“项目设置”>“云消息传递”下可用。客户端密钥或任何其他密钥都将被FCM拒绝。

  • Content-Type:application/json用于JSON;application/x-www-form-urlencoded;charset=UTF-8用于纯文本。

     If Content-Type is omitted, the format is assumed to be plain text.
    

更新(2016/11/16)

也许您应该考虑使用 FCM 令牌而不是服务器密钥,如以下截图中的说明

enter image description here


更新(2016/12/08)

Firebase 已将服务器密钥升级到新版本,并建议您升级到最新版本。请参见下面的屏幕截图:

enter image description here


7
非常感谢。在我看来,这份文件组织得不够好,但再次感谢您的回答。 - roostaamir
嘿@BNK,你能发一下curl或httpie代码的示例吗?我好像无法让授权工作。谢谢! - FredLoh
2
在我的回答中的Google链接中,@FredLoh,在“检查服务器密钥的有效性”一节中,您会找到curl示例。 - BNK
我收到了HTTP/1.1 400 Bad Request错误,我的POST url是fcm.googleapis.com/fcm/send,Content-Type是application/json,Authorization:key=GduFdg......wK8B4Uwk2xxx......。JSON数据体如下:{ "data": { "message": "post message", "version" : "2.0: }, "to" : "fasdsadasdsadasj9N40:APA91b....5nX--HG.....7wyTCN" } 请问哪里出了问题? - Sagar Patil
1
@SagarPatil,你得到了400,而不是OP的401,所以提醒一下。https://firebase.google.com/docs/cloud-messaging/http-server-ref#error-codes - BNK

2

0
这是您的服务器密钥,您可以在console.developers.google.com或Firebase项目控制台的“项目设置>云消息传递”下查看。请注意,该密钥是由Google服务自动生成的。您应该将IP地址添加到G.Console中以限制使用。
另外,请记住设置Content-Type: application/json,否则您将收到Error=MissingRegistration错误。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接