Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/290.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将GCM与PHP一起使用_Php_Android_Google Cloud Messaging - Fatal编程技术网

将GCM与PHP一起使用

将GCM与PHP一起使用,php,android,google-cloud-messaging,Php,Android,Google Cloud Messaging,我看过几篇关于如何从我的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

我看过几篇关于如何从我的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\u exec时,netstat没有显示到该ip地址的任何连接。这是否意味着我没有连接到android.googleapis.com?或者说我做错了


谢谢

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

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


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

尝试将其从https更改为http

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

试试这个


希望它能帮助你

我正在使用谷歌提供的演示示例()。函数gcminentservice->onMessage只显示一个静态字符串,它不检查消息值。但在运行php服务器时,必须有一些值才能与android代码交互。为此,您的onMessage必须具有“我的消息”值。我猜您是在告诉我检查收到的消息。嗯,onMessage函数的第一行是Log.i(标记“Received message”)。没有显示日志条目,因此从未调用函数onMessage,似乎客户端没有接收消息。好。在您的onMessage方法中有类似的方法吗generateNotification(arg0,arg1.getStringExtra(“您的消息标签”);如果是,请将“您的mesage标签”替换为“我的信息”。希望这能对您有所帮助。有一个generateNotification方法,但第一个参数是上下文,第二个是静态字符串(“来自GCM:您收到了消息!”)。generateNotification(上下文,getString(R.string.gcm_消息));我让它这样工作:希望它有帮助。所以:我让它允许来自所有IP的呼叫。先这样测试一下。我也使用了浏览器键。你的是我检查过的帖子之一。我修改了订单,让它和你一模一样,但它仍然不起作用。我对服务器密钥有“允许的任何IP”,对浏览器密钥有“允许的任何引用者”。您是否删除了内容类型:application/json之间的空格?我不知道这是否会造成任何差异。您好,欢迎来到SO-请注意,只有链接的答案通常不受欢迎-答案应该完整,并使用链接作为参考,而不是整个答案内容。我建议编辑你的答案,把相关的代码(和解释它将如何帮助)。
curl_setopt($ch, CURLOPT_URL, 'http://android.googleapis.com/gcm/send');