24

我为我的Android应用程序创建了GCM推送通知的Android API密钥。从过去两天开始,GCM服务器在PHP中返回未经授权(401)响应。GCM的API密钥突然无效?未授权(401)错误

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

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

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

+0

您是否更新了PHP脚本中的必要凭证?您是否在Google开发者控制台中包含了您的包名? –

+0

@kumar我更新了我的答案。一探究竟。如果你正在寻找官方理由,似乎还没有任何披露。 –

+0

嗨@kumar,我今天也遇到类似的问题。自2年来一直运行良好,但自从星期五以来,我开始接受401未经授权的错误。尝试重新生成服务器密钥,但没有成功。 你是否设法解决它? – Shubhral

回答

60

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

就在最近,现在有一个即将推出的Firebase云消息传递令牌(FCM令牌)。这在Firebase控制台的云消息传递标签中可见。


更新:现在在GCM docs可见的纸条,上面写着:

从2016年9月开始的新服务器密钥只能在火力地堡控制台创建使用的Cloud Messaging标签设置面板。需要创建新服务器密钥的现有项目可以导入Firebase console而不影响其现有配置。


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

如果您刚刚开始使用GCM,而不是在Google Developers Console中创建项目,请在Firebase控制台中执行该项目。创建项目后,只需使用自动生成的服务器密钥。下面是在哪里可以找到服务器的关键步骤:

  1. 转到您的Firebase Console并点击创建新项目
  2. 填写您想要的项目名称并选择您的国家。在此之后,新项目应该是活跃的。
  3. 然后在左侧面板上,点击齿轮按钮并选择项目设置
  4. 然后转到Cloud-Messaging标签

对于老项目GCM,你可以简单地导入项目到火力地堡控制台:

  1. 转到您的Firebase Console并点击导入项目
  2. 选择您要导入的项目和您的国家。
  3. 点击ADD FIREBASE。在此之后,新项目应该是活跃的。
  4. 然后在左侧面板上,点击齿轮按钮并选择项目设置
  5. 然后转到Cloud-Messaging标签

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


当属于Server Key的描述:

创建,如果你的应用程序运行在服务器上使用服务器密钥。

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

如果比较FCM docsGCM docs(下凭证),你可以看到,在GCM,它只规定API密钥,而在FCM,它已经指定一个服务器密钥。那么,FCM是GCM的新版本,可能与它有什么关系?我不太确定,但我认为你明白了我的意思。

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


默认情况下,通过以下步骤Configure your API Project去后,服务器API密钥生成(I通过选择Android应用测试它)。 也一样。每当我创建一个新项目时,它都会自动生成一个服务器密钥。

希望未来会有解释为什么。


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

  1. 转到您的Google Developers Console
  2. 在左窗格中,单击证书
  3. 在凭证选项卡,点击创建凭证
  4. 选择API密钥

--- 更新在Dev elopers控制台削减步骤这里 ---

  • 选择服务器密钥
  • 填写详细信息。
  • 点击创建
  • 服务器密钥应由然后可用。


    更新:好像有生成API密钥时,最近的变化。直到上面提到的步骤4为止。但是,在选择API密钥后,它将直接创建API密钥而不询问它是什么类型的密钥(服务器,Android,浏览器,iOS)。它只会允许您设置一些限制根据您打算生成哪个API密钥,这是可见的。


    更新:当没有任何限制创建API密钥,它显示一个通知(感叹号),你的API密钥是脆弱的,这就是为什么它被非常鼓励为你添加您的API密钥的限制。其中一个post发生此问题,并且添加了限制即可解决该问题。

    +0

    谢谢他为我工作。这个问题让我疯狂! – JasJar

    +1

    '服务器密钥'不再是一个选项。所以我选择了“无限制”,并且API密钥说无效。 – peterept

    +0

    @peterept我刚查过。实际上已经没有选择了。当你选择创建一个API密钥时,它只是创建一个。当我昨天尝试时,并不是这样,最近必须改变。但是,如果您选择添加限制,则可以选择可以使用的限制。我会环顾四周,并在这里提供我的答案的更新。 –

    0

    这可能是奇数给你,但是这是解决了这个问题对我来说 ...

    在我的后端

    ,...这一个产生的错误..

    $Key = 'someKey'; 
    

    这一个解决了错误..

    $Key = "someKey";