GCM(Google 云消息)returns 突然 401

GCM (Google Cloud Messaging) returns suddenly 401

来自 Google 的 GCM (Google Cloud Messaging) 服务突然 returns 请求发送 Android 推送通知的 401 是什么原因?调用看起来像这样

curl --header "Authorization: key=<my_android_key>" --header Content-Type:"application/json" https://android.googleapis.com/gcm/send -d "{\"to\":\"/topics/my_topic\", \"data\":{\"category\":\"help\", \"title\":\"Test\", \"text\":\"Test\", \"param\":\"\"}}"

结果是

<HTML>
<HEAD>
<TITLE>Unauthorized</TITLE>
</HEAD>
<BODY BGCOLOR="#FFFFFF" TEXT="#000000">
<H1>Unauthorized</H1>
<H2>Error 401</H2>
</BODY>
</HTML>

更新:

Google 四个可能的名字 causes for this error:

我检查了问题API密钥的有效性here,它似乎是无效的。问题是为什么?到目前为止它曾经工作过。啊。 :-/

您似乎没有为您的应用程序使用来自开发者控制台的服务器密钥。

不确定为什么使用 Android 键 发送推送通知停止工作,因为它以前可以工作。我设法使用 服务器密钥 而不是 Android 密钥 向 Android 应用程序发送推送通知这个:

curl --header "Authorization: key=<my_server_key>" --header Content-Type:"application/json" https://android.googleapis.com/gcm/send -d "{\"to\":\"/topics/my_topic\", \"data\":{\"category\":\"help\", \"title\":\"Test\", \"text\":\"Test\", \"param\":\"\"}}"

显然这似乎是 Android 的正确方法: Why Android key (api key) is invalid or that key is deprecated by GCM server?

我发现一个网站说 "Google made a change that stopped Android Keys from working for GCM/FCM for security reasons" https://groups.google.com/forum/#!msg/firebase-talk/4lCPr-UIuY0/ShWZk6z2AAAJ

所以答案似乎是使用 "Server Key" 发送 Android GCM 消息(而不是 "Android Key")。