2014-11-03 86 views
0

GCM推送通知我想爲下面的問題的解決方案:根據不同的情況

我想發送特定於用戶通知喜歡謝謝消息一個用戶名和作業貼說其他用戶。我正在尋找一種方式,以便我可以根據用戶ID和註冊ID發送單獨的消息。

我嘗試了以下方法,即。

當新用戶註冊時,那個用戶的userid會在數據庫上創建。我想如果我也同時創建一個註冊ID,那麼我可以將它保存在服務器上的一個單獨的表中。其中將包含用戶ID和registration_id和設備類型

但我注意到,在GCM註冊時它是異步任務,所以我獲得它,但直到用戶獲得註冊的ID仍然爲空。所以它無法進入數據庫。

如果有人對這個問題有看法。或者也解決了類似的問題。然後讓我知道。

感謝您的閱讀。

+0

Gcm註冊需要時間,因爲它調用web服務到谷歌註冊。因此,在用戶獲得註冊之前,註冊ID將爲空,因此您可以在啓動屏幕中或在gcm註冊獲得註冊時間的地方將gcm註冊電話 – 2014-11-03 05:03:05

回答

0

其實問題是GCM註冊經常需要一段時間註冊。因此,有一種簡單的方法可以將您的ID註冊到數據庫中。其一是,如果你使用的啓動畫面在你的應用程序,然後試圖爲GCM在那裏註冊,並在您GCMIntentService的onRegistered方法保存registrationId偏好這樣

@Override 
protected void onRegistered(Context arg0, String regId) { 
    Log.v("registrationId", regId); 
    prefs = getSharedPreferences("filename", 0); 
    prefs.edit().putString("regid", regId).commit(); 
} 

現在在登錄的時候,你應該嘗試從您存儲在onRegistered方法中的首選項獲取您的registrationId。但仍有1-2%的機會讓你不會在這裏註冊。因此,您可以爲GCM註冊創建一個單獨的api,您將在LoginActivity旁邊的Activity中((如果您的regid沒有在Login time註冊))獲取註冊到您的數據庫的id。其次,如果您沒有使用啓動畫面,那麼您必須爲GCM註冊製作單獨的api,因爲在登錄期間您有更多的機會不會獲得您的registrationId。