云套件:如何仅从您的联系人组获取公共数据库订阅通知
Posted
技术标签:
【中文标题】云套件:如何仅从您的联系人组获取公共数据库订阅通知【英文标题】:Cloud kit: how to get public database subscription notification from your group of contacts only 【发布时间】:2021-05-24 19:28:44 【问题描述】:我在公共数据库中有位置详细信息的 CKRecord。我想为存储在公共数据库中的具有位置详细信息的 CKrecord 创建订阅。我想设置订阅,所以我只收到来自我的联系人组中的通知。 Location CKrecord 上的订阅通知会通知我所有用户需要更多时间来整理,我想避免这种情况。
如何设置订阅?
【问题讨论】:
这在一定程度上取决于您的数据结构。您的Location
记录类型是否有一个 CKReference
字段指向您的 Contact
记录类型?
当我指的是联系人时,我指的是我的 iphone 联系人。我所有的 iphone 联系人可能不是应用程序用户。如果我创建一个 CKRecordContact 来代表我的联系人并将其指向位置,我仍然必须拉下所有 iphone 用户的所有 CKRecordContact,然后搜索我的联系人,然后拉位置。如何将搜索最小化到我的 iphone 联系人?我希望我已经解释清楚了
在我看来你走错了方向。您应该首先从手机中提取联系人,然后执行 CKQuery
和 NSPredicate
,将搜索限制为手机上的联系人。然后,您将只获取您需要的CKRecord
s。
我可以拉联系人。现在我如何限制我只搜索来自云端的联系人。我的 NSPredicate 和 CKQuery 应该是什么样的?可以分享一下代码吗?
【参考方案1】:
假设您的 Location
记录类型上有某种 userEmail
字段,您可以像这样查询这些记录:
let predicate = NSPredicate(format: "userEmail = %@", argumentArray: ["name@example.com"])
let query = CKQuery(recordType: "Location", predicate: predicate)
let operation = CKQueryOperation(query: query)
var records = [CKRecord]()
operation.recordFetchedBlock = record in
records.append(record)
operation.queryCompletionBlock = cursor, error in
print("Done.")
print(records)
CKContainer(identifier: "iCloud.yourContainer").publicCloudDatabase.add(operation)
【讨论】:
好吧,我可以传递我的联系人的电子邮件数组来获取所有位置记录。但是如何才能将我的联系人最小化为仅安装了该应用程序的人?有没有办法找出谁安装了该应用程序,然后只发送那些联系人的电子邮件以获取记录。 不,您必须查询所有联系人的所有电子邮件。当记录从CKQuery
返回时,您将知道谁安装了该应用程序。事实的来源是 CloudKit。您的联系人不会存储有关谁安装了您的应用的任何信息。
好的,所以如果用户的记录回来了,那么用户已经安装了应用程序,否则视为否?
是的,您在公共数据库中的Users
表对于安装了您的应用程序的每次使用都有一个唯一的recordName
。这样您就知道是谁安装了它并开始与 CloudKit 交互。
好的。我仍在开发中,没有用户安装该应用程序。那么我应该如何设置它以进行跨用户测试呢?如果我在具有不同 Apple ID 的不同手机上运行该应用程序,它会在公共数据库的用户表中创建记录吗?以上是关于云套件:如何仅从您的联系人组获取公共数据库订阅通知的主要内容,如果未能解决你的问题,请参考以下文章