检测应用程序正在棒棒糖设备中卸载
Posted
技术标签:
【中文标题】检测应用程序正在棒棒糖设备中卸载【英文标题】:Detect application is being uninstalled in lollipop devices 【发布时间】:2016-06-15 14:45:53 【问题描述】:我想知道哪些用户卸载了我的应用程序,以便我可以要求他们提供反馈以改进应用程序。因此,我想检测用户何时在我的应用程序上启动了卸载过程。
*** 上的older solutions 之一具有以下步骤:
List< ActivityManager.RunningTaskInfo > taskInfo = am.getRunningTasks(MAX_PRIORITY);
String activityName = taskInfo.get(0).topActivity.getClassName();
if (activityName.equals("com.android.packageinstaller.UninstallerActivity"))
// do whatever is needed
自 Lollipop 以来,getRunningTasks
已被弃用。那么如何在没有 getRunningTask 的情况下检测到 com.android.packageinstaller.UninstallerActivity
活动呢?
或者,是否有任何其他方法可以检测我的应用程序已启动卸载过程?可能使用getAppTask
?
【问题讨论】:
您可能会从想要保留应用的用户那里获得比想要卸载它的用户更多/更好的反馈。 【参考方案1】:显然你无法做到这一点,你将不得不依赖一种叫做静默通知的东西。
我们所做的是每 3 天或您想要的任何频率发送一次通知。 在客户端,一旦收到通知,我们就会打一个网络调用,为客户端标记 NotificationReceived。现在,由于通知不是完全证明,我们假设 2/3 错过通知的阈值作为卸载事件。对于客户,我们将此计数器超过了确定的阈值,我们联系了他们寻求反馈。
由于用户已经决定卸载您的应用程序,因此在卸载时没有人愿意填写您的表单。
【讨论】:
您能否解释一下“我们每 3 天发送一次通知”?那里的“我们”是什么?而在“在客户端收到通知后,我们立即拨打网络电话”:“我们”又是什么? @dugsmith 伙计,我建议您让您的开发人员阅读此答案,我认为他会在这里更好地了解上下文。我无法解释“我们”这个词的用法。请参阅此链接以获取更多参考“merriam-webster.com/dictionary/we” “交流的最大敌人是它的幻觉。”威廉·怀特quoteinvestigator.com/2014/08/31/illusion. @dugsmith“我们每 3 天发送一次通知”? -> 这里我们指的是每 24 小时运行一次的 cron 作业,以向所有用户发送通知。 “在客户端,一旦收到通知,我们就会进行网络调用” -> 这里我们指的是触发网络调用以将通知注册为收到的用户应用程序(andorid/ios),【参考方案2】:阅读这两个问题和答案:
native solution
GCM solution
据我所知,您必须将两者混合使用。阅读第一个解决方案的局限性。您必须确认第一个解决方案与第二个解决方案的卸载事件才能完整实施。
【讨论】:
第一个解决方案下有许多 cmets 质疑它是否适用于当前的 Android 版本。我希望得到一个可能适用于最新版本 Android 的答案。【参考方案3】:希望这个solution 对你有用。它可以帮助您了解应用卸载的原因,使用强大的预测引擎降低卸载率,并通过独特的可操作渠道(Android 4.0 及更高版本)获得应用重新安装。
【讨论】:
【参考方案4】:只需为服务器端的每个用户设置一个名为 appLastPresent
的变量,然后每天通过使用 WorkManager's
PeriodicWorkRequest
调用 API 来更新该变量。当用户安装应用程序时,还要设置installedDate
变量。
现在在服务器端设置一个 chron 作业,检查installedDate
和appLastPresent
之间的差异是否大于 7 天。然后向用户发送电子邮件或消息,询问问题或反馈(如果更大)。
注意:用户可以离线 7 天。因此只发送电子邮件询问像why you are not using the app, if uninstalled please let us know why
【讨论】:
@dugsmith 这是您正在寻找的规范答案 是的,这比其他人更有帮助。很抱歉,我让赏金到期,它是自动授予的。但我感谢您的帮助。 @a2en WorkManager's 不是完整的证明,原因可以说用户强制停止应用程序工作管理器不能保证运行,即使 android 文档说它是,但它不能按预期工作。所以你可能会用这种方法得到误报。尝试我上面建议的方法进行更改。 @saurabhdhillon 如果应用程序被强制停止,您的推送也不起作用 [***.com/a/20838611/6225053。根据文档The task is still guaranteed to run, even if your app is force-quit or the device is rebooted.
[developer.android.com/topic/libraries/architecture/workmanager,即使在强制停止后,workmanager 也可以保证运行以上是关于检测应用程序正在棒棒糖设备中卸载的主要内容,如果未能解决你的问题,请参考以下文章