未在设备上接收GCM

时间:2014-05-10 18:28:54

标签: android google-cloud-messaging

我正在尝试设置一个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" />

2 个答案:

答案 0 :(得分:0)

SO Android GCM basic implementation

上有一个可行的解决方案

作者编辑了他的帖子,所以你应该把它作为一个例子。基本上,如果没有正确的权限设置和正确的广播使用的构造函数,android将不会对发送给应用程序的消息发表任何看法。

请相应地设置您的权限和其他内容,然后重试。

在评论之后发表了非常好的帖子,在接受的评论之下。

答案 1 :(得分:0)

真是个愚蠢的错误。在intent过滤器中没有.intent.RECEIVE,而是.permission.RECEIVE。