我正在开发基于Login-Logout
机制和REST API
集成的应用程序。
要使REST API
请求TOKEN
是必需的。应用程序将此TOKEN
和其他用户详细信息保存到SharedPreferences
。
当用户登录应用程序保存所有必需数据时,在注销时从SharedPreferences
删除所有数据,并从应用程序服务器删除TOKEN
条目
应用程序还向GCM server
注册,以向用户发送推送通知。对于该应用程序,将设备注册ID发送到应用程序服务器。
但是,如果用户清除应用程序数据或卸载,则应用程序将打开登录屏幕并再次向应用程序服务器和GCM服务器注册,因此旧条目仍保留在应用程序服务器中,并且新条目将添加到服务器。
因此,如果服务器向应用程序发送推送通知,则在设备中接收两个推送通知。
如果清除应用程序数据或卸载应用程序,有没有办法以编程方式检测?
任何帮助将不胜感激。
答案 0 :(得分:3)
最后我提出了以下解决方案。
我已使用GCM 3.0
实施了Instance ID API
,以便使用Application
和GCM
服务器而非旧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)
您可以使用广播接收器进行卸载和删除数据:
和
您可以让程序删除服务器中的注册,或让服务器"超时"注册仍然闲置太久。
答案 3 :(得分:0)
您可以使用Google的Firebase Analytics来跟踪这些应用事件。