长期潜伏,第一次海报。如果我犯了n00b错误,请原谅我。

我遇到的问题是以编程方式区分CardDAV源

我正在尝试在iPhone上找到特定的CardDAV来源,该来源对应于我们的cardDAV服务器上的帐户。我可以看到的唯一有用的属性是ABSource.kABSourceNameProperty,但这对于每个CardDAV源(如“联系人”或“地址簿”)来说都是无意义的字符串,无论用户在手机上使用什么设置。这意味着该应用无法确定特定的联系人来源是否为GMail cardDAV,iCloud cardDAV,我们的CardDAV等。

例如,以下是具有iCloud,Exchange,Gmail和Facebook联系人源的设备的源类型和名称:

ABManager:7个来源中的1个:cardDAV-
ABManager:7个来源中的2个:exchangeGAL-(空)
ABManager:7个来源中的3个:cardDAV-卡
ABManager:7个来源中的4个:交流-联系人
ABManager:7个来源中的5个:交流-Lync联系人
ABManager:7个来源中的6个:交流-建议的联系人
ABManager:7个来源中的7个:cardDAV-地址簿

无法确定3种CardDAV来源中的哪一种是Gmail还是iCloud等。

如何在iOS上比较不同的CardDAV联系人来源,并确定哪个属于我们的CardDAV服务器?

背景,以防万一:
我正在开发一个iOS应用,该应用可以帮助用户将联系人从其现有联系人源复制到我们服务器上的cardDAV联系人源。换句话说:用户设置了一个新的CardDAV帐户(源通过.mobileprovision配置文件安装在iPhone上),现在他们运行此应用程序将联系人复制到新的CardDav帐户。

谢谢你的帮助!

最佳答案

如果联系人来自CardDAV服务器提供的通讯录,则您现在可能是此联系人来自的通讯录。一旦知道了地址簿,您就可以确定源/服务器。

但是我认为您的问题更多是同步问题。如果系统中的每个vCard都有唯一的标识符(UID)和修订号(REV),并且知道每个属性基数,则可以构建某种自动同步机制。

UID属性:

  • vCard 4.0:http://tools.ietf.org/html/rfc6350#section-6.7.6
  • vCard 3.0:http://tools.ietf.org/html/rfc2426#section-3.6.7
  • vCard 2.1:http://www.imc.org/pdi/vcard-21.txt(唯一标识符段)

  • REV属性(ISO 8601格式的日期/时间):
  • vCard 4.0:http://tools.ietf.org/html/rfc6350#section-6.7.4
  • vCard 3.0:http://tools.ietf.org/html/rfc2426#section-3.6.4
  • vCard 2.1:http://www.imc.org/pdi/vcard-21.txt(最后修订版)

  • 您可能还需要手动解决冲突的机制。

    vCard 4.0中使用PID属性引入了更复杂的synchronization mechanism。但是,vCard 4.0尚未广泛传播。

    关于ios - 如何区分CardDAV联系人来源?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20381056/

    10-10 20:59