检测即将删除的iOS应用程序?

对于我的iOS应用程序,当用户a要删除应用程序时会触发什么事件?

没有这样的事,对不起。

你可以做的最好的办法是检查UIApplicationWillTerminateNotification通知,但更重要的是保存你的应用程序的状态(例如在服务器上),当它转换到背景并跨越你的手指,你的用户不会删除你的应用程序,当它不运行。 因为一旦你的应用程序closures,你不再有任何控制。

编辑:既然你想清除应用程序被删除时的钥匙串的内容,我build议你看看这个问题。 基本上,有些答案build议不删除在删除时的钥匙串的内容,而是当用户第一次启动应用程序使用NSUserDefaults。

编辑:路易斯Ascorbe评论一个想法:使用推送通知的反馈服务( https://stackoverflow.com/a/7912045/157401 )当然,这是远远不够完美(并非所有用户订阅的通知,通知令牌可能会失效出于其他原因等),但这仍然是需要考虑的事情。

编辑: 从iOS 10.3 Beta 2开始 ,当应用程序被删除时,钥匙串数据似乎不再持久。

我们无法准确知道用户何时删除了该应用程序。 不过,我今天遇到了一个情况来检测应用程序的卸载,这是既是设备和用户的具体情况(只有在特定情况下,它将被知道)。

以下情况可能会帮助您在需要删除基于用户和设备的数据的位置:如果您正在使用其他API服务和身份validation您的应用程序,请确保您执行此操作来跟踪它。

  1. 确保通过将用户标识和设备标识符组合为主键来存储所有用户数据。
  2. 考虑每个用户的每个设备标识符的布尔值。
  3. 当用户login到应用程序时,请进行服务调用,并将服务器上的设备标识符和用户标识设置为true。
  4. 当用户注销应用程序时,进行服务调用并将该设备标识符和用户标识设置为false。 在注销时删除所有用户特定的数据(从设备和后端)(取决于您的业务逻辑)。
  5. 现在,如果用户再次login并卸载应用程序而不注销,布尔将保持为true,并且所有相应的用户和设备特定数据将不会被删除。
  6. 当用户login设备时,请检查该bool值,然后将其更新为true。 如果它已经是真的,这意味着相同的用户已经卸载在该特定设备上的这个应用程序,并再次安装在同一个设备上。

请注意,只有当您的应用程序中有服务呼叫,并且最初有一些身份validation时,此逻辑才起作用。 此外,只有当同一用户试图login到同一设备时,我们才能知道这一点。 在其他用例中卸载应用程序不能用这个逻辑知道。

希望这种逻辑能帮助别人,因为我们现在正在使用这种逻辑。 我是一个新手..如果我错了,请指导。

恐怕没有这样的通知。 当你的应用程序没有运行,没有办法可以通知变化!

相反,您需要在用户按下主页button时保存任何状态,即“保持活动状态”。 (在UIApplicationDelegate有一个callback函数,你也可以监听通知。)一般来说,我不build议监听UIApplicationWillTerminateNotification因为它很less在支持多任务的iOS4上调用。