很遗憾,ACTION_PACKAGE_REMOVED Intent将发送给除您自己之外的所有接收者。 关于您的C2DM计划的一些问题,因为我对它不是很熟悉。如果用户只是让他们的设备关闭很长一段时间,这会触发你使用的错误条件吗?C2DM实际上是如何报告一个“无法到达”的设备的?这种情况是仅在尝试发送推送通知但失败时发生,还是在以某种方式确定它到达设备但未能到达时发生处理得当?显然在第二种情况下你的计划会奏效,但我可以看到一些“假阳性”发生在其他情况下。 供参考的旧SO问题:android not receiving Intent ACTION_PACKAGE_REMOVED in the removed package
8条答案
按热度按时间wz1wpwve1#
GCM文档在此解释了这种情况:
https://developers.google.com/cloud-messaging/registration#how-uninstalled-client-app-unregistration-works
应用程序从设备中卸载后可以自动取消注册。但是,此过程不会立即发生,因为Android不提供卸载回调。
基本上,当GCM尝试发送下一个推送通知时,设备将告诉GCM接收应用程序已卸载。
至于通知朋友他们的朋友不再使用应用程序,GCM将发送一个
NotRegistered
错误到您的通知服务器时,这个故障发生;不会马上,但你能用那个吗?llycmphe2#
很遗憾,ACTION_PACKAGE_REMOVED Intent将发送给除您自己之外的所有接收者。
关于您的C2DM计划的一些问题,因为我对它不是很熟悉。如果用户只是让他们的设备关闭很长一段时间,这会触发你使用的错误条件吗?C2DM实际上是如何报告一个“无法到达”的设备的?这种情况是仅在尝试发送推送通知但失败时发生,还是在以某种方式确定它到达设备但未能到达时发生处理得当?显然在第二种情况下你的计划会奏效,但我可以看到一些“假阳性”发生在其他情况下。
供参考的旧SO问题:android not receiving Intent ACTION_PACKAGE_REMOVED in the removed package
fjaof16o3#
是的,但它是相当的hacky。该方法是基于这样一个事实,即android做的第一件事时,卸载您的应用程序是删除您的数据文件。所以你可以使用一个文件观察器来检测删除。此外,你需要写在本机代码。如果你写你的代码在java中,你的应用程序将被卸载之前,它可以执行任何代码。请看这个演示:https://github.com/sevenler/Uninstall_Statics
k75qkfdt4#
Google C2 DM服务在检测未安装的应用程序时处于被动模式。
卸载应用程序后的第一个推送通知(没有从C2 DM中注销!!!)不会返回任何错误响应。但是,第二个推送通知将返回“无效注册”或“未注册”错误代码,您可以意识到应用程序已卸载。
原因是C2 DM服务器立即返回响应代码,然后才尝试推送客户端。当客户端响应应用程序已卸载时,它将从C2 DM服务器中删除。下一次推送尝试将立即返回错误代码。
q0qdq0h25#
我有几点要告诉你,
1.在android中,应用程序无法获得应用程序正在被卸载的通知。
1.在GCM中,如果您想停止向未安装的应用程序发送消息,可以参考
当您从服务器向GCM发送消息时,您将收到响应字符串。如果您收到错误“NotRegistered,您应该从服务器数据库中删除注册ID,因为该应用程序已从设备中卸载,或者它没有配置广播接收器来接收com.google.android.c2dm.intent.RECEIVE意图。”
brgchamk6#
我只知道一种方法,即服务器响应200的正文中包含“NotRegistered”消息。
NotRegistered -registration_id不再有效,例如,用户已卸载应用程序或关闭通知。发件人应停止向此设备发送消息。
wdebmtf27#
查看此GCM文档:GCM注销
你不应该注销你的应用程序。这是从服务器端照顾。
4jb9z9bj8#
要使用Google Play服务检测应用卸载,你可以使用应用卸载报告API。此API允许你在用户卸载应用时接收通知。@ThanksChatGPT