2011-05-26 132 views
3

我正在構建一個使用c2dm的應用程序。Android C2DM註冊ID

我認爲我應該要求註冊ID,只要我的應用程序的主要「意圖」啓動。我一直在這樣做,但似乎每個請求都會產生一個新字符串,所以我最終在我的數據庫中爲同一設備堆積了大量的註冊ID。我認爲只有其中一人會工作。但是,我不想只刪除舊的,因爲我希望我的用戶能夠在多個設備上接收通知,如果他們擁有多個設備。

我該如何處理?

回答

0

你唯一想申請一個註冊ID,當你沒有一個,並將其發送到你的服務器(一個將發送C2DM消息)。奇怪的是,你不斷得到一個新的ID,在我每次在同一個設備上註冊和取消註冊這個相同的應用程序時,我都會得到相同的ID。我還沒有做過很多測試,但是我會假設每個設備和應用組合都會改變id。

+0

謝謝,我切換到只發送一次。只要安裝該應用程序,是否可以安全地假設此ID是有效的? – 2011-05-30 19:10:27

+0

@andrew:當您在Google服務器上註銷您的設備並重新註冊時,您將獲得與以前不同的新ID。但是,如果您有一個ID,然後註冊一次並在數據庫中保存標誌,則它將與應用程序一樣工作但是您需要通過使用該標誌來停止控制進入c2dm代碼 – Sameer 2012-01-30 06:52:11

0

我正在用DB中的device_id保存registration_id。這樣我每個設備只有一個條目。另外,REG ID保存設備作爲共享的偏好上,這樣我就不用每次都要求一個新的...

但我想知道是否有某種方式,如果要找出用戶在其設備上的註冊ID已過期或未註冊。

任何想法?有意圖嗎?

0

如果您向雲註冊,返回的註冊ID將有效,直到您收到帶有「未註冊」字符串額外的意圖(這隻會在您的應用程序有意識地註銷該服務時發生),或者Google發送另一個註冊意圖與一個新的註冊ID,在這種情況下,您設置的系統應該工作正常。

如果服務器收到數據爲「Error = NotRegistered」的200響應,它將知道註冊ID是否已過期。在這種情況下,您會從數據庫中刪除該條目。

http://code.google.com/android/c2dm/#server

1

,直到您的應用程序安裝在您的設備

我已經實現C2DM決不刷新ID。如果您的設備有多個註冊ID,則只有最新的ID才能發送通知。

當您註冊設備到谷歌服務器,然後它產生一個字符串(如你已經知道)對應於設備ID.But如果使用相同的設備再前一個是沒用的重新註冊。

所以我會建議更好地保持信息設備已經註冊或註冊not.If然後無需重新註冊again.As你會得到你的老R_ID的基礎上通知。只是這R_ID發送到您的服務器通知的目的,並保存標誌在你的數據中心,繼續registeration的跟蹤

0

應該從C2DM服務器請求該設備的註冊ID僅在第一次應用程序被安裝後運行,然後保存在數據庫中(最好與設備ID一起保存,以便它是唯一的)。

登記ID是有效的,只要C2DM不發送該設備的新的註冊ID,或用戶卸載應用程序。我假設你知道如何處理後一種情況。

回到第一個案子。在設備的應用程序的生命週期中,C2DM服務器可能會向設備發送一個新的註冊ID [它將自行完成,您不必再次請求]。因此,您應該有一個相同的偵聽器,並且您可以更新數據庫中該設備的註冊ID。

希望它有幫助。