2012-10-08 38 views
2

我正在嘗試將GCM整合到我的應用中。我在onRegistered()許多地方閱讀,我們應該在共享首選項上存儲regId。任何人都可以告訴,爲什麼需要將ID存儲在共享首選項中。我看到了GCMRegistrar.java的代碼,它在內部正在執行這個機制。那麼爲什麼需要手動將ID存儲在共享首選項中。在共享偏好上存儲註冊ID GCM

回答

8

你不需要將其保存在sharedPreference.Use以下行

final String regId = GCMRegistrar.getRegistrationId(getApplicationContext()); 
if (regId.equals("")) { 
     GCMRegistrar.register(this,SENDER_ID); 
} else { 
     //Already registered 
} 

如果registartion id爲null,你可以去註冊..

+1

任何人都在看這個。不要使用它。 GCMRegistrar已棄用。實際上你應該將它保存在sharedPrefs中。請參閱此處的指南https://developer.android.com/google/gcm/client.html – 2015-01-14 20:45:42

1

這是一個設計選擇。您可能希望將其存儲在SharedPreferences中,存儲在文件或SQLite數據庫中。這真的取決於應用程序以及您試圖用它來完成什麼。

至於爲什麼GCMRegistrar.java示例將它存儲在SharedPreferences - 我認爲這樣做,因爲在更新應用程序時需要使本地存儲的設備ID無效/刪除,這很容易通過刪除原始數據來完成,保存在設備上。比查詢數據庫或通過rmfile()刪除文件更容易和節省資源(不超過3-4行代碼所需)。

3

其簡單。不要讓它變得複雜。 由於您的設備已通過GSM註冊,因此不會自動獲取通知。 您必須向需要註冊ID的第三方服務器註冊設備。

由於id存儲在pref中,它不會一次又一次地註冊設備。

+0

是不是很簡單?什麼都沒有做別的? –

1

我認爲你必須自己註冊才能在將來使用它,例如與指定你的REGID的推送服務器通信。

4

此方法用於不每次註冊設備。

  1. 如果你使用gcm-client.jar,那麼你不需要擔心它。這是在這個jar文件中實現的。
  2. 如果你想自己實現它,那麼你可以

    • 保存registrationId使用SharedPreferences或將其保存在數據庫或文件系統等
    • 沒有保存registrationId和註冊設備的每一個time.However,這不是一個好的設計選擇,因爲它在應用程序啓動時需要多一次迭代(從Google獲取註冊ID)。
+0

謝謝..這是我的疑問..我使用GCM.jar。所以我想我不需要擔心這個。 – Rookie