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

时间:2016-06-13 11:57:36

标签: 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密钥? Android API密钥有任何限制吗?或者,如果通知消息超过每日限制,GCM服务器是否阻止通知/ GCM服务器使Android API密钥无效?

2 个答案:

答案 0 :(得分:62)

更新:正在使用的术语是 服务器密钥

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

更新GCM docs中有一条明显的说明:

  

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

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

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

  1. 转到Firebase Console并点击创建新项目
  2. 填写您想要的项目名称并选择您的国家/地区。在此之后,新项目应该是活跃的。
  3. 然后在左侧面板上,点击齿轮按钮,然后选择项目设置
  4. 然后转到云消息传递标签
  5. 对于旧的GCM项目,您只需将项目导入Firebase控制台:

    1. 转到Firebase Console并点击 IMPORT PROJECT
    2. 选择要导入的项目和您所在的国家/地区。
    3. 点击 ADD FIREBASE 。在此之后,新项目应该是活跃的。
    4. 然后在左侧面板上,点击齿轮按钮,然后选择项目设置
    5. 然后转到云消息传递标签
    6. 出于某种原因,现在只有一个服务器密钥可用于GCM。 Android Key并不是唯一似乎无效的,所有其他客户端API密钥(浏览器,iOS,Android)都是。

      当涉及Server Key的描述时:

        

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

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

      如果您将FCM docsGCM docs(在 凭据 下)进行比较,您会发现在GCM中,它只表示API密钥,在FCM中,它已经指定了一个服务器密钥。那么,FCM是GCM的新版本,可能与它有关吗?我不太确定,但我认为你得到了我所说的要点。

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

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

      希望将来能解释原因。

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

      1. 转到Google Developers Console
      2. 在左窗格中,单击凭据
      3. 在“凭据”标签下,点击创建凭据
      4. 选择 API密钥
      5. --- 开发人员控制台中的更新会切断此步骤 ---

        1. 选择服务器密钥
        2. 填写详细信息。
        3. 点击创建
        4. 到那时,服务器密钥应该可用。

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

          更新:在创建没有限制的API密钥时,它会显示一个通知(感叹号),表明您的API密钥容易受到攻击,这就是为什么非常鼓励为您的API密钥添加限制。一个post遇到了这个问题,添加限制就能解决它。

答案 1 :(得分:-1)

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

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

$Key = 'someKey';

这个解决了错误..

$Key = "someKey";