0

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

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

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

4

1 回答 1

1

构建 CardDAV 客户端文档很好地解释了这一切。

但要解决您的问题:

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

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

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

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

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

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

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

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

以及如何检测数字是否更改或添加?

您存储您知道和差异的旧副本。

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

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

于 2018-06-02T11:18:53.913 回答