GCM的API密钥突然无效?未经授权(401)错误

kum*_*mar 25 android firebase google-cloud-messaging firebase-cloud-messaging

我为我的Android应用程序创建了一个用于GCM推送通知的Android API密钥.从过去两天开始,GCM服务器在PHP中返回Unauthorized(401)响应.

Android API密钥是否有任何原因无效/过期?或者GCM是否弃用了Android API密钥?

我还没有得到关于为什么Android API密钥无效的正确解释?他们中的大多数人更喜欢使用服务器密钥而不是GCM的Android API密钥,但没有提到为什么不使用Android API密钥.

为什么不在GCM中使用Android API Key?Android API密钥有任何限制吗?或者,如果通知消息超过每日限制,GCM服务器是否阻止通知/ GCM服务器使Android API密钥无效?

AL.*_*AL. 63

更新:使用的术语是返回服务器密钥.

就在最近,现在正在推出Firebase云消息传递令牌(FCM令牌).这在Firebase控制台的Cloud Messaging选项卡中可见.


更新:GCM文档中现在有一个明显的说明:

从2016年9月开始,只能使用"设置"面板的" 云消息传递"选项卡在Firebase控制台中创建新的服务器密钥.可以在Firebase控制台中导入需要创建新服务器密钥的现有项目,而不会影响其现有配置.


更新:似乎从GCM迁移到FCM修复了401 Unauthorized Error的问题.

如果您刚刚开始使用GCM,而不是在Google Developers Console中创建项目,请在Firebase控制台中执行此操作.创建项目后,只需使用自动生成的服务器密钥.以下是查找服务器密钥的步骤:

  1. 转到Firebase控制台并单击CREATE NEW PROJECT.
  2. 填写您想要的项目名称并选择您的国家/地区.在此之后,新项目应该是活跃的.
  3. 然后在左侧面板上,单击齿轮按钮并选择" 项目设置".
  4. 然后转到Cloud-Messaging选项卡.

对于旧的GCM项目,您只需将项目导入Firebase控制台:

  1. 转到Firebase控制台并单击IMPORT PROJECT.
  2. 选择要导入的项目和您所在的国家/地区.
  3. 点击ADD FIREBASE.在此之后,新项目应该是活跃的.
  4. 然后在左侧面板上,单击齿轮按钮并选择" 项目设置".
  5. 然后转到Cloud-Messaging选项卡.

出于某种原因,现在只有一个服务器密钥可用于GCM.Android Key并不是唯一似乎无效的,所有其他客户端API密钥(浏览器,iOS,Android)都是.


当涉及Server Key的描述时:

如果应用程序在服务器上运行,请创建并使用服务器密钥.

使用服务器密钥是合乎逻辑的,因为您在服务器上使用API​​密钥,并且它正在与GCM连接服务器一起使用.

如果将FCM文档GCM文档(在凭据下)进行比较,则可以看到在GCM中,它仅表示API密钥,而在FCM中,它已指定服务器密钥.那么,FCM是GCM的新版本,可能与它有关吗?我不太确定,但我认为你得到了我所说的要点.

更新:在GCM文档中,现在指示了服务器密钥.


默认情况下,在完成配置API项目步骤后,将生成服务器API密钥(我通过选择Android应用程序对其进行了测试).同去与.每当我创建一个新项目时,它只会自动生成一个服务器密钥.

希望将来能解释原因.


继续前进并添加有关如何创建服务器密钥的步骤.以防其他人感到困惑,或者新手不确定如何.

  1. 转到您的Google Developers Console
  2. 在左窗格中,单击 Credentials
  3. 在"凭据"选项卡下,单击"是" Create Credentials
  4. 选择 API Key

--- 开发人员控制台中的更新减少了这里的步骤 ---

  1. 选择 Server Key
  2. 填写详细信息.
  3. 点击 Create

那时服务器密钥应该可用.


更新:生成API密钥似乎最近发生了变化.直到我上面提到的第4步,它才一样.但是,在您选择API密钥后,它将直接创建API密钥,而不会询问它是什么类型的密钥(服务器,Android,浏览器,iOS).它只允许您设置一些可见的限制,具体取决于您要生成的API密钥.


更新:创建没有限制的API密钥时,它会显示一个通知(感叹号),表明您的API密钥容易受到攻击,这就是为什么强烈建议您为API密钥添加限制.有一个帖子有这个问题,并且添加限制能够解决它.

  • @AL.所以最后我的Android应用程序现在正在运行而不进行任何代码更改.我所做的只是将我现有的基于GCM的项目导入FCM(Firebase云消息传递).当我在FCM中检查项目设置时,它生成了"服务器密钥".我在我的后端服务器(基于C#)上传了这个`Server Key`,我可以发送Push Notifications.干杯.感谢您的时间和考虑. (4认同)