2012-07-24 70 views

回答

1

GCM將按照TTL中的規定保留您的信息。 GCM是一種廣播服務,這意味着您不應該知道設備是否收到了該消息。

你可以做的一件事是跟蹤你的推送消息。當應用程序啓動時,它提交最後收到的消息與服務器進行檢查。

即使設備已打開並聯機,也無法保證它會收到來自GCM的消息。

+0

感謝您的回答。我知道它擁有這些信息。但是,如果設備關閉,我希望它無法首先發送這些消息。我正在製作一個消息應用程序,只想在兩臺設備都打開時進行聊天。所以我正在使用離線/在線狀態。 – Klaasvaak 2012-07-24 11:25:20

+1

從GCM收到推送消息時,您可以使設備回到服務器。然後你有服務器端監控ping請求的邏輯。只是一個想法。 – RobGThai 2012-07-24 11:31:32

+0

好的。我想這是最好的解決方案。 – Klaasvaak 2012-10-08 08:51:44

1

您可以做的一件事就是當您從應用程序註銷時,從服務器取消註冊GCM服務。這樣如果服務器將推送通知發送到設備,它將不會被設備接收。每當你再次登錄你的應用程序,你必須再次註冊你的設備到服務器。

你不能註冊&註銷通過下面的代碼你的GCM服務:

註冊:

GCMRegistrar.checkDevice(this); 
    GCMRegistrar.checkManifest(this); 
    final String regId = GCMRegistrar.getRegistrationId(this); 
    if (regId.equals("")) { 
     GCMRegistrar.register(this, SENDER_ID); 
    } else { 
     Log.v(TAG, "Already registered"); 
    } 
registerReceiver(mHandleMessageReceiver, 
       new IntentFilter(DISPLAY_MESSAGE_ACTION)); 

註銷:

寫的OnDestroy方法如下代碼:

unregisterReceiver(mHandleMessageReceiver); 
     GCMRegistrar.onDestroy(this); 

如果您有任何疑問,請告訴我這將非常樂意幫助你。

+0

當收到並處理消息時,將調用onDestroy方法。所以這太頻繁了。 – Klaasvaak 2012-07-31 07:35:40