当应用程序处于后台模式时,如何获得错过的 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 获取位置?

当 Apple Watch 处于后台状态或睡眠模式时,我们如何从 iphone 向 Apple Watch 发送消息?