我已经阅读并尝试使用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!")
}
})
}
答案 0 :(得分:1)
让我试着回答:
关于您的问题,请注意用户记录ID是特殊的,因此由于周围的隐私问题,您可能会遇到与此相关的问题。我建议尝试一个不涉及用户的简单案例,看看订阅是否适合你。然后再考虑一下如何使用用户记录ID