【问题标题】:CloudKit CKSubscription Includes Mandatory Notifications?CloudKit CKSubscription 包括强制通知?
【发布时间】:2014-11-28 14:34:04
【问题描述】:

我正在编写一个基于 CloudKit 的 iOS 和 Mac 应用程序,它使用 CKSubscription 在远程数据集中发生更新时获得通知。我已正确设置订阅,并且正在收到通知。一切都很好!唯一的问题是设备会收到面向用户的通知。

我希望远程更新通知是应用程序内部的实现细节;我不希望用户每次更新自己的对象集合时都会收到通知。我似乎无法在文档中找到任何解决此问题的方法。苹果自己的docs here 谈论这个就像“呃,你当然想做一个通知”。好吧,我没有。

【问题讨论】:

    标签: ios apple-push-notifications cloudkit


    【解决方案1】:

    如果您将 CKNotificationInfo 的 alertBody 留空,那么您将不会收到面向用户的通知。通知将在您的应用程序中收到,您可以照常处理。

        var subscription = CKSubscription(recordType: recordType, predicate: predicate, options: .FiresOnRecordCreation | .FiresOnRecordUpdate | .FiresOnRecordDeletion)
        subscription.notificationInfo = CKNotificationInfo()
        subscription.notificationInfo.shouldSendContentAvailable = true
        subscription.notificationInfo.soundName = UILocalNotificationDefaultSoundName
        subscription.notificationInfo.alertBody = ""
    

    【讨论】:

    • 我稍微扩展了示例中的代码。你是这样用的吗?
    • 是的,但这里有一些新信息:每次运行我的应用程序时,我都会保存此订阅。由于第一次保存成功(并且可能使用不同的 alertBody 设置),后续保存因“重复订阅”而失败。我可以更改 UUID 并使其工作,但有没有办法只保存一次?
    • Eddie,我看到你经常回答有关 CloudKit 问题的 SO。非常感谢!碰巧的是,我也只使用私有数据库。我在其他地方找到了关于检查潜艇的建议,但这里的问题似乎是,如何更换潜艇?我想我有一个线索......我会回来检查的。
    • 我在应用程序开发过程中所做的是在启动时删除所有现有订阅,然后重新创建您需要的订阅。对于生产,您需要一种机制,以便您可以在必要时更新您的订阅。您可以通过枚举订阅然后将其删除来删除订阅。请参阅stackoverflow.com/questions/27203023/…,然后在循环中执行 database.deleteSubscriptionWithID
    • 确实如此。看起来这是要走的路:遍历所有潜艇并删除它们,然后重置它们。看看:不再有用户面临警报!再次感谢!
    猜你喜欢
    • 2016-02-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-25
    • 2022-10-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多