我的应用程序是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 +
"®Id=" + 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
}
}
我无法理解为什么停止工作,我正处于游戏中间并停止工作然后再次工作......
答案 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();