几周以来,我一直在阅读并尝试使用 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!")
}
})
}