GCM在Android上导入推送通知(GCM to implement push notificat

2019-10-19 16:08发布

下面是我的客户的代码:

public class GCMIntentService extends GCMBaseIntentService {
    public GCMIntentService() {
        super(SENDER_ID);
    }
    @Override
    protected void onError(Context arg0, String arg1) {
    }
    @Override
    protected void onMessage(Context arg0, Intent arg1) {
        Context context = getApplicationContext();
        String NotificationContent = arg1.getStringExtra("message");
        System.out.println("Message: " + NotificationContent);
    }
    @Override
    protected void onRegistered(Context arg0, String arg1) {
        System.out.println("Registered id: " + arg1);
    }
    @Override
    protected void onUnregistered(Context arg0, String arg1) {
        System.out.println("Unregistered id: " + arg1);
    }
}

和注册和注销的方法如下:

public void Registering() {
    GCMRegistrar.checkDevice(this);
    GCMRegistrar.checkManifest(this);
    RegistrationId = GCMRegistrar.getRegistrationId(this);
    if(RegistrationId.equals("")) {
        GCMRegistrar.register(this, SENDER_ID);
    }
}
public void Unregistering() {
    Intent unregIntent = new Intent("com.google.android.c2dm.intent.UNREGISTER");
    unregIntent.putExtra("app", PendingIntent.getBroadcast(this, 0, new Intent(), 0));
    startService(unregIntent);
}

在同一台设备,在第一时间呼叫Registering()我得到了registered_id_1
我呼吁Unregistering()它会打印: Unregistered id: registered_id_1意味着注销成功。
并调用Registering()再次,它会得到另一个registered_id_2

和推送通知服务器我将消息发送到registered_id_1如下代码:

Sender sender = new Sender("Android API Key");// Android API KEY
Message message = new Message.Builder().addData("message", My Message).build();
Result result = null;
try {
    result = sender.send(message, registered_id_1, 5);
} catch (IOException e) {
    e.printStackTrace();
}

但客户仍然收到发送到邮件registered_id_1
什么是错误的,我的方法?

Answer 1:

没有什么错在你的方法。 这是GCM的行为。 当设备得到一个新的注册ID为给定的应用,以前分配的旧的注册ID为这个设备和应用程序仍然可以工作。 如果您在使用旧的注册ID发送GCM讯息,你会得到包含规范注册ID(其值是该设备的新注册ID)的响应。 当你得到这样的回应,你应该消除你的服务器的DB旧的注册ID。

或者,你可以处理它更好,如果在取消注册旧的注册ID,你也会通知你的服务器,这将删除旧的注册ID,从不再次尝试发送邮件到它。



文章来源: GCM to implement push notification on Android