繁体   English   中英

GCM有时有效,有时却无效

[英]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 + 
            "&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
    }
}

我不明白为什么要停止工作,我处于游戏中,停止工作,然后再次工作...

我刚刚解决了,问题是在这里的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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM