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

我为我的Android应用程序创build了GCM推送通知的Android API密钥。从最近两天开始,GCM服务器在PHP中返回Unauthorized(401)响应。

Android API密钥是否有任何理由无效/过期? 或者GCM已弃用Android API密钥?

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

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

Solutions Collecting From Web of "GCM的API密钥突然失效? 未经授权(401)错误"

更新 :正在使用的术语返回到服务器密钥

就在最近,现在已经推出了Firebase云消息传递令牌 (FCM令牌)。 这在Firebase控制台的“云消息传递”标签中可见。


更新 : GCM文档中现在有一个可见的注释:

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


更新 :似乎从GCM迁移到FCM修复了401未授权错误的问题。

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

  1. 转到您的Firebase控制台 ,然后点击创build新项目
  2. 填写您想要的项目名称并select您的国家。 在此之后,新的项目应该是活跃的。
  3. 然后在左侧面板上,点击齿轮button,然后select项目设置
  4. 然后转到“ 云消息传递”选项卡

对于旧的GCM项目 ,您可以简单地将项目导入到Firebase控制台:

  1. 转到您的Firebase控制台 ,然后点击导入项目
  2. select你想要导入的项目和你的国家。
  3. 点击ADD FIREBASE 。 在此之后,新的项目应该是活跃的。
  4. 然后在左侧面板上,点击齿轮button,然后select项目设置
  5. 然后转到“ 云消息传递”选项卡

出于某种原因,现在只有服务器密钥可以与GCM一起工作。 Android密钥并不是唯一一个看起来无效的API,所有其他的客户端API密钥(Browser,iOS,Android)都是。


当涉及服务器密钥的描述时:

如果您的应用程序在服务器上运行,请创build并使用服务器密钥。

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

如果您将FCM文档与GCM文档 (在凭证下)进行比较,您可以看到,在GCM中,它只声明API密钥,而在FCM中,它已经指定了服务器密钥。 那么FCM是GCM的新版本,可能与它有什么关系呢? 我不太确定,但我想你明白了我的意思。

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


默认情况下,在完成“ configuration您的API项目”步骤之后,会生成一个服务器API密钥(我通过selectAndroid应用程序对其进行testing)。 Firebase-cloud-messaging也一样 。 每当我创build一个新的项目,它只是自动生成一个服务器密钥。

希望未来能有解释的原因。


要继续前进,并添加如何创build服务器密钥的步骤。 以防其他人混淆,或新手不知道如何。

  1. 转到您的Google Developers Console
  2. 在左侧窗格中,单击凭证
  3. 在“凭据”选项卡下,单击“ 创build凭证”
  4. selectAPI密钥

开发者控制台中的更新在这里削减了步骤

  1. select服务器密钥
  2. 填写细节。
  3. 点击创build

服务器密钥应该可用。


更新 :生成一个API密钥似乎有一个最近的变化。 直到上面提到的第4步,这是一样的。 但是,selectAPI密钥后,它将直接创build一个API密钥,而不必询问它是什么types的密钥(服务器,Android,浏览器,iOS)。 它只会允许您设置一些显示取决于您打算生成的API密钥的限制


更新 :创build无限制的API密钥时,会显示通知(感叹号),表示您的API密钥易受攻击,这就是为什么强烈build议您为API密钥添加限制的原因。 一个职位有这个问题,并添加一个限制能够解决它。

这可能对你来说很奇怪,但是这是为我解决的

在我的后端,这个产生了错误..

 $Key = 'someKey'; 

这个解决了错误

 $Key = "someKey";