所以我在过去的15个小时左右遇到了一个问题,我跟着GCM开始使用Android(包括客户端演示源),据我所知,我应该很快收到推送通知注册设备并在发送ECHO_NOW消息后。这就是我所做的和一些代码片段:
我一直在HTC One(4.3)
中运行代码Activity
,一个IntentService
和一个WakefulBroadcastReceiver
- 扩展接收器。的AndroidManifest.xml:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="my.package"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="19" />
<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" />
<permission android:name="my.package.permission.C2D_MESSAGE"
android:protectionLevel="signature" />
<uses-permission android:name="my.package.permission.C2D_MESSAGE" />
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name="my.package.MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<receiver
android:name="my.package.GcmBroadcastReceiver"
android:permission="com.google.android.c2dm.permission.SEND" >
<intent-filter>
<action android:name="com.google.android.c2dm.intent.RECEIVE" />
<category android:name="my.package" />
</intent-filter>
</receiver>
<service android:name="my.package.GcmIntentService" />
</application>
</manifest>
我假设在阅读此内容后会收到推送通知(包含在gcm客户端演示实现的源代码中):
// For this demo: we don't need to send it because the device
// will send upstream messages to a server that echo back the
// message using the 'from' address in the message.
自第一次尝试以来,设备正在成功注册并获得注册ID。
问题
我做错了假设并且没有收到推送通知吗?如果没有,那可能是什么错误?
我已经尽可能地记录了,我应该发布更多代码吗?我已经检查了很多问题,没有人解决这个问题,或者只是不解决它。
先感谢社区。 p>
此致
阿曼
编辑: 结论:GCM演示客户端工作正常,只需要记住,需要服务器端来请求GCM发送实际的推送通知。 ECHO_NOW并不意味着GCM会代表您发送某些内容。实现服务器端!
标记答案(Eran's)是第一个,但Rajat为任何需要抬头的人提供了片段。谢谢你们两个。
答案 0 :(得分:6)
实施服务器端代码以向您的设备发送通知。了解更多信息Android GCM tutorial。
<?php
$api_key = "AIzBpx4XbXwKd8P-v2d1Jk";
$registrationIDs = array("APA91b3Rjlo8T_URx15NqvxY2mRyQ");
$message = "congratulations";
$url = 'https://android.googleapis.com/gcm/send';
$fields = array(
'registration_ids' => $registrationIDs,
'data' => array( "message" => $message ),
);
$headers = array(
'Authorization: key=' . $api_key,
'Content-Type: application/json');
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt( $ch, CURLOPT_POST, true );
curl_setopt( $ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true );
curl_setopt( $ch, CURLOPT_POSTFIELDS, json_encode( $fields ) );
$result = curl_exec($ch);
curl_close($ch);
echo $result;
?>
答案 1 :(得分:1)
您遵循的GCM演示应用程序使用新设备进行云消息传递(上游消息)以向服务器发送消息,并假定服务器回显该消息。为此,您应该实现服务器端(应该建立与GCM云连接服务器的连接)。这还需要您填写表格,以便为新的GCM功能列出您的项目ID白色。
如果您不需要新的GCM功能(设备到云和用户通知),您只需将注册ID发送到您的服务器,然后从服务器向您的设备发送消息。
您可以查看所需服务器端代码here的示例。