未经授权的错误401 GCM错误

未经授权的错误401 GCM错误

问题描述:

请注意,这个问题应该与具有相似名称的其他问题有重大区别,因为API在过去几年中似乎发生了显着变化。未经授权的错误401 GCM错误

我正尝试使用GCM向iOS设备发送推送通知。

我有(我认为)主要是正确设置它。我有一个来自GCM的API密钥,我已经在Apple Developer上设置了我的SSL证书,并且我的设备正确地获得了注册ID。

我已经写了一个小测试脚本来尝试测试它,并且在我的结果中出现了401未经授权的错误。这里是我的代码:

define('API_ACCESS_KEY', '<API KEY HERE>'); 

$fields = array(
    'to' => '<REG_ID HERE>', 
    'registration_ids' => '<REG_ID HERE>', 
    'notification' => array('body' => 'test', 'title' => 'Test'), 
); 

    $headers = array(
    'Authorization: key=' . API_ACCESS_KEY, 
    'Content-Type: application/json' 
); 

    $ch = curl_init(); 

    curl_setopt($ch, CURLOPT_URL, 'https://gcm-http.googleapis.com/gcm/send'); 

    curl_setopt($ch, CURLOPT_POST, true); 
    curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); 

    curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($fields)); 

    $result = curl_exec($ch); 

    curl_close($ch); 
我目前使用无限制的键用于测试目的

This key is unrestricted. To prevent unauthorized use and quota theft, restrict your key. 
Key restriction lets you specify which web sites, IP addresses, or apps can use this key. 

据我所知,这应该白名单的一切,不应该吗?几年前,有关于如何将服务器列入白名单的一些答案,但似乎是API的旧界面/设置。

什么可能导致此问题?

更新:现在在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标签

我已经看到了很多这种担心在过去的几天里。似乎无限制的密钥会返回401错误,这可能是因为它们正在强制执行所有API密钥的安全性(,您会在其中看到警告)。

因此,我通常建议是利用IP地址限制(看作为这是GCM,它应该是一个服务器密钥)并添加您的服务器IP地址。查看我的回答here

+1

是的,切换到IP地址似乎解决了这个问题。我得到了另一个错误(invalidRegistration或类似的东西),但这似乎没有关系,所以我会在这里给你答案。 –

+0

太棒了!它现在有效。谢谢。 – Mohanraj