0

我正在尝试使用 Google CardDAV API 的同步收集操作。文档中没有很好地解释。但我认为以下是他们在本文档中解释的内容。

首先,使用 propfind 操作从通讯录中发现同步令牌。以下是我的请求,我成功获得了同步令牌。

要求

Depth: 0
Content-Type: application/xml; charset=utf-8
<d:propfind xmlns:d="DAV:" xmlns:cs="http://calendarserver.org/ns/">
  <d:prop>
     <d:displayname />
     <cs:getctag />
     <d:sync-token />
  </d:prop>
</d:propfind>

回复

ncoding="UTF-8"?>
<d:multistatus xmlns:cal="urn:ietf:params:xml:ns:caldav" xmlns:card="urn:ietf:params:xml:ns:carddav" xmlns:cs="http://calendarserver.org/ns/" xmlns:d="DAV:" xmlns:ical="http://apple.com/ns/ical/">
    <d:response>
        <d:href>/carddav/v1/principals/some@email.com/lists/default/</d:href>
        <d:propstat>
            <d:status>HTTP/1.1 200 OK</d:status>
            <d:prop>
                <d:displayname>Address Book</d:displayname>
                <d:sync-token>https://www.googleapis.com/carddav/v1/synctoken/SOMEIDINHERE</d:sync-token>
                <cs:getctag>"23fq3fqefas.8"</cs:getctag>
            </d:prop>
        </d:propstat>
    </d:response>
</d:multistatus>

然后我们必须使用同步令牌进行同步收集操作以获取先前状态的更改,但这不会返回任何项目,无论我在https://contacts.google的联系人列表中所做的任何更改.com/

要求

<?xml version="1.0" encoding="utf-8" ?>
<d:sync-collection xmlns:d="DAV:" xmlns:C="urn:ietf:params:xml:ns:carddav">
  <d:sync-token>https://www.googleapis.com/carddav/v1/synctoken/SOMEIDINHERE</d:sync-token>
  <d:sync-level>1</d:sync-level>
  <d:prop>
     <d:displayname />
     <d:current-user-principal />
     <d:principal-URL/>
  </d:prop>
</d:sync-collection>

回复

<?xml version="1.0" encoding="UTF-8"?>
<d:multistatus xmlns:cal="urn:ietf:params:xml:ns:caldav" xmlns:card="urn:ietf:params:xml:ns:carddav" xmlns:cs="http://calendarserver.org/ns/" xmlns:d="DAV:" xmlns:ical="http://apple.com/ns/ical/">
    <d:sync-token>https://www.googleapis.com/carddav/v1/synctoken/SOMEIDINHERE </d:sync-token>

</d:multistatus>

请让我知道我做错了什么。

4

1 回答 1

0

通常,正常的操作模式是使用空同步令牌(参见https://www.rfc-editor.org/rfc/rfc6578#section-3.8 )发出第一个同步集合并使用同步令牌在以下请求的响应中返回。

于 2020-02-27T16:43:19.080 回答