Вы можете просматривать свои контакты и управлять ими с помощью протокола 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 контакта.
 
-  Клиентские приложения удаляют контакт, отправляя запрос