如何处理触发定期本地通知但时间表不断变化的应用程序?
Posted
技术标签:
【中文标题】如何处理触发定期本地通知但时间表不断变化的应用程序?【英文标题】:How to tackle an app that fires recurring local notifications but on a changing schedule? 【发布时间】:2015-10-27 09:17:37 【问题描述】:我正在创建一个需要每天触发本地日出和日落通知的应用。
日出和日落时间每天都在变化。 我希望即使用户没有打开应用程序(即后台任务)也能注册本地通知。所以用户安装应用程序,设置他的位置(因为日出和 susnet 计算是基于位置的),然后他知道他会收到日出通知并每天设置,而无需打开应用程序或连接到互联网。李> 理想情况下,我需要一个后台任务来在给定时间段内注册本地通知,该任务至少每个时间段运行一次。 “例如,注册下周的本地通知,在这种情况下,我需要它每周至少运行一次”。 当前的后台模式都不适合我的情况,我尝试了后台提取,但由于没有下载数据,ios 几天后停止运行我的后台任务 我知道我可以使用推送通知,但我不想这样做,除非这是我最后的选择,因为我希望即使手机未连接到互联网也能收到通知。那么你认为我可以如何解决这个问题?我有什么遗漏吗?
【问题讨论】:
【参考方案1】:在后台每 'n' 分钟获取一次位置。通过使用 beginBackgroundTaskWithExpirationHandler 和 NSTimer .it 让应用程序在后台运行。 因此,您可以在后台安排本地通知。 在后台获取位置更新请参阅链接 How do I get a background location update every n minutes in my iOS application?
(从 iOS7 的有限长度后台任务时间减少到 180 秒。因此您必须在接下来的 180 秒内获取位置。) 如果用户强制退出应用程序。该应用程序破坏了所有任务。使用重大位置更改或区域监控来重新启动后台任务并每隔 'n' 分钟获取一次位置。
【讨论】:
我认为不再是这种情况了。我认为一旦达到阈值,iOS 就会暂停 NSTimer。在后台触发应用程序的唯一方法是使用其中一种后台模式进行后台执行。 如果您在 180 秒内获得位置。应用程序寿命再延长 180 秒。您每 180 秒获得一次位置。可以通过 NSLog(@"backgroundTimeRemaining: %.0f", [[UIApplication sharedApplication] backgroundTimeRemaining]); 查看后台剩余时间以上是关于如何处理触发定期本地通知但时间表不断变化的应用程序?的主要内容,如果未能解决你的问题,请参考以下文章