我希望跟踪用户在我的应用程序中花费的时间。我希望一旦用户与任何其他应用程序交互后就停止跟踪此消息,但我不希望它在用户锁定手机并重新输入该应用程序而不与其他任何交互时停止跟踪此消息。在iOS中这可能吗?
答案 0 :(得分:1)
可能不是,因为您的应用在两种情况下都处于后台并且已挂起,并且您无法区分它们。
答案 1 :(得分:1)
“无法与任何其他应用程序交互”是您可以确定的,这是有意的。即使您找到了一些棘手的方法来实现它,您也应该期望苹果将来会打破它,因为这是隐私问题。
更关键的是,“任何其他应用程序”都是听起来很精确但实际上却非常模糊的东西之一。与共享表(可能是另一个应用程序的扩展,并且在您的过程之外发生)进行交互时是否与其他任何应用程序进行交互?作为应用程序扩展提供的自定义键盘怎么样? iPad多任务处理是否“与任何其他应用程序交互”?接听电话(即Phone.app)如何?如果已接听电话但用户又回到您的应用程序怎么办?如果您的应用在设备关闭(有意或由于断电)而运行时,是否与“锁定手机”相同?有很多极端的情况。
也就是说,您可以通过应用程序委托(或相关通知)检测到很多正在描述的内容。您可以告诉您何时退出活动状态并进入后台,也可以告诉设备何时被锁定(通过protectedDataWillBecomeUnavailableNotification
)。有了这些,以及一些有关计时的启发式方法,您可以做出很多决定。例如,如果您退出活动状态,然后立即保护的数据(或者在旧版OS上大约为10s)不可用,则说明用户锁定设备时您很可能处于活动状态。更准确地说,您可以看到受保护的数据在您的应用程序激活之前立即可用。
几乎可以肯定,希望通过观看通知(或应用程序委托方法)和时钟来解决此问题。如果您辞职并在很短的时间内就开始活动,那么那里可能没有其他应用了。
一个旁注:protectedDataWillBecomeUnavailableNotification
通常仅在启用了设备数据保护的情况下发布,这需要用户提供PIN。如果用户没有PIN,则可能会更困难。