2014-05-08 25 views
1

在我的應用程序中,我運行服務,它加載了動態廣播接收器。我在GoogleCloudMessagining上註冊應用程序,嘗試通過PHP從服務器發送推送消息 - 應用程序獲取消息,發出通知 - 一切正常。然後,我去吃我的lanch - 回來一小時 - 嘗試發送推送消息,並得到錯誤NotRegistered ..然後我再次註冊應用程序,然後thith新的reg_id是沒有問題..這種情況繼續一遍又一遍..我有沒有canonic_id消息的結果,沒有辦法檢查registration_id是否有效,強制註冊過程每小時似乎不是一個很好的主意,而且仍然會是問題:如果沒有互聯網 - 沒有註冊更新 - 丟失推送消息。爲什麼註冊過期如此快捷?如何解決這個問題?Android GCM註冊ID在一小時內過期

+0

你確定你是不是從GCM自己註銷(通過調用GoogleCloudMessaging.unregister)?如果你沒有註冊,我會檢查logcat,看看你的應用何時獲得註冊意圖,告訴你你的應用從GCM註銷。 – Eran

+0

其實它是intresting細節:我檢查註冊intent,並且它是somthing奇怪的事件:然後我打電話註冊 - 這個意圖給我回registration_id ..這很好..但後來,然後我得到RECEIVE意圖,後它我總是得到註冊意圖與消息「註銷」..但應用程序register_id不清除..爲什麼它發生了我不知道..我嘗試手動取消註冊,以檢查意圖的反應,但它沒有幫助 – user3337390

回答

3

OK,看來我找到答案..

在我UPP我註冊GCMbroadcastReceiver dinamically,從代碼。但是GCM手冊中找到這個:

未註冊裝置 現有的註冊ID可能不再有效了一些場景,包括:

If the application manually unregisters by issuing a com.google.android.c2dm.intent.UNREGISTER intent. 
    If the application is automatically unregistered, which can happen (but is not guaranteed) if the user uninstalls the application. 
    If the registration ID expires. Google might decide to refresh registration IDs. 
    If the application is updated but the new version does not have a broadcast receiver configured to receive com.google.android.c2dm.intent.RECEIVE intents. 

最後一個 - 這是我的情況,我的應用程序清單點沒有要求接收者,螞蟻becouse應用程序得到「取消註冊」的意圖。

我更改應用程序,在清單把接收器 - 現在經過「PECEIVE」意圖..沒有領取「註銷」的意圖,我希望應用程序不會在未註冊每小時..

+0

只是爲了最終:真正解決問題,註冊沒有一天清除,那很好! – user3337390

+0

你做了什麼改變,你在同一天得到推送通知。我得到這個相同的問題。 – Deepak