3

我总是收到 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;
                }
4

3 回答 3

8

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

将 IP 字段留空允许任何 IP,并且更容易。

于 2014-06-23T07:47:14.897 回答
1

我可以看到几个错误:

  1. Contenttype:application/json应该是Content-Type: application/json
  2. 您忘记在 JSON 中包含注册 ID。
  3. 我不确定是否CURLOPT_SSL_VERIFYPEER => false需要CURLOPT_SSL_VERIFYHOST => false

您可以找到许多有效的 PHP GCM 示例(例如 -这里)。

于 2013-09-11T14:58:40.607 回答
1

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

IMG1 IMG2

于 2014-02-07T12:39:10.060 回答