CloudKit 在记录创建时收到多个通知

Posted

技术标签:

【中文标题】CloudKit 在记录创建时收到多个通知【英文标题】:CloudKit Receive Multiple Notification on Record Creation 【发布时间】:2015-12-21 02:48:00 【问题描述】:

我正在使用 FireOnCreation 添加对 Cloud Kit 记录类型的订阅。

在 appDelegate 中,我使用了didReceiveRemoteNotificationWithCompletionHandler 来捕获通知。我遇到的问题是,当创建与谓词匹配的记录时,didReceiveRemoteNotificationWithCompletionHandler 会触发多次。在设备 A 上,它会持续触发 3 次,而在设备 B 上,它将触发 6 次。我什至尝试在 Cloud DashBoard 上创建记录,但它仍然会做同样的事情。所以这说明问题不在于记录的创建。任何建议或提示都会有很大帮助。

func application(application: UIApplication, didReceiveRemoteNotification userInfo: [NSObject : AnyObject], fetchCompletionHandler completionHandler: (UIBackgroundFetchResult) -> Void) 


func subscribeRecordChangesForCurrentUser(userRecordID: CKRecordID) 
    print("subscribeRecordChangesForCurrentUser \(userRecordID.recordName)")
    let userRef = CKReference(recordID: userRecordID, action: CKReferenceAction.None)
    let predicate = NSPredicate(format: "toUsers CONTAINS %@", userRef)
    let subscription = CKSubscription(recordType: "Track", predicate: predicate, options: [.FiresOnRecordCreation])

    let notificationInfo = CKNotificationInfo()
    notificationInfo.alertBody = "Created a new track."
    notificationInfo.shouldSendContentAvailable = true
    notificationInfo.soundName = UILocalNotificationDefaultSoundName

    subscription.notificationInfo = notificationInfo

    let publicDatabase = CKContainer.defaultContainer().publicCloudDatabase

    publicDatabase.saveSubscription(subscription)  (subscription: CKSubscription?, error: NSError?) -> Void in
        guard error == nil else 
            print(error?.localizedDescription)
            return
        
        print("successfully subscript user")
    

【问题讨论】:

【参考方案1】:

您可能在这些设备上有多个订阅。创建新订阅时,请删除旧订阅。

看看

CKDatabase.fetchAllSubscriptionsWithCompletionHandler(_:)

为了快速而肮脏的修复,我相信您可以从设备中删除该应用程序并重新安装它。

【讨论】:

感谢您的回复。这正是我忽略的事情。我认为从 Cloud Dashboard 中删除订阅就足够了。显然不是,我发现云容器很脏。最后,我不得不重置开发环境。现在,我使用 CKModifySubscriptionsOperation 方法删除旧订阅并保存新订阅。我使用 fetchAllSubscriptionsWithCompletionHandler 来获取所有当前要删除的订阅。

以上是关于CloudKit 在记录创建时收到多个通知的主要内容,如果未能解决你的问题,请参考以下文章

未收到来自 CloudKit 订阅的推送通知

如何创建 CloudKit 订阅通知以触发记录属性更新?

Cloudkit 新记录通知

CKReference 的 CloudKit 订阅通知未按预期工作

iOS 未收到来自 CloudKit 的推送通知

Objective C-推送通知不适用于 Cloudkit