2015-10-13 63 views
3

我正在開發應用程序,其中基於Login-Logout機制以及REST API集成。如何知道應用程序數據是否被清除或應用程序是否被卸載?

爲了使REST API請求TOKEN是必需的。應用程序將此TOKEN和其他用戶詳細信息保存到SharedPreferences

當用戶在應用程序記錄保存所有必需的數據,並在註銷時間的所有數據被從SharedPreferences移除並且TOKEN條目從應用服務器

申請還與GCM server註冊用於發送推送通知用戶刪除。爲此應用程序發送設備註冊ID到應用程序服務器。

但是,如果用戶清除應用數據或卸載,然後應用程序將打開登錄屏幕和應用程序服務器和GCM服務器,因此舊條目保留在應用服務器和新的條目添加到服務器再次註冊。

所以如果服務器發送推送通知給應用程序然後兩個推送通知接收設備。

有什麼辦法,如果應用程序的數據被清除或卸載應用程序以編程方式檢測?

任何幫助將不勝感激。

+0

在您的服務器上爲每個用戶**保存一個唯一的ID。 – showp1984

+1

從GCM生成的設備註冊ID對應用程序而言是相同的。它很少改變 – Rajesh

+0

*如果應用程序數據被清除或應用程序被卸載,是否有任何方法檢測編程?* nope –

回答

2

最後我想出了以下解決方案。

我已經實現GCM 3.0Instance ID API使用ApplicationGCM服務器發送推送通知的應用程序,而不是老GoogleCloudMessaging.register(SENDER_ID);

所以,當應用程序服務器嘗試推送通知發送到設備,然後服務器獲取舊設備「error」:「NotRegistered」響應所以基於該服務器的ID將刪除無用的條目。

在GCM 2.0服務器獲取「error」:「NotRegistered」有時即使應用程序已安裝,但在GCM 3.0它的作品完美。

+0

您如何知道您使用的是哪個版本? –

+0

GCM 3.0引入了主題消息傳遞和實例ID API,其中以前的api GCM 2.0包含GoogleCloudMessaging.register(SENDER_ID); – Rajesh

1

它始終是更好地保存自己的公開數據中的應用,如登錄ID,公共ID等,而不是安全數據。讓你的服務器也有相同的公共ID。所以如果您的應用程序數據被清除或卸載,應用程序中的登錄ID,公共ID也會被清除。因此,下次他安裝應用程序或嘗試從頭開始登錄時,如果他使用相同的登錄ID,他將被分配不同的公共ID。在使用服務器進行身份驗證時,服務器會嘗試與已存在的登錄ID進行匹配,但它知道公共ID是不同的,因此會忽略舊的公用ID條目併爲您的登錄ID創建相應的新公共ID。通過這種方式,您可以阻止針對相同登錄標識的2個服務器推送通知。

+0

*如果他使用相同的登錄ID *但如果他不使用? –

+0

然後很酷,很簡單。您在服務器中有新的登錄ID和新的公共ID。並且他僅爲該登錄ID獲取推送通知。這更像是例如你有一個購物應用程序,你有2個帳戶,你在一臺設備上使用它。一次只能使用1個賬戶。因此,您可以針對該特定帳戶/登錄ID獲取推送通知。 –

+0

如何處理關於服務的徘徊數據?現在不再使用的帳戶的數據 –

0

您可以使用Google的Firebase Analytics來跟蹤這些應用事件。

相關問題