我的應用程序需要在不同時間(不重複)每天有超過10個本地通知。根據iOS official docs,我只能安排64個通知。我已經嘗試了this和其他網絡上的其他文章,但沒有找到可行的解決方案。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