【问题标题】:How do I detect changes in vCards?如何检测 vCard 中的更改?
【发布时间】:2018-06-02 19:18:53
【问题描述】:

我正在开发一个库来编辑 CardDAV 服务器上的联系人,我想知道同步联系人的正确方法是什么。

因此,当我发现特定联系人的 etag 已更改时:如何同步两者?

我是否只是合并更改的数据,例如电话号码?还是必须一方(服务器或客户端)获胜?以及如何检测号码是否更改或添加?

【问题讨论】:

    标签: vcf-vcard carddav


    【解决方案1】:

    Building a CardDAV client 文档很好地解释了这一切。

    但要解决您的问题:

    因此,当我发现特定联系人的 etag 发生更改时:如何同步两者?

    您从服务器加载 vCard。然后,这取决于您的客户的逻辑。你想自动合并吗?是否要提示用户是否要合并?等等。

    通常您希望自动合并。所以这样做。获得合并的 vCard 后,再次将其放入服务器,但请确保使用 If-Match 标头以确保它不会在服务器端再次更改。

    我是否只是合并更改的数据,例如电话号码?

    您认为有用的完全取决于您的应用程序。但是仅仅组合字段可能不是你想要的。例如,您将无法检测到 删除。 所以在大多数情况下,这将是一个三向合并:

    • 服务器的旧版本(本地存储)
    • 新版本的服务器(您刚刚获取的)
    • 本地应用程序的当前版本

    或者必须一方(服务器或客户端)获胜?

    有些客户会这样做,但这不是必需的。但是,如果您在更改后进行修改,则需要非常小心同步周期!

    以及如何检测号码是否更改或添加?

    您存储您知道和比较的旧副本。

    一般来说,将(最后知道的)不透明的服务器副本存储在本地是一个好主意,只需挑选出您的客户关心的字段即可。然后在再次上传项目时,您只需再次修补这些项目。 (并保留服务器发送给您的其余内容)。

    总结:正确的 vCard diff 和本地缓存并非易事。许多客户端在这方面失败了,并且丢失或欺骗了用户数据。 因此,除非您打算为此投入必要的工作和测试,否则更简单的方法是检测更改并询问用户他想做什么(让服务器获胜、强制用户复制、合并)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-12-23
      • 2014-11-24
      • 2016-10-07
      • 1970-01-01
      • 1970-01-01
      • 2019-06-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多