【问题标题】:Detect iOS application about to delete?检测到即将删除的 iOS 应用程序?
【发布时间】:2011-08-02 11:33:55
【问题描述】:

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

【问题讨论】:

    标签: ios iphone


    【解决方案1】:

    没有,抱歉。

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

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

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

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

    【讨论】:

    • 应用程序运行时用户无法删除,通知不会触发,因为应用程序已经终止或冻结在内存中。
    • 是的,我就是这么说的 ;) 每次应用被终止时,祈祷你的用户不要在那之后删除应用,你无法知道。
    • 啊,我明白了。抱歉,我误会了。
    • 我正在将一些数据存储到钥匙串中,并希望在用户删除应用程序时将其删除。
    • 您可以使用推送通知反馈服务stackoverflow.com/questions/7911976/…
    【解决方案2】:

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

    以下方案可能会帮助您根据用户和设备删除需要删除的数据: 如果您正在为您的应用使用 REST API 服务和身份验证,请确保您这样做以跟踪它。

    1. 确保使用用户 ID 和设备标识符的组合作为主键来存储所有用户数据。
    2. 为每个用户的每个设备标识符考虑一个布尔值。
    3. 当用户登录应用程序时,进行服务调用并将服务器上的设备标识符和用户 ID 的 bool 设置为 true。
    4. 当用户注销应用程序时,进行服务调用并将该设备标识符和用户 ID 的 bool 设置为 false。注销时删除所有用户特定数据(从设备和后端)(取决于您的业务逻辑)。
    5. 现在,如果用户再次登录并在未注销的情况下卸载应用程序,则布尔值将保留为真,并且不会删除所有相应的用户和设备特定数据。
    6. 当用户登录设备时,在将其更新为 true 之前检查该布尔值。如果已属实,则表示同一用户已在该特定设备上卸载此应用并在同一设备上再次安装。

    请注意,此逻辑仅在您的应用中有服务调用并且最初进行了一些身份验证时才有效。 此外,只有当同一用户尝试登录同一设备时,我们才能知道这一点。使用此逻辑无法知道在其他用例中卸载应用程序。

    希望这种逻辑可以帮助我们现在使用这种逻辑的人。我是新手..如果我错了请指导。

    【讨论】:

      【解决方案3】:

      恐怕没有这样的通知。当您的应用程序未运行时,就无法收到更改通知!

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-02-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多