2013-02-14 94 views
1

Google的GCM服務器將針對每個應用程序/設備對發出一個GCM註冊ID。因此,如果某個用戶在兩臺設備上安裝了應用程序,則每臺設備都有自己的註冊ID。Android GCM:在數據庫中存儲註冊ID的問題

我現在面臨的問題是,我那些registrationIds存儲在桌子上有兩列:

+---------+-----------+ 
|userId |userGCMId + 
+---------+-----------+ 

其中userid是用戶的ID在我的應用程序,這是一樣的,不管設備的他正在使用,userGCMId是Google發佈的註冊ID。

如果我讓userId成爲這張表的主鍵,如果他將我的應用程序安裝在第二個設備上,我將無法存儲用戶的userGCMId,因爲userId /主鍵對於兩者都是相同的因此這第二個設備將不會收到我的推送通知)。

我想過使用這兩列來製作主鍵組合,但GCM registrationId可以大到4k(根據谷歌工程師的說法),所以理論上它可能長達4000字符,而且這也太大的主鍵。

解決方案我正在考慮:

  1. 因爲在實踐中,大多數GMC registrationIds是512個字符或更短我想我可以讓該列一個varchar(512),並把它作爲主鍵的一部分。

  2. 另一種方法是將userGCMid列保留爲文本,並添加第三列,id來自的設備,並創建主鍵(userId,device)。

你們有沒有解決過去的這個問題?有關最佳方法的任何想法?

在此先感謝

回答

0

我結束了使用選項2,它似乎工作正常。

您可能還想使用設備的MAC地址而不是其型號,因爲這樣可以讓用戶在同一型號的兩臺設備上安裝應用程序,並同時接收推送通知。