GCM有时会起作用,有时则不起作用

时间:2013-05-30 17:17:48

标签: java android push-notification google-cloud-messaging

我的应用程序是Android中的多人游戏,服务器在谷歌应用程序引擎上运行,并使用GCM将服务器与播放器设备相结合。我已经在GCM中注册了设备,然后我将registerId发送到服务器以连接设备。当我运行游戏有时它工作正常但有时设备没有从GCM收到任何东西,服务器仍然从设备接收。我不知道发生了什么:s

这是我在主类的onCreate中注册我的设备的地方:

    GCMRegistrar.checkDevice(this);
    GCMRegistrar.checkManifest(this);
    if (GCMRegistrar.isRegistered(this)) {
        Log.d("info", GCMRegistrar.getRegistrationId(this));
    }
    regId = GCMRegistrar.getRegistrationId(this);
    deviceId = getDeviceId();
    if (regId.equals("")) {
        GCMRegistrar.register(this, SENDER_ID);
        Log.d("info", GCMRegistrar.getRegistrationId(this));
    }

然后我第一次在手机上运行应用程序时,我使用此代码将registationId发送到服务器:

sendMessage("code=" + REGISTRATION_CODE + 
            "&deviceId=" + deviceId + 
            "&regId=" + regId  + 
            "&phoneNumber=" + phoneNumber);

以下是服务器中将消息发送回设备的代码:

public void sendMessage(String regId, String text) {
    Sender sender = new Sender(APIKey);
    Message message = new Message.Builder().collapseKey("1").timeToLive(3).delayWhileIdle(true).addData("message", text).build();
    try {
        sender.send(message,regId,1);
    } catch (IOException e) {
        e.printStackTrace();//Manejar la excepcion
    }
}

我无法理解为什么停止工作,我正处于游戏中间并停止工作然后再次工作......

1 个答案:

答案 0 :(得分:1)

我刚解决了,问题是这里的collapseKey

Message message = new Message.Builder().collapseKey("1").timeToLive(3).delayWhileIdle(true).addData("message", text).build();

如果您使用相同的collapseKey,有时您不会随机收到消息,所以我试试这个并且最终有效!

Message message = new Message.Builder().collapseKey(""+((int) (Math.random () * (10000)))).timeToLive(3).delayWhileIdle(true).addData("message", text).build();