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

34

在我的 iOS 应用中,当用户将要删除该应用程序时,会触发哪个事件?

3个回答

36

没有这样的东西,抱歉。

你最好能够检查UIApplicationWillTerminateNotification通知,但更重要的是,在应用程序转换到后台时保存应用程序的状态(例如在服务器上),并且祈祷用户不会在应用程序不运行时删除您的应用程序。因为一旦您的应用程序关闭,您就无法再控制它了。

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

编辑:Luis Ascorbe提出了一个想法:使用推送通知反馈服务 ( https://stackoverflow.com/a/7912045/157401 ) 。当然,那还远远不完美(并非所有用户都订阅通知,通知令牌可能因其他原因失效等),但这仍然值得考虑。


用户无法在应用程序运行时删除该应用,通知也不会触发,因为该应用程序已经终止或被冻结在内存中。 - JustSid
是的,这就是我想说的 ;) 每次应用程序被终止时,祈祷用户在此之后不要删除应用程序,因为你无法知道。 - Remy Vanherweghem
啊,我明白了。抱歉,我误解了那个。 - JustSid
1
我正在将一些数据存储到钥匙串中,并希望当用户删除应用程序时将其删除。 - Water7
1
你可以使用推送通知反馈服务 https://dev59.com/TVzUa4cB1Zd3GeqP46Hc - Luis Ascorbe

5
我们无法确定用户何时删除了应用程序。然而,我今天遇到了一种情况,可以检测特定设备和用户(只有在特定情况下才会知道)的应用程序卸载。
以下场景可能有助于您需要根据用户和设备删除数据的情况:
如果您的应用程序使用rest API服务和身份验证,请确保按照以下步骤跟踪它:
1. 确保使用用户ID和设备标识符的组合作为主键存储所有用户数据。 2. 为每个用户的每个设备标识符考虑一个布尔值。 3. 当用户登录应用程序时,进行服务调用,并将该设备标识符和用户ID上的布尔值设置为True。 4. 当用户退出应用程序时,进行服务调用,并将该设备标识符和用户ID的布尔值设置为False。在注销期间删除所有用户特定数据(取决于您的业务逻辑)。 5. 现在,如果用户再次登录并卸载应用程序而不注销,则布尔值将保持为True,并且所有相应的用户和设备特定数据将不会被删除。 6. 当用户在设备上登录时,在将其更新为True之前,请检查布尔值。如果已经为真,则表示同一用户已在该特定设备上卸载了此应用程序并重新安装了它。
请注意,此逻辑仅适用于应用程序中存在服务调用和初始身份验证的情况。此外,只有当同一用户尝试在同一设备上登录时,我们才能知道这一点。这种逻辑可能会帮助某些人,因为我们现在正在使用这种逻辑。如果我有错误,请指导新手。

0

很抱歉,没有这样的通知。当您的应用程序未运行时,它无法被通知到更改!

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


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