GCM不工作

时间:2014-10-06 10:17:00

标签: android google-cloud-messaging

我正在学习 GCM(Google云消息传递)
我完成了以下步骤

1 - 已激活并获取浏览器应用的密钥

2 - 在清单

中添加了以下内容

使用权限:com.google.android.c2dm.permission.RECEIVE

创建了阻止其他Android应用程序注册和接收Android应用程序消息的权限

为com.google.android.c2dm.intent.RECEIVE创建了一个接收器,类别设置为applicationPackage。接收方应该要求com.google.android.c2dm.SEND权限

3 - 在接收器中

@Override

public void onReceive(Context context, Intent intent) {

    ComponentName comp = new ComponentName(context.getPackageName(),
        GcmMessageHandler.class.getName());

    startWakefulService(context, (intent.setComponent(comp)));

    setResultCode(Activity.RESULT_OK);

}

GcmMessageHandler 这是一个Intend服务,用于显示有关接收gcm消息的通知。在 GcmMessageHandler 中有onHandleIntent方法。

@Override

protected void onHandleIntent(Intent intent) {

    handler.post(new Runnable() {


        @Override

        public void run() {

            NotificationManager manager = (NotificationManager) getApplicationContext()
                    .getSystemService(Context.NOTIFICATION_SERVICE);

            NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(
                    getApplicationContext());

            mBuilder.setSmallIcon(R.drawable.ic_launcher);

            mBuilder.setContentTitle("GCM Received");

            mBuilder.setContentText("GCM Message");

            manager.notify(1, mBuilder.build());


        }

    });


    Log.i("app", "Received ");

    GcmBroadcastReceiver.completeWakefulIntent(intent);

}

4 - MainActivity - 注册并获取clint ID,从log cat我复制了该id。

5 - 来自浏览器我使用授权,内容类型和registration_ids向https://android.googleapis.com/gcm/send发帖请求。

它获得了成功的信息 但我的设备没有显示通知。

2 个答案:

答案 0 :(得分:0)

对不起大家,

其实我的程序是正确的。我认为这是我手机的问题。 (我也无法接收来自Facebook Messenger的消息,)

但是今天早上我很惊讶,我收到了来自我的测试应用程序(2天前发送的消息),Facebook等的所有消息。

谢谢大家。

答案 1 :(得分:-2)

关注thisthis简易教程,在Android中发送和接收推送通知。 并按照本示例中的说明检查包命名和AndroidManifest.xml文件是否正确配置,并将接收器设置为:

    <receiver
    android:name="com.google.android.gcm.GCMBroadcastReceiver"
    android:permission="com.google.android.c2dm.permission.SEND" >
    <intent-filter>

        <!-- Receives the actual messages. -->
        <action android:name="com.google.android.c2dm.intent.RECEIVE" />
        <!-- Receives the registration id. -->
        <action android:name="com.google.android.c2dm.intent.REGISTRATION" />

        <category android:name="your package name here" />
    </intent-filter>
</receiver>