1

我正在尝试使用 PHP 在 Android 上设置 Google Cloud Messaging(遵循本教程:http ://www.androidhive.info/2012/10/android-push-notifications-using-google-cloud-messaging-gcm-php-和-mysql/)。我的设备在 GCM 中成功注册,然后在服务器上注册(regId 存储在数据库中)。

当我尝试发送到设备时,什么也没有收到,虽然我得到了这个响应:

{"multicast_id":4701392840778619841,"success":1,"failure":0,"canonical_ids":0,"results":[{"message_id":"0:1355907831651938%978fee92f9fd7ecd"}]}

Google API 报告未发出任何请求。

这是我在 PHP 中的 send_notification 函数:

    public function send_notification($registration_ids, $message) {
    // include config
    include_once './config.php';

    // Set POST variables
    $url = 'https://android.googleapis.com/gcm/send';

    $fields = array(
        'registration_ids' => $registration_ids,
        'data' => $message,
    );

    $headers = array(
        'Authorization: key=' . GOOGLE_API_KEY,
        'Content-Type: application/json'
    );
    // Open connection
    $ch = curl_init();

    // Set the url, number of POST vars, POST data
    curl_setopt($ch, CURLOPT_URL, $url);

    curl_setopt($ch, CURLOPT_POST, true);
    curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

    // Disabling SSL Certificate support temporarly
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);

    curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($fields));

    // Execute post
    $result = curl_exec($ch);
    if ($result === FALSE) {
        die('Curl failed: ' . curl_error($ch));
    }

    // Close connection
    curl_close($ch);
    echo $result;
}

From research, I have seen similar questions have been asked to this, however they vary slightly - for example, different programming languages and no solution that I have found has solved this problem.

Extra Info:

1. I have checked and cURL is enabled.

2. My onMessage method

protected void onMessage(Context context, Intent intent) {
    Log.i(TAG, "Received message");
    String message = intent.getExtras().getString("price");

    displayMessage(context, message);
    // notifies user
    generateNotification(context, message);
}

(price in the above just retrieves the message as its stored like this: $message = array("price" => $message); before being given as a parameter to the send_notification function on the server.

I have checked LogCat and 'Received message' does not appear.

4

3 回答 3

2

Just solved this (although I don't know what was causing the original problem). I shut my device down and started it up again and it went mad receiving all the messages I had sent it over the last few days. Now it receives them as they are sent, so assuming everything else is correct, if anyone is having this problem, try restarting the device.

于 2012-12-19T17:03:59.880 回答
0

please generate and use server api key to view for live notification on device.

that is not mention in this post

http://www.androidhive.info/2012/10/android-push-notifications-using-google-cloud-messaging-gcm-php-and-mysql/

于 2012-12-20T07:47:16.577 回答
0

I experienced a very similar (same?) problem. My issue was that I changed the String from "price" in the PHP code, but I hadn't done in the Android code. You need to do both. Maybe this will help someone. :)

于 2013-01-30T23:31:10.030 回答