iOS - 在设备设置中,如果我更改时间,即使在应用程序后台、已终止状态下也应该得到通知

Posted

技术标签:

【中文标题】iOS - 在设备设置中,如果我更改时间,即使在应用程序后台、已终止状态下也应该得到通知【英文标题】:iOS - in device settings if i change time it should get notified even in app background, killed state 【发布时间】:2019-04-29 11:13:59 【问题描述】:

要获取设备设置时间更改通知,我发现我们必须使用UIApplication.significantTimeChangeNotification 通知和func applicationSignificantTimeChange(_ application: UIApplication) 委托方法。

但在我的情况下,即使应用程序处于后台或终止状态,我也必须向用户显示本地通知,说明设备时间已更改。有可能吗,如果我们对此有任何解决方案,请告诉我。

【问题讨论】:

【参考方案1】:

来自applicationSignificantTimeChange上的 Apple 文档

如果您的应用当前处于暂停状态,此消息将排队等待您的 应用程序返回到前台,此时它被交付。如果 发生多次时间更改,仅交付最近的一次。

因此,它清楚地表明这仅在应用程序处于前台时才有效。当应用程序未运行时,它甚至不会排队。

要在应用未运行时显示任何本地通知,应在过去安排它以在将来触发它。并且应用程序无法在未运行时知道时间更改事件。看起来您将无法实现您的要求。

【讨论】:

好的,但是在杀死应用程序之后,如果我更改设备时间,那么如果我打开应用程序,我会收到时间更改通知吗? 根据苹果文件,这是不可能的。当应用程序处于终止模式时,它不会知道任何事情。如果是背景,是可以的。【参考方案2】:

我不相信。 ios 无法向未运行的应用程序发送通知,并且它们不会在任何地方排队。

然而,一种可能的解决方法是从可信的在线来源获取当前的 UTC 值,并将其与设备认为的 UTC 值进行比较,然后存储该偏移量。一旦您的应用重新启动,请再次计算此偏移量,如果它与您之前存储的偏移量显着不同,请采取您应采取的措施来响应“重大时间更改”通知。

【讨论】:

以上是关于iOS - 在设备设置中,如果我更改时间,即使在应用程序后台、已终止状态下也应该得到通知的主要内容,如果未能解决你的问题,请参考以下文章

在 iOS 设备上查找正确时间

即使您在手机中启用横向设置,如何禁止活动更改方向? [复制]

在 iOS 设置中更改通知时,Amazon SNS 如何禁用/重新启用设备?

即使应用程序不在后台运行,如何让 iOS 应用程序执行一些代码?

在 Swift 中更改 iOS 应用程序的默认基本语言

即使从配置文件中删除了 UDID,iOS 应用程序仍在安装到设备中