2013-05-22 42 views
0

我正在開發一個使用GCM服務的小應用程序。GCM帳戶到期

之前,我試圖發送到我自己的消息,但(服務器端)的回答都是:

「成功」:0, 「失敗」:1, 「canonical_ids」:0, 「結果」:[{ 「錯誤」: 「NotRegistered」}]}

但在我的應用程序的beggining我檢查:

final String regId = GCMRegistrar.getRegistrationId(this); if (regId.equals("")) 
     { 
       // Register 
      GCMRegistrar.register(this, SENDER_ID); 


     } 
     else ... 

似乎顯而易見,getRegistrationId()只罰款本地,(SharedPreferences?) ..

好的是,我從來沒有做過註銷我的應用程序,只是重新安裝它,不改變版本號(因爲它在測試,仍然),所以在這種情況下,我的帳戶已過期,在這種情況下谷歌不應該發送給我另一個ID,我可以在這裏看到:

@Override 
    protected void onRegistered 

???

但是,有一種安全的方法來了解我的應用程序是否已註冊GCM服務器端?

謝謝!


編輯:

我想這:

當我重新安裝Eclipse的通過我的應用程序,也未安裝我的應用程序了一下,如果GCM服務器在給我發郵件那一刻沒有接收器,所以google不驗證我的ID。 在你看來,這是一個想法,一個愚蠢的想法?

回答

0

按照這些步驟http://developer.android.com/google/gcm/gs.html

這可能發生,因爲一些時間GCM registartion ID獲取所以每次過期,你應該檢查是註冊與否,如果不進行註冊

+0

感謝您的回答,在該示例應用程序中,在sharedPreferences中保存REGID並在開始時檢查以前是否保存過regid。我認爲getRegistratiodId()做同樣的事情,但如果用戶收到了該功能的東西,他不能確定是真正註冊GCM SERVER SIDE。 – Edge7

0

您應該只將設備註冊一次。以某種方式保存registrationId(共享偏好是一個好的選擇)並使用它。

從文檔:

註冊爲GCM應用程序並返回的註冊ID。 當您的應用程序安裝完成後,您必須調用此項服務,並將返回的註冊ID發送到服務器。

在我做的一些測試中,由gcm.register(id)返回的註冊ID對於設備應用對來說並不總是相同的。但是,Google說:

重複調用此方法將返回原始註冊ID。

如果方法gcm.register(id)返回一個id,它將從此有效。

最好。

+0

當然我只打一次電話。 我的主要問題是getRegistrationId()返回的ID不是空的,但沒有在GCM服務器端註冊,但我不知道爲什麼,但是我想知道一個方法來檢查ID是否是GCM註冊。 – Edge7

+0

如果GCM服務器向您返回一個ID,您只能期望Google將其註冊到其服務器上。我認爲GCM服務器上的註冊ID不會過期。 但是,如果您不確定用戶是否已註冊,只需在GCM服務器中再次註冊,並將註冊ID發送到第三方服務器。 – guanabara