iOS中的本地通知,无需运行应用程序
我的应用程序需要在不同时间(不重复)每天有超过10个本地通知。根据iOS official docs,我只能安排64个通知。我已经尝试了this和其他网络上的其他文章,但没有找到可行的解决方案。iOS中的本地通知,无需运行应用程序
即使我的应用没有运行几天(或死亡),我是否可以在不同的时间安排本地通知?
没有直接的方法做到这一点。
如果你想这样做(不适当的解决方案,只是一个补丁),然后只需要通过以下方式。
- 唤醒应用程序在后台 - 这可以通过使用起始位置经理来完成,这将唤醒你的应用程序在后台时的位置得到更新,这时候你可以做任何你与本地通知或任何类似其他事情。
应用此方法之前 - 确保 - 这是太耗电的方式+不正确的方式。如果使用太多电池,您的应用可能会被苹果拒绝。
阅读以下资料(从其他的问题,从计算器复制):
应用程序可以通过一个显著的位置变化来唤醒,如果应用程序已表示要监视此类事件。
参见:[CLLocationManager文件] [1]
查找的方法称为startMonitoringSignificantLocationChanges
。如果您的应用程序不在前台或根本没有运行时发生重大位置更改,则应用程序将在后台启动,允许应用程序执行仅后台操作(例如,不会运行视图代码)。
背景获取可能比使用位置更好。对于位置,您需要获得用户权限,如果该应用程序实际上未使用位置信息,则该应用程序将被拒绝。 – Paulw11
我也使用了后台抓取功能,但仍然没有成功 –
当你希望你的应用在后台工作时,即使它被杀死了,你也必须从你的项目能力中启用'背景模式',并在特定的时间通过它启动本地通知方法。
这里是一个小的代码片段,让您开始:
var backgroundTask: UIBackgroundTaskIdentifier = UIBackgroundTaskInvalid
override public func viewDidLoad() {
super.viewDidLoad()
NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(self.reinstateBackgroundTask), name: UIApplicationDidBecomeActiveNotification, object: nil)
}
//MARK: Background Task/Local Notifications/Checkin
deinit {
NSNotificationCenter.defaultCenter().removeObserver(self)
}
func reinstateBackgroundTask() {
if backgroundTask == UIBackgroundTaskInvalid {
registerBackgroundTask()
}
}
func registerBackgroundTask() {
backgroundTask = UIApplication.sharedApplication().beginBackgroundTaskWithExpirationHandler {
[unowned self] in
self.endBackgroundTask()
}
assert(backgroundTask != UIBackgroundTaskInvalid)
}
func endBackgroundTask() {
NSLog("Background task ended.")
UIApplication.sharedApplication().endBackgroundTask(backgroundTask)
backgroundTask = UIBackgroundTaskInvalid
}
func dosomething() {
registerBackgroundTask()
//Fire Local Notifications accordingly…
//Use NSTimer if you want it with specific time intervals
}
看一看这个美好的Raywenderlich Tutorial了解iOS背景模式。
这只会让你在应用程序终止前耗时3分钟 – Paulw11
不可以。根据Apple文档,它取决于您想要在后台执行什么样的任务,要么播放音频,下载内容,要么运行有限长度的任务。这会在启用“背景模式”时在Info.plist中添加特殊权利。所以它有点标志着这些应用程序将使用这个独特的功能(即使他们被杀死),所以操作系统将更宽松的内存消耗,并不会暂停它:) –
是的,你可以使用这些后台任务获得重新启动,但你只有几秒钟。使用'beginBackgroundTaskWithExpirationHandler'可以给你更多的时间,但最多只需要3分钟。如果你在调试器下测试,那么3分钟后你的应用程序不会被杀死('backgroundTimeRemaining'只会继续报告0),但如果你正常运行,没有连接到Xcode,那么应用程序将被杀死超过允许的背景时间。 – Paulw11
你可能需要使用服务器为您推送,而不是本地通知 – Paulw11