如何知道应用程序数据是否已清除或应用程序是否已卸载?

时间:2015-10-13 13:27:50

标签: android

我正在开发基于Login-Logout机制和REST API集成的应用程序。

要使REST API请求TOKEN是必需的。应用程序将此TOKEN和其他用户详细信息保存到SharedPreferences

当用户登录应用程序保存所有必需数据时,在注销时从SharedPreferences删除所有数据,并从应用程序服务器删除TOKEN条目

应用程序还向GCM server注册,以向用户发送推送通知。对于该应用程序,将设备注册ID发送到应用程序服务器。

但是,如果用户清除应用程序数据或卸载,则应用程序将打开登录屏幕并再次向应用程序服务器和GCM服务器注册,因此旧条目仍保留在应用程序服务器中,并且新条目将添加到服务器。

因此,如果服务器向应用程序发送推送通知,则在设备中接收两个推送通知。

如果清除应用程序数据或卸载应用程序,有没有办法以编程方式检测?

任何帮助将不胜感激。

4 个答案:

答案 0 :(得分:3)

最后我提出了以下解决方案。

我已使用GCM 3.0实施了Instance ID API,以便使用ApplicationGCM服务器而非旧GoogleCloudMessaging.register(SENDER_ID);

向应用程序发送推送通知

因此,当应用服务器尝试向设备发送推送通知时,服务器会获取旧设备ID的 “error”:“NotRegistered” 响应,因此基于该服务器将删除无用的条目。

在GCM 2.0服务器中,有时即使安装了应用程序,也会获得 “error”:“NotRegistered” 响应,但在GCM 3.0中,它可以正常运行。

答案 1 :(得分:1)

最好将应用程序本身的公共数据保存为登录ID,公共ID等,而不是安全数据。让您的服务器也具有相同的公共ID。因此,如果您的应用程序数据被清除或卸载,应用程序中的登录ID,公共ID也将被删除。因此,下次他安装应用程序或尝试从头开始登录时,如果他使用相同的登录ID,则会为其分配不同的公共ID。在使用服务器进行身份验证期间,服务器将尝试与已存在的登录ID匹配,但它会知道公共ID不同,因此会忽略旧的publicID条目并为loginID创建相应的新公共ID。通过这种方式,您可以阻止针对相同登录ID的2个服务器推送通知。

答案 2 :(得分:0)

您可以使用广播接收器进行卸载和删除数据:

  

ACTION_UNINSTALL_PACKAGE

  

EXTRA_DATA_REMOVED

您可以让程序删除服务器中的注册,或让服务器"超时"注册仍然闲置太久。

答案 3 :(得分:0)

您可以使用Google的Firebase Analytics来跟踪这些应用事件。