2016-08-04 90 views
2

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

即使我的應用沒有運行幾天(或死亡),我是否可以在不同的時間安排本地通知?

+0

你可能需要使用服務器爲您推送,而不是本地通知 – Paulw11

回答

0

沒有直接的方法做到這一點。

如果你想這樣做(不適當的解決方案,只是一個補丁),然後只需要通過以下方式。

  • 喚醒應用程序在後臺 - 這可以通過使用起始位置經理來完成,這將喚醒你的應用程序在後臺時的位置得到更新,這時候你可以做任何你與本地通知或任何類似其他事情。

應用此方法之前 - 確保 - 這是太耗電的方式+不正確的方式。如果使用太多電池,您的應用可能會被蘋果拒絕。

閱讀以下資料(從其他的問題,從計算器複製):

應用程序可以通過一個顯著的位置變化來喚醒,如果應用程序已表示要監視此類事件。

參見:[CLLocationManager文件] [1]

查找的方法稱爲startMonitoringSignificantLocationChanges。如果您的應用程序不在前臺或根本沒有運行時發生重大位置更改,則應用程序將在後臺啓動,允許應用程序執行僅後臺操作(例如,不會運行視圖代碼)。

+0

背景獲取可能比使用位置更好。對於位置,您需要獲得用戶權限,如果該應用程序實際上未使用位置信息,則該應用程序將被拒絕。 – Paulw11

+0

我也使用了後臺抓取功能,但仍然沒有成功 –

0

當你希望你的應用在後臺工作時,即使它被殺死了,你也必須從你的項目能力中啓用'背景模式',並在特定的時間通過它啓動本地通知方法。

這裏是一個小的代碼片段,讓您開始:

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背景模式。

Apple's Documentation

+0

這隻會讓你在應用程序終止前耗時3分鐘 – Paulw11

+0

不可以。根據Apple文檔,它取決於您想要在後臺執行什麼樣的任務,要麼播放音頻,下載內容,要麼運行有限長度的任務。這會在啓用「背景模式」時在Info.plist中添加特殊權利。所以它有點標誌着這些應用程序將使用這個獨特的功能(即使他們被殺死),所以操作系統將更寬鬆的內存消耗,並不會暫停它:) –

+0

是的,你可以使用這些後臺任務獲得重新啓動,但你只有幾秒鐘。使用'beginBackgroundTaskWithExpirationHandler'可以給你更多的時間,但最多隻需要3分鐘。如果你在調試器下測試,那麼3分鐘後你的應用程序不會被殺死('backgroundTimeRemaining'只會繼續報告0),但如果你正常運行,沒有連接到Xcode,那麼應用程序將被殺死超過允許的背景時間。 – Paulw11

相關問題