Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/203.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何知道是清除了应用程序数据还是卸载了应用程序?_Android - Fatal编程技术网

Android 如何知道是清除了应用程序数据还是卸载了应用程序?

Android 如何知道是清除了应用程序数据还是卸载了应用程序?,android,Android,我正在开发基于Login-Logout机制以及restapi集成的应用程序 要生成restapi请求,需要TOKEN。应用程序正在将此令牌和其他用户详细信息保存到SharedReferences 当用户登录应用程序时,保存所有必需的数据,并在注销时从SharedReferences中删除所有数据,并从应用程序服务器中删除TOKEN条目 应用程序还向GCM服务器注册,以便向用户发送推送通知。对于该应用程序,将设备寄存器Id发送到应用程序服务器 但若用户清除应用程序数据或卸载,则应用程序将打开登录屏

我正在开发基于
Login-Logout
机制以及
restapi
集成的应用程序

要生成
restapi
请求,需要
TOKEN
。应用程序正在将此
令牌
和其他用户详细信息保存到
SharedReferences

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

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

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

所以,若服务器向应用程序发送推送通知,那个么两个推送通知将在设备中接收

是否有任何方法可以通过编程检测应用程序数据是否已清除或应用程序是否已卸载


任何帮助都将不胜感激。

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

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


您可以让程序删除服务器中的注册,或者让服务器“超时”注册保持空闲太长时间。

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

我已经用
实例ID API实现了
GCM 3.0
,用于使用
应用程序
GCM
服务器而不是旧的
谷歌云消息。注册(发送方ID)

所以,当应用程序服务器尝试向设备发送推送通知时,服务器会收到旧设备id的“NotRegistered”响应,因此基于该服务器将删除无用的条目


在GCM 2.0中,服务器获取“错误”:“未注册”
即使安装了应用程序,有时也会有响应,但在
GCM 3.0
中,它工作得非常好。

您可以使用谷歌Firebase Analytics来跟踪这些应用程序事件。

在服务器上为每个用户保存一个唯一的ID。从GCM生成的设备注册ID对于应用程序将是相同的。如果应用程序数据被清除或应用程序被卸载,有没有办法通过编程来检测它的变化?如果用户再次安装应用程序并使用另一个用户名,那么你应该把他看作一个新用户。否则,如果他使用与以前相同的登录详细信息,只需检查该用户是否已经存在,并只更新服务器中的详细信息。如果他使用相同的登录ID,但如果他没有,该怎么办?那么,很酷,很简单。你在服务器上有一个新的登录Id和一个新的公共Id。他只会收到该登录Id的推送通知。这更像是,例如,你有一个购物应用程序,你有两个帐户,你在一个设备上使用它。一次只能使用一个帐户。因此,您会收到针对特定帐户/登录ID的推送通知。如何处理服务上的延迟数据?现在不再使用的帐户数据在卸载或清除应用程序时,服务上的数据也会重置。应用程序允许不同类型的用户登录,例如(客户、供应商)。用户首先登录客户。此条目添加到服务器,现在用户卸载应用程序并重新安装,然后登录供应商,以便在向这两种类型的用户发送任何常规通知时使用。设备将收到两个用户的通知。您如何知道您使用的是哪个版本?GCM 3.0引入了主题消息和实例ID API,以前的API GCM 2.0包括GoogleCloudMessaging.register(发送者ID);