使用PHP的GCM实现始终面临未授权错误401

时间:2013-09-11 08:25:33

标签: php android push-notification google-api google-cloud-messaging

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

    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;
                }

3 个答案:

答案 0 :(得分:8)

我与同样的问题作斗争。原来它与IPv6有关!我使用 0.0.0.0/0 作为允许的主机IP创建了http://developer.android.com/google/gcm/gs.html中描述的服务器密钥,但这与IPv6不匹配。所以我添加了另一个允许的主机线IP为 0 :: 0/0 并且有效(稍后更新缓存配置?)。

将IP字段留空可以使用任何IP并且更容易。

答案 1 :(得分:1)

我可以看到几个错误:

  1. Contenttype:application/json应为Content-Type: application/json
  2. 您忘记在JSON中包含注册ID。
  3. 我不确定是否需要CURLOPT_SSL_VERIFYPEER => falseCURLOPT_SSL_VERIFYHOST => false
  4. 您可以找到许多有效的PHP GCM示例(例如 - here)。

答案 2 :(得分:1)

这是因为您没有启用IP来访问GCM,要知道您在GOOGLE中的网络IP类型“我的IP ”,之后创建 SERVER KEY 你使用Google_Api_Console并在服务器密钥生成中使用ip,在本地服务器的php文件中使用 SERVER KEY ,第一个图像显示在谷歌控制台中的密钥列表中选择,选择服务器密钥和第二个图像显示,将IP放入您需要启用的内容。

IMG1 IMG2