跨多个设备唯一标识 CNContact

问题描述 投票:0回答:1

我正在开发一个应用程序,用户可以在其中创建一些与 CNContact 相关的记录。我使用 CoreData 和 CloudKit 来保存这些数据。保存数据时,我有 1 个属性将 CNContact.identifier 存储在我的 CoreData 实体中。然后我使用该标识符找到联系方式详细信息。此方法在单个设备上运行得非常好。

由于此应用程序支持 iCloud 同步,因此用户可以从其他设备访问相同的数据。即使其他设备具有所有相同的联系人,应用程序也无法从 CoreData 属性中保存的 CNContact.identifier 中找到相关的 CNContact。事实证明,不同设备上的单个联系人的 CNContact.identifier 并不相同。

所以我想知道的是...如何在多个设备中检测到同一个联系人?为了成功实现这一目标,我应该在 CoreData 中存储哪些数据?

cloudkit cncontact cncontactstore cncontactformatter
1个回答
0
投票

我有一个应用程序,也具有相同的功能,用户可以选择联系人,并且应用程序数据通过 CloudKit 在他们的设备之间同步。

在我的应用程序中,我存储联系人的标识符和我所说的“复合名称”。我使用以下列表中的第一个可用值计算“复合名称”:

  • 名字和姓氏
  • 姓氏
  • 名字
  • 公司名称
  • 电话号码
  • 电子邮件地址

当在另一台设备上查找相应的联系人时,我当然会首先查找具有相同标识符的联系人。如果找不到,我会使用“复合名称”搜索联系人。

这首先使用

CNContact predicateForContacts(matchingName:)
(传入“复合名称”)和
CNContactStore unifiedContacts(matching:keysToFetch:)
。如果没有给出任何结果,那么我会枚举所有联系人,并找到姓名、公司名称、电话号码或电子邮件地址与“复合名称”匹配的第一个联系人。

这当然不能保证始终选择正确的联系人。根据用户的联系人,这可能会导致选择错误的联系人。但总的来说,它似乎运作得足够好。根据您的应用程序的需要进行调整。

© www.soinside.com 2019 - 2024. All rights reserved.