PHP实现GCM时经常遇到401未授权错误。

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;
                }
3个回答

8
我曾经遇到同样的问题。后来发现是与IPv6相关!我按照http://developer.android.com/google/gcm/gs.html上所述的创建了服务器密钥,使用0.0.0.0/0作为允许的主机IP,但这并不匹配IPv6。所以我添加了另一行允许的主机IP,为0::0/0,这个方法奏效了(在更新缓存配置之后)。
将IP字段留空可允许任何IP,并且更容易些。

嘿,谢谢...留空IP地址是最好的解决方案...你解决了我的问题... - Pragnesh Ghoda シ
很好的答案,兄弟,真的很有帮助... :) - Silent Coder
留空IP字段解决了我的问题。谢谢。它救了我的一天。 - Bala Vishnu
IPv6 是我的问题。将 0::0/0 添加到 IP 列表中后,它工作得非常好。非常感谢。 - zingle-dingle

1
这是因为您没有启用IP访问GCM。要知道您的网络IP,请在Google中键入“my ip”,然后在Google_Api_Console中创建SERVER KEY并在SERVER KEY生成中使用该IP。在本地服务器的php文件中使用SERVER KEY,第一张图片显示了在Google控制台中选择密钥的列表,请选择服务器密钥,第二张图片显示需要启用的IP。

IMG1 IMG2


1
我能看到几个错误:
  1. Contenttype:application/json 应该是 Content-Type: application/json
  2. 你忘记在 JSON 中包含注册 ID。
  3. 我不确定是否需要 CURLOPT_SSL_VERIFYPEER => falseCURLOPT_SSL_VERIFYHOST => false
你可以找到许多有效的 PHP GCM 示例(例如 - 这里)。

感谢Eran在修正标题后,一切都正常了。但是我正在使用“允许任何IP”来生成身份验证密钥,这是一个安全问题。即使从"http://localhost/GCM/index.php"或http://<server-ip>/GCM/index.php生成密钥仍然会出现401错误。 - Prathmesh Swaroop
你好,@user2173085,你得到解决方案了吗?我也遇到了同样的问题。 - Andy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接