长期潜伏者,首次张贴者。如果我犯了 n00b 个错误,请原谅我。
我遇到的问题是以编程方式区分 CardDAV 源。
我试图在 iphone 上找到一个特定的 CardDAV 源,它对应于我们的 cardDAV 服务器上的帐户。我能看到的唯一应该有帮助的属性是 ABSource.kABSourceNameProperty,但这对于每个 CardDAV 源(如“联系人”或“地址簿”)来说只是一些无意义的字符串,无论用户在手机上使用什么设置。这意味着该应用无法确定特定联系人来源是否为 GMail cardDAV、iCloud cardDAV、我们的 CardDAV 等。
例如,以下是具有 iCloud、Exchange、Gmail 和 Facebook 联系人来源的设备的来源类型和名称:
ABManager: 1 of 7 sources: cardDAV - ABManager: 2 of 7 sources: exchangeGAL - (null) ABManager: 3 of 7 sources: cardDAV - Card ABManager: 4 of 7 sources: exchange - Contacts ABManager: 5 of 7 sources: exchange - Lync Contacts ABManager: 6 of 7 sources: exchange - Suggested Contacts ABManager: 7 of 7 sources: cardDAV - Address Book
无法分辨 3 个 CardDAV 源中的哪一个是 Gmail 还是 iCloud 等。
我如何在 iOS 上比较不同的 CardDAV 联系人来源,并确定哪个属于我们的 CardDAV 服务器?
背景,以防有帮助: 我正在开发一个 iOS 应用程序,帮助用户将联系人从他们现有的联系人来源复制到我们服务器上的 cardDAV 联系人来源。换句话说:用户设置了一个新的 CardDAV 帐户(源通过 .mobileprovision 配置文件安装在 iPhone 上),现在他们运行此应用程序以将联系人复制到新的 CardDav 帐户。
感谢您的帮助!
最佳答案
如果联系人来自 CardDAV 服务器提供的地址簿,您现在可能知道此联系人来自的地址簿。一旦您知道地址簿,您就可以确定来源/服务器。
但是我认为您的问题更多是同步问题。如果您系统中的每个 vCard 都有一个唯一标识符 (UID) 和修订号 (REV),并且知道每个属性的基数,您就可以构建某种自动同步机制。
UID 属性:
- 电子名片 4.0:https://www.rfc-editor.org/rfc/rfc6350#section-6.7.6
- 电子名片 3.0:https://www.rfc-editor.org/rfc/rfc2426#section-3.6.7
- 电子名片 2.1:http://www.imc.org/pdi/vcard-21.txt (唯一标识符段落)
REV 属性(ISO 8601 格式的日期/时间):
- 电子名片 4.0:https://www.rfc-editor.org/rfc/rfc6350#section-6.7.4
- 电子名片 3.0:https://www.rfc-editor.org/rfc/rfc2426#section-3.6.4
- 电子名片 2.1:http://www.imc.org/pdi/vcard-21.txt (最后修订段)
您可能还需要一个手动冲突解决机制。
一个更复杂的synchronization mechanism在具有 PID 属性的 vCard 4.0 中引入。然而 vCard 4.0 还没有广泛普及。
关于ios - 如何区分 CardDAV 联系人来源?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20381056/