Вы можете просматривать свои контакты и управлять ими с помощью протокола Google CardDAV.
Контакты хранятся в учетной записи Google пользователя; большинство сервисов Google имеют доступ к списку контактов. Ваше клиентское приложение может использовать API CardDAV для создания новых контактов, редактирования или удаления существующих контактов, а также запроса контактов, соответствующих определенным критериям.
Технические характеристики
Полная спецификация не реализована, но многие клиенты, такие как Apple iOS™ Contacts и macOS, должны корректно взаимодействовать.
Для каждой соответствующей спецификации поддержка CardDAV от Google выглядит следующим образом:
- rfc2518: HTTP-расширения для распределенной разработки (WebDAV)
- Поддерживает методы HTTP
GET,PUT,DELETE,OPTIONSиPROPFIND. - Не поддерживает методы HTTP
LOCK,UNLOCK,COPY,MOVEиMKCOL. - Не поддерживает произвольные (определяемые пользователем) свойства WebDAV.
- Не поддерживает контроль доступа WebDAV (rfc3744).
- Поддерживает методы HTTP
- rfc5995: использование POST для добавления членов в коллекции WebDAV
- Поддерживает создание новых контактов без указания идентификатора.
- rfc6352: CardDAV: расширения vCard для распределенной веб-авторизации и управления версиями (WebDAV)
- Поддерживает метод HTTP
REPORT, но реализованы не все определенные отчеты. - Поддерживает предоставление основной коллекции и коллекции контактов.
- Поддерживает метод HTTP
- rfc6578: Синхронизация коллекции для WebDAV
- Клиентские приложения должны перейти в этот режим работы после первоначальной синхронизации.
- rfc6749: Структура авторизации OAuth 2.0 и rfc6750: Структура авторизации OAuth 2.0: Использование токена носителя
- Поддерживает аутентификацию клиентских программ CardDAV с использованием HTTP-аутентификации OAuth 2.0. Google не поддерживает другие методы аутентификации. В целях безопасности контактных данных мы требуем, чтобы соединения CardDAV использовали HTTPS .
- rfc6764: Поиск служб для расширений календаря для WebDAV (CalDAV) и расширений vCard для WebDAV (CardDAV)
- Начальная загрузка URL-адресов CardDAV должна выполняться в соответствии с разделом 6 rfc6764.
- Поддерживает Caldav-ctag-02: тег объекта коллекции календаря (CTag) в CalDAV , который используется в спецификациях CardDAV и CalDAV.
ctagконтактов похож на ресурсETag; оно меняется, когда что-то меняется в адресной книге контактов. Это позволяет клиентской программе быстро определить, что ей не нужно синхронизировать измененные контакты. - Google использует VCard 3.0 в качестве формата кодирования контактов. См.: rfc6350:VCard 3.0 .
Google CardDAV требует OAuth 2.0.
Интерфейс Google CardDAV требует OAuth 2.0. Обратитесь к связанной документации ниже для получения информации об использовании OAuth 2.0 для доступа к API Google:
- Использование OAuth 2.0 для доступа к API Google
- Использование OAuth 2.0 для установленных приложений
Подключение к серверу Google CardDAV
Протокол CardDAV позволяет обнаруживать URI адресной книги и контактных ресурсов. Вы не должны жестко запрограммировать какие-либо URI, поскольку они могут измениться в любое время.
Клиентские приложения должны использовать HTTPS, а для учетной записи Google пользователя должна быть предусмотрена аутентификация OAuth 2.0 . Сервер CardDAV не будет аутентифицировать запрос, если он не поступает по HTTPS с аутентификацией OAuth 2.0 учетной записи Google и ваше приложение не зарегистрировано в DevConsole. Любая попытка подключения по HTTP с базовой аутентификацией или с использованием адреса электронной почты/пароля, не совпадающего с учетной записью Google, приводит к появлению кода ответа HTTP 401 Unauthorized .
Чтобы использовать CardDAV, ваша клиентская программа должна сначала подключиться к каноническому пути обнаружения, выполнив HTTP PROPFIND для:
https://www.googleapis.com/.well-known/carddav
После перенаправления ( HTTP 301 ) на ресурс адресной книги ваша клиентская программа может выполнить для него PROPFIND , чтобы обнаружить свойства DAV:current-user-principal , DAV:principal-URL и addressbook-home-set . Затем ваша клиентская программа может обнаружить основную адресную книгу, выполнив PROPFIND для addressbook-home-set и выполнив поиск ресурсов addressbook и collection . Полное описание этого процесса выходит за рамки данного документа. Дополнительную информацию см. в rfc6352 .
Путь перенаправления, возвращаемый в ответе HTTP 301 через PROPFIND по известному URI, не должен постоянно кэшироваться (согласно rfc6764 ). Устройства должны периодически повторять попытку обнаружения известного URI, чтобы проверить, актуален ли кэшированный путь, и выполнять повторную синхронизацию, если путь когда-либо изменится. Google рекомендует каждые 2–4 недели.
Ресурсы
CardDAV использует концепции REST. Клиентские приложения работают с ресурсами, которые обозначены их URI. Здесь указана текущая структура URI, чтобы помочь разработчикам понять концепции, изложенные в следующем разделе. Структура может меняться и не должна быть жестко запрограммирована. Скорее, ресурсы должны быть обнаружены в соответствии с RFC.
- Главный
-
userEmail
-
- Домашний набор
- https://www.googleapis.com/carddav/v1/principals/userEmail /
userEmail
- https://www.googleapis.com/carddav/v1/principals/userEmail /
- Адресная книга
- https://www.googleapis.com/carddav/v1/principals/userEmail
userEmaillists/default
- https://www.googleapis.com/carddav/v1/principals/userEmail
- Контакт
- https://www.googleapis.com/carddav/v1/principals/userEmail
userEmaillists/default/contactId
- https://www.googleapis.com/carddav/v1/principals/userEmail
Синхронизация контактов
Ниже приводится общее описание поддерживаемых операций. Подробности разработчикам следует искать в соответствующем RFC. Запросы и ответы в основном кодируются в XML. Вот основные операции, используемые клиентскими приложениями для синхронизации:
- Использование CTag
- Клиентские программы используют запрос
getctagPROPFINDк ресурсу адресной книги, чтобы определить, изменился ли какой-либо контакт на сервере и, следовательно, необходима ли синхронизация. Значение этого свойства гарантированно изменится при изменении любого контакта. Клиентские приложения должны хранить это значение и использовать его только при начальной синхронизации и в качестве резервного варианта, когдаsync-tokenстановится недействительным. Периодический опрос свойстваgetctagприведет к регулированию.
- Клиентские программы используют запрос
- Использование токена синхронизации
- Клиентские программы используют запрос
sync-tokenPROPFINDв адресной книге для полученияsync-tokenпредставляющего ее текущее состояние. Клиентские приложения должны хранить это значение и периодически выдавать запросыREPORTsync-collectionчтобы определить изменения с момента последнего выдачиsync-token. Выданные токены действительны в течение 29 дней, а ответREPORTбудет содержать новыйsync-token.
- Клиентские программы используют запрос
- Использование ETag
- Клиентские приложения выдают запрос
getetagPROPFINDк ресурсу адресной книги (с заголовкомDEPTH, равнымDEPTH_1). Сохраняя значениеETagкаждого контакта, клиентская программа может запрашивать значение контактов, у которых был измененETag.
- Клиентские приложения выдают запрос
- Получение контактов
- Клиентские приложения извлекают контакты, отправляя запрос
REPORTaddressbook-multiget. Учитывая список URI контактов, отчет возвращает все запрошенные контакты в виде значений VCard 3.0. Каждая запись включаетETagдля контакта.
- Клиентские приложения извлекают контакты, отправляя запрос
- Вставка контакта
- Клиентские приложения отправляют запрос
POSTс новым контактом в формате VCard 3.0. Ответ будет содержать идентификатор нового контакта.
- Клиентские приложения отправляют запрос
- Обновление контакта
- Клиентские приложения выдают запрос
PUTс обновленным контактом в формате VCard 3.0. Контакт обновляется, если контакт уже существует в адресной книге. - Клиентские приложения должны включать заголовок
If-Matchс известным на данный моментETagконтакта. Затем сервер отклонит запросPUT(сHTTP 412), если текущийETagна сервере отличается отETag, отправленного клиентской программой. Это обеспечивает оптимистичную сериализацию обновлений.
- Клиентские приложения выдают запрос
- Удаление контакта
- Клиентские приложения удаляют контакт, отправляя запрос
DELETEна URI контакта.
- Клиентские приложения удаляют контакт, отправляя запрос