0

我看过几篇关于如何从我的 PHP 服务器发送 GCM 消息的帖子,但我无法让它工作。这是我的代码:

public function test_gcm($id_user){

    // Search user's RegIds and stores them in $regids

    if(count($regids) == 0){
        echo "This user has no registered device.";
        return;
    }

    $ch = curl_init();

    $data = array(
        'data' => array('message'=>'my message', 'title'=>'message title'),
        'registration_ids' => $regids
    );      

    curl_setopt($ch, CURLOPT_URL, 'https://android.googleapis.com/gcm/send');
    curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

    // WRITE JSON HEADERS
    curl_setopt($ch, CURLOPT_HTTPHEADER, array(
        'Content-Type: application/json',
        'Authorization:key=' . $apiKey)
    );

    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);

    $result = curl_exec($ch);

    curl_close($ch);

    echo $result;
}

我正在使用浏览器密钥。我也尝试了服务器密钥,但它们都不起作用,curl_exec 总是返回 false。有人知道为什么吗?

编辑:我刚刚使用了'netstat -tuanc | 我的服务器上的 grep 173' 并执行了服务器调用。我使用 grep 173 因为如果我 ping android.googleapis.com 我 ping 这个 IP 地址。当我使用 curl_exec 时,netstat 没有显示到该 IP 地址的任何连接。这是否意味着我没有连接到 android.googleapis.com?还是我做错了?

谢谢!

4

4 回答 4

1

检查android代码中的“消息”内容是否相同。'message'=>'my message' 应该与来自 android 中的 IntentService 类的消息匹配。

于 2012-09-20T08:52:49.197 回答
0

我已经设法修复它。这是防火墙问题,我的防火墙阻止了连接。我已经添加了接受这些消息的规则,现在它可以工作了。

感谢所有试图提供帮助的人:)

于 2012-09-20T17:06:54.973 回答
0

尝试将其从 https 更改为 http

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

curl_setopt($ch, CURLOPT_URL, 'http://android.googleapis.com/gcm/send');
于 2012-10-05T15:34:55.367 回答
-1

试试这个http://2mecode.blogspot.hk/2013/01/google-cloud-messaging-php.html

希望它可以帮助你

于 2013-01-02T05:06:15.450 回答