如何在设备上捕获应用程序的卸载行为并让服务器知悉(iOS/Android)

8

问题描述:

我们有一个可以在主要移动操作系统上运行的服务。我们使用推送通知。当用户登录时,我们会存储他的设备授权数据(例如令牌),以便将来在推送服务中使用。问题出现在一个用户有几个设备授权,以及如何在用户卸载应用程序时正确保持它们有效。

例子:

我把我的登录信息给了一些人,以便让他们尝试一下。他们通过手机应用程序登录,系统会自动向数据库添加一些设备授权(令牌)。这样,我们就有了N个设备令牌对应一个用户。现在,假设那些已经安装了应用程序的人想要卸载它。他们没有退出登录,而是通过应用程序管理器卸载应用程序。此时,我们的授权设备数据就不再有效了。如果我们试图通知他们,通知就会被发送到无效地址,这是错误且对服务器毫无用处的工作。如何让核心知道一些存储的数据已不再有效呢?

简而言之 - 在Android / iOS中是否有可能触发应用程序删除事件。如果正在删除应用程序,则调用服务器清理存储中的数据。或者,如果应用程序处于打开状态并且用户卸载它,是否会触发onDestroy()? 或者其他的方法吗?

我不是iOS开发人员,也不是Android开发人员,对第二个有一些了解,对第一个则一无所知。任何建议将不胜感激。提前致谢。


哦,没错,你也想知道那个。它的工作方式不完全相同,但最终当足够的通知失败时,你将收到有关应用程序卸载的通知。已更新回复。 - Jens
2个回答

4

我无法代表iOS发言。在Android中,当你的应用程序被卸载时,你无法控制。


好的,明白了。但是如果应用程序在后台运行,我要卸载它,onDestroy()方法会被触发吗? - devdRew
@devdRew:我不会指望它。而且,即使它确实发生了,你也无法区分卸载和任何其他情况,在这些情况下你的 onDestroy() 方法都会被调用。 - CommonsWare
基本上唯一的方法是在你控制下的服务器上注册一个重复的“ping”,但这往往会在人们关闭移动数据/出国或其他情况下注册大量错误的卸载。 - Jens

2
这取决于您使用的推送服务。据我所知,如果您正在使用C2DM,则卸载应用程序的操作将自动从C2DM注销它。
编辑:
哦,关于iOS-据我所知,它不会直接跟踪卸载的应用程序,但它确实带有一个失败通知反馈服务feedback,在一系列由设备报告给推送网络的失败通知之后,它将通知您-允许您在卸载应用程序后进行清理。

你说得对,我们正在使用C2DM。谢谢,我明白了。关于C2DM有一个问题 - 如果应用程序关闭(不在后台运行),它是否会传递推送通知? - devdRew
@devdRew:是的。即使您的应用程序当前没有运行任何组件,C2DM也会调用您注册的“BroadcastReceiver”。 - CommonsWare
1
是的,它将作为广播Intent(action=com.google.android.c2dm.intent.RECEIVE)发送推送通知,因此您不需要始终运行。 - Jens

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接