【问题标题】:Use GCM with PHP将 GCM 与 PHP 一起使用
【发布时间】:2013-01-02 13:06:15
【问题描述】:

我看过几篇关于如何从我的 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?还是我做错了?

谢谢!

【问题讨论】:

  • 我得到了这样的工作:stackoverflow.com/questions/11396177/gcm-sending-with-curl-php希望它有所帮助
  • 另外:我让它允许来自所有 IP 的呼叫。先这样测试一下。我也使用了浏览器密钥。
  • Yours 是我检查过的帖子之一。我修改了订单,让它和你一模一样,但它仍然没有起床。我为服务器密钥设置了“允许任何 IP”,为浏览器密钥设置了“允许任何引用者”。
  • 您是否删除了 Content-type: application/json 之间的空格?我不知道这是否会有所不同。

标签: php android google-cloud-messaging


【解决方案1】:

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

【讨论】:

  • 我正在使用 Google (developer.android.com/guide/google/gcm/demo.html) 提供的演示示例。函数 GCMIntentService->onMessage 只显示一个静态字符串,它不检查消息值。
  • 但是当你运行 php 服务器时,必须有一些价值来与你的 android 代码交互。为此,您的 onMessage 必须具有“我的消息”值
  • 我猜你是在告诉我检查收到的消息。嗯,onMessage函数的第一行就是Log.i(TAG, "Received message"); .该日志条目未显示,因此从未调用过 onMessage 函数,似乎客户端没有收到消息。
  • 好的。你的 onMessage 方法中有这样的方法吗? : generateNotification(arg0, arg1.getStringExtra("你的消息标签"));如果是,将“你的消息标签”替换为“我的消息”。希望这会对你有所帮助。
  • 有一个 generateNotification 方法,但第一个参数是上下文,第二个是静态字符串(“来自 GCM:你收到消息!”)。 generateNotification(context, getString(R.string.gcm_message));
【解决方案2】:

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

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

【讨论】:

    【解决方案3】:

    尝试将其从 https 更改为 http

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

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

    【讨论】:

      【解决方案4】:

      【讨论】:

      • 您好,欢迎来到 SO - 请注意,仅链接的答案通常不受欢迎 - 答案应完整并使用链接作为参考,而不是整个答案内容。我建议编辑您的答案以放置相关代码(并说明它将如何提供帮助)。
      猜你喜欢
      • 1970-01-01
      • 2017-05-29
      • 2011-09-17
      • 2016-03-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多