努力理解CloudKit中的CKSubscriptions

时间:2015-05-07 00:03:41

标签: ios cloudkit cksubscription

我已经阅读并尝试使用CKSubscription功能数周,但我无法找到有关一些常见问题的信息。我已经阅读了Apple文档,在线教程,我购买的书籍以及SO上的问题,但我仍然不了解我认为的基本原理。很感谢任何形式的帮助。

以下是我无法找到答案的问题:

1)。 subscriptionID的目的是什么?方便init不包含它,那么为什么在指定的init中需要它呢?如果您使用它,该应用的所有用户是否都一样?

2)。我看到有人在这里提到你可以取消注册subscriptionID。为什么或如何做到这一点?

3)。可以在公共或用户的私人数据库中设置订阅吗?

4)。如果我有一个基于查询的订阅对所有用户都相同,那么数据库中是否只会列出一个订阅?

例如,我无法收到通知与我合作 具体用例。它在我的设置中不是问题,因为我可以获得True谓词工作并且通知到来。所以我不能理解订阅如何工作的基本原理。

我试图设置一个订阅,当其他用户对帖子发表评论时,只要创建新记录就会触发该订阅。然后,此新记录将包含对创建帖子的用户的引用。我在数据库中为两个用户看到的唯一订阅是 - Notifications.user(等于引用)。所以,我假设我只会看到这一个订阅。(?)但是服务器如何跟踪每个用户的recordID或知道何时将其发送到特定设备?< / p>

问题是我无法通知工作。我在仪表板中手动添加记录,然后将其他用户的recordID作为CKReference。在我添加记录的同时,我将应用程序在后台运行在用户帐户下的设备上,我在该字段中添加了CKReference。我希望查询能够触发并发送推送通知,因为有人对此用户的帖子发表了评论。

这是我设置订阅的代码:

func subscribe(userID: CKRecordID) {


    let options = CKSubscriptionOptions.FiresOnRecordCreation

    let userRef = CKReference(recordID: userID, action: .DeleteSelf)
    let predicate = NSPredicate(format: "userRef == %@", userRef)
    let predicateTwo = NSPredicate(format: "read = %@", "")
    let compoundPred = NSCompoundPredicate(type: .AndPredicateType, subpredicates: [predicate, predicateTwo])

    let subscription = CKSubscription(recordType: "Notifications", predicate: compoundPred, subscriptionID: subscriptionID,
        options: options)
    subscription.notificationInfo = CKNotificationInfo()
    subscription.notificationInfo.desiredKeys = ["userPost"]
    subscription.notificationInfo.alertBody = "Someone replied to your Pod post"

    publicDB.saveSubscription(subscription, completionHandler: {

        subscription, error in

        if (error != nil) {

            println("error subscribing: \(error)")

        } else {

            println("subscribed!")

        }

    })
}

1 个答案:

答案 0 :(得分:1)

让我试着回答:

  1. SubscriptionId允许您稍后识别订阅,例如使用CKDatabase方法删除它deleteSubscriptionWithID
  2. 如何看待答案1.至于为什么,也许您不想再收到有关此订阅的通知。这取决于您尝试使用自己的应用实现的目标。
  3. 是的,如果您只注册一个订阅,它应该适用于您应用的所有用户
  4. 关于您的问题,请注意用户记录ID是特殊的,因此由于周围的隐私问题,您可能会遇到与此相关的问题。我建议尝试一个不涉及用户的简单案例,看看订阅是否适合你。然后再考虑一下如何使用用户记录ID