[英]GCM sometimes works, sometimes doesn't
我的应用是Android中的多人游戏,其中一台服务器在Google App引擎上运行,并使用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
}
}
我不明白为什么要停止工作,我处于游戏中,停止工作,然后再次工作...
我刚刚解决了,问题是在这里的fallingKey
Message message = new Message.Builder().collapseKey("1").timeToLive(3).delayWhileIdle(true).addData("message", text).build();
如果您总是使用相同的crashKey,有时您不会随机接收消息,所以我尝试使用此方法,最终可以正常工作!
Message message = new Message.Builder().collapseKey(""+((int) (Math.random () * (10000)))).timeToLive(3).delayWhileIdle(true).addData("message", text).build();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.