Google CardDAV 更改 vCard UID

Posted

技术标签:

【中文标题】Google CardDAV 更改 vCard UID【英文标题】:Google CardDAV changes vCard UID 【发布时间】:2012-12-23 08:18:08 【问题描述】:

我正在将 Google CardDAV 与我的 webApplication 集成。当我对新的 vCard 进行 PUT 操作时,有时会遇到一个奇怪的问题。 如果 vCard 包含 UID 并且 UID 是 GUID,Google 会将 vCard UID 更改为 16 字符 UID。

例如:这是我原来的电子名片

开始:VCARD 版本:3.0 N:捏;大卫;;; FN:大卫·潘奇 修订:2013-01-09T09:26:34Z UID:6c34bedcf256408780d8ffe269ec2b3b 结束:VCARD

所以我将它放入 Google CardDAV 中,放入当前网址:

https://www.google.com/m8/carddav/principals/__uids__/myusername@gmail.com/lists/default/6c34bedcf256408780d8ffe269ec2b3b

结果没问题,联系人确实是在 Google 通讯录上创建的。 但: 如果“现在”我从同一个 URL 检索当前 vCard,我有以下响应。

开始:VCARD 版本:3.0 N:捏;大卫;;; FN:大卫·潘奇 修订:2013-01-09T09:44:25Z UID:716212e795884e43 结束:VCARD

你可以看到UID已经改变并从原来的传递过来

UID:6c34bedcf256408780d8ffe269ec2b3b

UID:716212e795884e43

奇怪的是,如果我通过以下请求检索卡

https://www.google.com/m8/carddav/principals/__uids__/myusername@gmail.com/lists/default/716212e795884e43

我有完全相同的响应,就像 vCard 引用了两个不同的路径 URL。

但是,当我从 CardDAV 检索联系人列表时,这将返回第二个 URL。 如果我没有创建带有 GUID 而是 16 字符 UID 的 vCard,Google 似乎接受了这一点,但有时它会改变,所以我无法确定卡片的唯一性。 一种解决方法似乎是在每次 PUT 后重新下载 vCard,但这会导致我想避免的重要负载。

我对 iCloud CardDAV 使用相同的程序,但没有发生这种情况。 谁能帮帮我?

【问题讨论】:

【参考方案1】:

当您将 vCard 放入 Google CardDAV 时,它将重新创建一个新的 vCard V3.0 并处理发布的原始数据,包括数据丢失和您描述的 UID/URI 路径更改。

除了 UID 更改 Google CardDAV 还有其他问题

数据丢失 拒绝有效的 vCard

缓慢(每次写入 10-20 秒) 操作)

以下 Google CardDAV 压力测试文章中的更多详细信息: https://evertpot.com/google-carddav-issues/

在 2018 年仍然看到这些失败后,我的建议是:最好使用 Google 的联系人 API,而不是使用 CardDAV。

【讨论】:

鼓励链接到外部资源,但请在链接周围添加上下文,以便您的其他用户了解它是什么以及为什么存在。始终引用重要链接中最相关的部分,以防目标站点无法访问或永久离线。

以上是关于Google CardDAV 更改 vCard UID的主要内容,如果未能解决你的问题,请参考以下文章

导入 iCloud 联系人 .NET (CardDAV)

CardDAV 从 iCloud 获取所有联系人

使用 CardDAV 从 Java 应用程序共享通讯录

Vpim::Vcard - 解析 vcard 2.1

iphone手机里添加邮件账户账户的LDAP和CardDAV账户如何使用

vCard格式参数详细说明