and*_*per 58 android uninstall detect android-c2dm
我的应用使用Google的C2DM(推送通知)来通知用户有关朋友的新活动.安装应用程序后,我将设备注册到C2DM服务器并存储用户的电话号码.所以我知道用户正在使用我的应用程序,我可以向他/她发送推送通知.但是如果用户卸载我的应用程序会发生什么,有没有办法在我的应用程序中捕获它?或者唯一的方法是当我发送C2DM并且无法访问时,在我的服务器上捕获错误,然后将用户标记为非活动状态?
我很乐意在他们的朋友使用应用程序时以及他们不再使用时通知用户.
什么是这种情况的最佳解决方案?
And*_*yld 47
GCM文档解释了这种情况:
"从设备卸载后,应用程序可以自动取消注册.但是,此过程不会立即发生,因为Android不提供卸载回调."
基本上,当GCM尝试发送下一个推送通知时,设备将告知GCM已卸载接收应用程序.
至于通知朋友他们的朋友不再使用该应用程序,GCM会NotRegistered在发生此故障时向您的通知服务器发送错误; 它不会立竿见影,但你能用吗?
Mat*_*ttC 23
不幸的是,ACTION_PACKAGE_REMOVED意图将被发送给除您自己以外的所有接收者.这在这里得到证实.
有关您的C2DM计划的一些问题,因为我对它并不熟悉.如果用户长时间关闭设备,是否会触发您使用的错误情况?C2DM如何实际报告"无法访问"的设备?这是仅在尝试发送推送通知并且失败时发生的情况,还是在它以某种方式确定它到达设备但未能正确处理时?显然,在第二种情况下,你的计划会奏效,但我可以看到其他一些"误报".
较旧的SO问题供参考:android未在删除的包中接收Intent ACTION_PACKAGE_REMOVED
在检测卸载的应用程序时,Google C2DM服务正处于被动模式.
卸载应用程序后的第一次推送通知(不从C2DM取消注册!!!)将不会返回任何错误响应.但是,第二个推送通知将返回"无效注册"或"未注册"错误代码,您可以在其中意识到已卸载应用程序.
原因是C2DM服务器立即返回响应代码,然后才尝试推送客户端.当客户端响应卸载了某个应用程序时,它将从C2DM服务器中删除.下次尝试将立即返回错误代码.
是的,但它非常hacky.该方法基于以下事实:安卓卸载您的应用程序时所做的第一件事就是删除您的数据文件.因此,您可以使用文件观察程序来检测删除.您还需要在本机代码中编写它.如果您在java中编写代码,您的应用程序将在执行任何代码之前被卸载.请看这个演示:https://github.com/sevenler/Uninstall_Statics
我有几点要告诉你,
当您从服务器向 GCM 发送消息时,您将收到响应字符串。如果您收到“NotRegistered”错误,您应该从服务器数据库中删除注册 ID,因为该应用程序已从设备中卸载,或者它没有注册 ID。广播接收器配置为接收 com.google.android.c2dm.intent.RECEIVE 意图。”
| 归档时间: |
|
| 查看次数: |
68170 次 |
| 最近记录: |