当应用程序处于后台模式时,如何获得错过的 CloudKit 通知?
Posted
技术标签:
【中文标题】当应用程序处于后台模式时,如何获得错过的 CloudKit 通知?【英文标题】:How can I get missed CloudKit notification while app is in the background mode? 【发布时间】:2016-07-02 16:35:30 【问题描述】:-
CloudKit 管理我的通知(不是我的专用服务器)
我的 first 设备在 CloudKit Container 中发生变化并推送通知。
...但在我的 第二台 设备上,我的应用当前正在后台模式下运行。所以...通知通过Alert到达设备,但应用程序本身并不知道。
当应用返回前台模式时,捕捉这个错过的通知(甚至更多)的优雅而有效的方法是什么?
假设更改与我的顶部可见控制器有关,我想应用该更改而不在 viewDidAppear:
上获取任何内容。
【问题讨论】:
【参考方案1】:您只需执行以下操作,在UIApplicationDelegate
方法中实现:
func applicationWillEnterForeground(application: UIApplication)
var queryNotifications = [CKQueryNotification]()
let operation = CKFetchNotificationChangesOperation(previousServerChangeToken: nil)
operation.notificationChangedBlock = notification in
if let queryNotification = notification as? CKQueryNotification
queryNotifications.append(queryNotification)
operation.fetchNotificationChangesCompletionBlock = token, error in
var notificationIdentifiers = [CKNotificationID]()
for queryNotification in queryNotifications
let recordID = queryNotification.recordID!
//here you can do enything you need with your recordID
container.publicCloudDatabase.fetchRecordWithID(recordID, completionHandler: object, error in
notificationIdentifiers.append(queryNotification.notificationID!)
if queryNotifications.count == notificationIdentifiers.count
let operationQueue = NSOperationQueue()
operationQueue.addOperation(CKMarkNotificationsReadOperation(notificationIDsToMarkRead: notificationIdentifiers))
)
let operationQueue = NSOperationQueue()
operationQueue.addOperation(operation)
【讨论】:
以上是关于当应用程序处于后台模式时,如何获得错过的 CloudKit 通知?的主要内容,如果未能解决你的问题,请参考以下文章
当位置发生变化并且我的应用程序处于后台时,我可以获得本地通知吗?
当应用程序处于后台模式时,HealthKit Observer 不工作
iOS:Objective -C如何在应用程序处于后台模式时更改推送通知声音有效负载?
当移动设备处于睡眠模式或浏览器处于后台时,如何使用 Web 应用程序在移动浏览器中使用 HTML Geolocation API 获取位置?