Java 安卓应用程序不是';无法从服务器获取推送通知

Java 安卓应用程序不是';无法从服务器获取推送通知,java,php,android,google-cloud-messaging,Java,Php,Android,Google Cloud Messaging,我的问题如下: 我想使用谷歌的云消息服务器在用户受到挑战时向他发送推送通知 挑战意味着,另一个用户将ID写入文本字段并按下按钮。如果他按下按钮,应用程序会将挑战者ID和挑战者ID保存到哈希表中。此Hashmap被发送到PHP服务器。然后,PHP服务器从符合用户id的数据库中检索regid。现在,PHP脚本应该发送一个请求。我是这样做的: private function _doPushNotification ( ) { $url = 'https://android.go

我的问题如下:

我想使用谷歌的云消息服务器在用户受到挑战时向他发送推送通知

挑战意味着,另一个用户将ID写入文本字段并按下按钮。如果他按下按钮,应用程序会将挑战者ID和挑战者ID保存到哈希表中。此Hashmap被发送到PHP服务器。然后,PHP服务器从符合用户id的数据库中检索regid。现在,PHP脚本应该发送一个请求。我是这样做的:

private function _doPushNotification ( ) {
        $url    = 'https://android.googleapis.com/gcm/send';
        $data   = array( 'message' => 'Hey!' );
        $fields = array(
            'registration_ids'  => array ( "xxx" ),
            'data'              => $data,
        );
        $headers = array(
            'Authorization: key=' . $this->_apiKey,
            'Content-Type: application/json'
        );

        // Open connection
        $ch = curl_init();

        // Set the url
        curl_setopt( $ch, CURLOPT_URL, $url );

        // Set request method to POST
        curl_setopt( $ch, CURLOPT_POST, true );

        // Set custom headers
        curl_setopt( $ch, CURLOPT_HTTPHEADER, $headers);

        // Get response back as string
        curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true );

        // Set post data
        curl_setopt( $ch, CURLOPT_POSTFIELDS, json_encode( $fields ) );

        // Send the request
        $result = curl_exec($ch);

        // Close connection
        curl_close($ch);

        // Debug GCM response
        return $result;
    }
现在,在我的logcat中,我得到了以下输出,因此它似乎可以工作,但我的手机没有收到推送通知。看起来PHP部分是正确的,对吗

这是logcat输出

02-11 14:23:24.175: I/System.out(17862):  {"multicast_id":xxx,"success":1,"failure":0,"canonical_ids":0,"results":[{"message_id":"0:1392125005286495%39c58895f9fd7ecd"}]}[done]
02-11 14:23:24.300: I/INTENT(17862): Working... 1/5 @ xxx
02-11 14:23:29.300: I/INTENT(17862): Working... 2/5 @ xxx
02-11 14:23:34.300: I/INTENT(17862): Working... 3/5 @ xxx
02-11 14:23:39.305: I/INTENT(17862): Working... 4/5 @ xxx
02-11 14:23:44.300: I/INTENT(17862): Working... 5/5 @ xxx
02-11 14:23:49.305: I/INTENT(17862): Completed work @ xxx
02-11 14:23:49.365: I/INTENT(17862): Received: Bundle[{from=xxx, message=Hey!, android.support.content.wakelockid=1, collapse_key=do_not_collapse}]
因此,让我们检查Java/Android部分是否存在故障。我已经将这些部分作为清单标签的子项添加到我的android清单中

<uses-permission 
        android:name="android.permission.INTERNET" />
    <uses-permission 
        android:name="android.permission.GET_ACCOUNTS" />
    <uses-permission 
        android:name="android.permission.WAKE_LOCK" />
    <uses-permission 
        android:name="com.google.android.c2dm.permission.RECEIVE" /> 
    <uses-permission 
        android:name="xxx.xxx.xxx.permission.C2D_MESSAGE" />
    <permission 
        android:name="xxx.xxx.xxx.permission.C2D_MESSAGE"
        android:protectionLevel="signature" />

这是应用程序标记的子项

<receiver
            android:name="xxx.xxx.xxx.GcmBroadcastReceiver"
            android:permission="com.google.android.c2dm.permission.SEND" >
            <intent-filter>
                <action 
                    android:name="com.google.android.c2dm.intent.RECEIVE" />
                <action 
                    android:name="com.google.android.c2dm.intent.REGISTRATION" />
                <category 
                    android:name="xxx.xxx.xxx" />
            </intent-filter>
        </receiver>

        <service 
            android:name="xxx.xxx.xxx.GcmIntentService" />

<meta-data android:name="com.google.android.gms.version"
           android:value="@integer/google_play_services_version" />

我创建了一个GcmBroadcastReceiver和gcminentservice类,并从谷歌自己的教程中复制了代码。另外,我正在使用谷歌提供的默认方法
storeRegistrationId
sendRegistrationIdToBackend
registerInBackground
getAppVersion
等。将它们保存到共享首选项并获取它们也很有效。看起来我目前唯一的问题是,手机没有收到推送通知。什么是prboem?
有什么问题吗?我不知道是否需要更多的代码。

您是否有任何错误?您知道您的服务正在运行吗(可能在服务的onHandleIntent()中放入一些日志语句)嗨,没有错误。服务正在运行。将此作为日志记录机制
Log.i(标记,“正在工作…”+(i+1)
您可以发布您的通知代码(Android部分)吗?通知代码的确切含义是什么?GcmBroadcastReceiver和GCMinentService?是的,GCMinentService