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

时间:2011-08-02 11:33:55

标签: ios iphone

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

3 个答案:

答案 0 :(得分:24)

没有这样的事,抱歉。

您可以做的最好的事情就是检查UIApplicationWillTerminateNotification通知,但更重要的是保存应用的状态(例如在服务器上),当它转换到背景并且用手指交叉时,您的用户不会在您的应用未运行时删除它。因为一旦您的应用关闭,您就不再拥有任何控制权。

编辑:由于您想在删除应用时清除钥匙串的内容,建议您查看this其他问题。基本上,一些答案建议不要在删除时删除钥匙串的内容,而是在用户首次使用NSUserDefaults启动应用程序时。

编辑:Luis Ascorbe评论了一个想法:使用推送通知的反馈服务(https://stackoverflow.com/a/7912045/157401)当然,这远非完美(并非所有用户订阅通知,通知令牌可能因其他原因而无效,等等。)但这仍然需要考虑。

编辑:Starting with iOS 10.3 Beta 2,删除应用时,钥匙串数据似乎不再保留。

答案 1 :(得分:4)

我们无法确切知道用​​户何时删除了该应用程序。但是,我今天遇到了一种情况,即检测应用程序的卸载,这是设备和用户特定的(仅在特定情况下才会知道)。

以下方案可帮助您根据用户和设备删除数据: 如果您正在为您的应用程序使用其他API服务和身份验证,请确保执行此操作以跟踪它。

  1. 确保使用用户ID和设备标识符组合作为主键来存储所有用户数据。
  2. 考虑每个用户的每个设备标识符的bool值。
  3. 当用户登录应用程序时,进行服务调用并在服务器上为该设备标识符和用户ID设置bool为true。
  4. 当用户注销应用程序时,进行服务调用并将该设备标识符和用户ID的bool设置为false。在注销时删除所有用户特定数据(来自设备和后端)(取决于您的业务逻辑)。
  5. 现在,如果用户再次登录并在不注销的情况下卸载应用程序,则bool将保持为true,并且不会删除所有相应的用户和设备特定数据。
  6. 当用户登录设备时,请在将其更新为true之前检查该bool值。如果已经存在,则表示同一用户已在该特定设备上卸载此应用并再次将其安装在同一设备上。
  7. 请注意,此逻辑仅在您的应用中存在服务调用并且最初有一些身份验证时才有效。 此外,只有当同一用户尝试登录同一设备时,我们才能知道这一点。使用此逻辑无法了解在其他用例中卸载应用程序。

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

答案 2 :(得分:0)

我担心没有这样的通知。当您的应用未运行时, 无法通知更改!

相反,当用户按下主页按钮时,即当“重新激活”时,您需要保存任何状态。 (UIApplicationDelegate中有一个回调,您也可以收听通知。)一般情况下,我不建议收听UIApplicationWillTerminateNotification,因为在支持多任务的iOS4上很少调用它。