我正在尝试设置一个Google App引擎服务器端点,将Google Cloud Messages发送到Android设备。到目前为止,设备使用GoogleCloudMessaging.register()进行注册,并将生成的regID发送到服务器。然后,服务器可以向其保存的regID发送消息。通过日志消息,我可以看到regID都正确到达,服务器正在正确发送消息。这些设备虽然没有收到任何消息。
这是清单中的接收者:
<receiver
android:name="---.app.MessageReceiver"
android:exported="true"
android:permission="com.google.android.c2dm.permission.SEND" >
<intent-filter>
<action android:name="com.google.android.c2dm.permission.RECEIVE" />
<category android:name="---.app" />
</intent-filter>
</receiver>
这是接收者的代码:
public class MessageReceiver extends WakefulBroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Log.d("---", "RECIVED A MESSAGE!!!!!!");
// Explicitly specify that GcmIntentService will handle the intent.
ComponentName comp = new ComponentName(context.getPackageName(),
GCMReceiverService.class.getName());
// Start the service, keeping the device awake while it is launching.
startWakefulService(context, (intent.setComponent(comp)));
setResultCode(Activity.RESULT_OK);
}
}
该服务永远不会启动,此处的日志消息永远不会显示。
我有什么遗失的吗?
编辑 - 这些是权限:
<uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />
<uses-permission android:name="---.app.permission.C2D_MESSAGE" />
<permission
android:name="---.app.permission.C2D_MESSAGE"
android:protectionLevel="signature" />
答案 0 :(得分:0)
SO Android GCM basic implementation
上有一个可行的解决方案作者编辑了他的帖子,所以你应该把它作为一个例子。基本上,如果没有正确的权限设置和正确的广播使用的构造函数,android将不会对发送给应用程序的消息发表任何看法。
请相应地设置您的权限和其他内容,然后重试。
在评论之后发表了非常好的帖子,在接受的评论之下。
答案 1 :(得分:0)
真是个愚蠢的错误。在intent过滤器中没有.intent.RECEIVE,而是.permission.RECEIVE。