3

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

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

1)。订阅 ID 的用途是什么?便利的init不包含它,那为什么在指定的init中需要它呢?如果你使用它,它对应用程序的所有用户都是一样的吗?

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

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

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

例如,我无法让通知与我的特定用例一​​起工作。这在我的设置中不是问题,因为我可以让 True 谓词起作用并且通知来了。所以我一定不明白订阅如何运作的基本原理。

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

问题是我无法让通知工作。我在仪表板中手动添加了一条记录,并将其他用户的记录 ID 作为 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!")

        }

    })
}
4

1 回答 1

1

让我试着回答:

  1. SubscriptionId 允许您稍后识别订阅,例如使用 CKDatabase 方法 deleteSubscriptionWithID 删除它
  2. 有关如何查看答案 1。至于为什么,也许您不想再收到有关此订阅的通知。这取决于您要通过应用程序实现的目标。
  3. 是的
  4. 是的,如果您只注册一个订阅,它应该适用于您应用的所有用户

关于您的问题,请注意,用户记录 ID 是特殊的,因此您可能会因为它们周围的隐私问题而遇到与此特别相关的问题。我建议尝试一个不涉及用户的简单案例,看看订阅是否适合您。然后再考虑如何使用用户记录 ID

于 2015-05-08T05:06:09.907 回答