使用PHP的GCM实现总是面临未经授权的错误401

使用PHP的GCM实现总是面临未经授权的错误401,php,android,push-notification,google-api,google-cloud-messaging,Php,Android,Push Notification,Google Api,Google Cloud Messaging,我总是得到401错误。请任何人都可以让我知道确切的应该是什么HTTP引用,如果我使用我的本地服务器。i、 e目前我正在使用: http://localhost/GCM/index.php 以及使用它生成API访问密钥 这是我的GCM请求的php代码 $key='mykey'; $headers=array('Contenttype:application/json','Authorization:key='.$key);

我总是得到401错误。请任何人都可以让我知道确切的应该是什么HTTP引用,如果我使用我的本地服务器。i、 e目前我正在使用:

    http://localhost/GCM/index.php 
以及使用它生成API访问密钥

这是我的GCM请求的php代码

                $key='mykey';
                $headers=array('Contenttype:application/json','Authorization:key='.$key);
                $url = 'https://android.googleapis.com/gcm/send';
                $ch = curl_init();
                $curlConfig = array(
                CURLOPT_URL            => $url,
                CURLOPT_POST           => true,
                CURLOPT_RETURNTRANSFER => true,
                CURLOPT_POSTFIELDS     => json_encode(array('field1' => 'some date','field2' => 'some other data',)),
                CURLOPT_HTTPHEADER     => $headers,
                CURLOPT_SSL_VERIFYPEER => false,
                CURLOPT_SSL_VERIFYHOST => false,
                );
                curl_setopt_array($ch, $curlConfig);
                $result = curl_exec($ch);
                curl_close($ch);
                if($result==FALSE){
                    echo curl_error($ch);
                    echo curl_getinfo($ch);
                }else{
                    echo $result;
                }

我可以看到几个错误:

  • Contenttype:application/json
    应该是
    Content-Type:application/json
  • 您忘记在JSON中包含注册ID
  • 我不确定是否需要
    CURLOPT\u SSL\u VERIFYPEER=>false
    CURLOPT\u SSL\u VERIFYHOST=>false

  • 您可以找到许多PHP GCM示例(例如-)。

    这是因为您无法使用IP访问GCM,无法在GOOGLE中了解您的网络IP类型“my IP,然后在GOOGLE\u Api\u控制台中创建服务器密钥,并在服务器密钥生成中使用IP,在本地服务器的php文件中使用服务器密钥,第一个图像显示的是要选择的google控制台中的密钥列表,选择服务器密钥,第二个图像显示的是您需要启用的ip


    我也遇到了同样的问题。结果证明它与IPv6有关!我创建了服务器密钥,如中所述,使用0.0.0/0作为允许的主机IP,但这与IPv6不匹配。因此,我添加了另一个允许的主机行IP作为0::0/0,这很有效(一段时间后,更新缓存配置?)


    将IP字段留空可以使用任何IP,而且更简单。

    在更正标题后感谢Eran,它的工作正常。但我正在使用“允许的任何IP”生成身份验证密钥。这是一个安全问题。在从“”或http:///GCM/index.php 收到相同的401错误。您好@user2173085您有解决方案吗?我也面临同样的问题。嘿,谢谢。。。将IP地址留空是最好的解决方案。。。你解决了我的问题…回答得很好,兄弟,真的很有帮助…:)将IP字段留空解决了我的问题。谢谢这救了我一天,IPv6是我的问题。将0::0/0添加到ip列表后,效果非常好。非常感谢。