首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在didReceiveRemoteNotification中处理来自公共、私有和共享数据库的通知

在didReceiveRemoteNotification中处理来自公共、私有和共享数据库的通知
EN

Stack Overflow用户
提问于 2020-06-11 09:11:47
回答 1查看 35关注 0票数 2

我通过将userInfo转换为CKDatabaseNotification来处理私有和共享数据库通知。但我确实收到了didReceiveRemoteNotification方法中的公共数据库通知,并且苹果模板代码没有显示如何处理它,它引发了一个fatalError。如何通过fetchChanges方法处理公共数据库通知?

代码语言:javascript
复制
 func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable : Any], fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void) {

    let dict = userInfo as! [String: NSObject]
    guard let vc = self.window?.rootViewController as? UIViewController else { return }
    guard let notification:CKDatabaseNotification = CKNotification(fromRemoteNotificationDictionary:dict) as? CKDatabaseNotification else { return }
    self.fetchChanges(in: notification.databaseScope) {
        completionHandler(UIBackgroundFetchResult.newData)
    }

}

func fetchChanges(in databaseScope: CKDatabaseScope, completion: @escaping () -> Void) {
    switch databaseScope {
    case .private:
        self.fetchPrivateChanges(completion: completion)
    case .shared:
        self.fetchSharedChanges(completion:) { status in
            if (status == false) {
                return
            }
        }
    case .public:
        fatalError()
    }
}
EN

回答 1

Stack Overflow用户

发布于 2020-06-12 02:20:54

您可以在switch语句中将case .public更改为default:,因为如果它不是私有或共享的,那么它就必须是公共的。

此外,为了清楚起见,您不需要在其中包含fatalError()。如果这就是让你悲伤的原因,那就把它去掉,然后用通知来代替它。

我做的另一件事是检查didReceiveRemoteNotification中的订阅ID,以了解更多关于我应该如何处理它的信息。你可以像这样得到它:

代码语言:javascript
复制
if let sub = notification.subscriptionID{
  print(sub) //Prints the subscription ID
}

希望这能有所帮助。:)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62315532

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档