0

我的应用程序是 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));
    }

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

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
    }
}

我不明白为什么停止工作,我正在玩游戏,停止工作,然后再次工作......

4

1 回答 1

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();
于 2013-05-30T17:43:37.913 回答