2013-05-30 43 views
0

我的應用程序是一款android遊戲,帶有一個運行在谷歌應用程序引擎上的服務器,並使用GCM與服務器連接。我已經在GCM中註冊了設備,然後我將registerId發送到服務器以與設備連接。當我運行遊戲有時它可以正常工作,但有時設備不會從GCM收到任何東西,服務器仍然從設備收到。我不知道發生了什麼事:■GCM有時可以工作,有時不會

這裏就是我登記我的設備在主類的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

我只是解決了它,這個問題是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(); 
相關問題