Kontakty możesz wyświetlać i nimi zarządzać za pomocą protokołu CardDAV Google.
Kontakty są przechowywane na koncie Google użytkownika. Większość usług Google ma dostęp do listy kontaktów. Za pomocą interfejsu CardDAV API aplikacja klienta może tworzyć nowe kontakty, edytować i usuwać istniejące kontakty oraz wysyłać zapytania o kontakty spełniające określone kryteria.
Specyfikacja
Nie wdrożono pełnej specyfikacji, ale wiele klientów, takich jak Kontakty Apple iOSTM i macOS powinny współpracować poprawnie.
W przypadku każdej specyfikacji Google obsługuje CardDAV w następujący sposób:
- rfc2518: HTTP Extensions for Distributed Authoring (WebDAV)
- Obsługuje metody HTTP
GET
,PUT
,DELETE
,OPTIONS
iPROPFIND
. - Nie obsługuje metod HTTP
LOCK
,UNLOCK
,COPY
,MOVE
aniMKCOL
. - Dowolne (zdefiniowane przez użytkownika) właściwości WebDAV nie są obsługiwane.
- Nie obsługuje kontroli dostępu WebDAV (rfc3744).
- Obsługuje metody HTTP
- rfc5995: Używanie metody POST do dodawania elementów do kolekcji WebDAV
- Umożliwia tworzenie nowych kontaktów bez określania identyfikatora.
- rfc6352: CardDAV: rozszerzenia vCard do Web Distributed Authoring and
Obsługa wersji (WebDAV)
- Obsługuje metodę HTTP
REPORT
, ale nie wszystkie zdefiniowane raporty są wdrażane. - Umożliwia udostępnianie zbioru podmiotów zabezpieczeń i kolekcji kontaktów.
- Obsługuje metodę HTTP
- rfc6578: Collection Synchronization for WebDAV
- Aplikacje klienckie muszą przełączyć się na ten tryb działania po synchronizacji początkowej.
- rfc6749: platforma autoryzacji OAuth 2.0 oraz
rfc6750: platforma autoryzacji OAuth 2.0 – wykorzystanie tokena okaziciela
- Obsługuje uwierzytelnianie programów klienta CardDAV za pomocą protokołu HTTP OAuth 2.0 Uwierzytelnianie. Google nie obsługuje żadnych innych metod uwierzytelniania. Ze względu na bezpieczeństwo danych kontaktów połączenia CardDAV wymagają użycia HTTPS.
- rfc6764: Lokalizacja usług rozszerzeń kalendarza do WebDAV (CalDAV) i rozszerzeń vCard do WebDAV (CardDAV)
- Wczytywanie adresów URL CardDAV musi odbywać się zgodnie z sekcją 6 rfc6764.
- Obsługiwane
caldav-ctag-02: tag CTag (CTag) kalendarza w CalDAV,
który jest wspólny dla specyfikacji CardDAV i CalDAV. Kontakty
ctag
jest jak zasóbETag
; zmienia się, gdy cokolwiek w kontakcie książka adresowa została zmieniona. Dzięki temu program klienta może szybko ustalić, że nie musi synchronizować żadnych zmienionych kontaktów. - Google używa formatu VCard 3.0 do kodowania kontaktów. Zobacz: rfc6350: VCard 3.0.
Protokół CardDAV Google wymaga protokołu OAuth 2.0
Interfejs Google CardDAV wymaga protokołu OAuth 2.0. Informacje o używaniu protokołu OAuth 2.0 do uzyskiwania dostępu do interfejsów API Google znajdziesz w poniżej wymienionej dokumentacji:
- Używanie protokołu OAuth 2.0 na potrzeby dostępu do interfejsów API Google
- Używanie protokołu OAuth 2.0 w zainstalowanych aplikacjach
Łączenie z serwerem CardDAV Google
Protokół CardDAV umożliwia wykrywanie książki adresowej i zasobów kontaktów (URI). Nie należy kodować na stałe żadnych identyfikatorów URI, ponieważ mogą się one w każdej chwili zmienić.
Aplikacje klienckie muszą używać protokołu HTTPS, a uwierzytelnianie OAuth 2.0
musi być
podany na koncie Google użytkownika. Serwer CardDAV nie uwierzytelnia żądania, chyba że zostało ono przesłane przez HTTPS z użyciem uwierzytelniania OAuth 2.0 na koncie Google, a Twoja aplikacja jest zarejestrowana w DevConsole. Każda próba nawiązania połączenia przez HTTP z użyciem uwierzytelniania podstawowego lub z adresem e-mail i hasłem, które nie pasują do konta Google, powoduje otrzymanie kodu odpowiedzi HTTP 401 Unauthorized
.
Aby korzystać z CardDAV, program klienta musi najpierw połączyć się z kanoniczną ścieżką wykrywania, wykonując operację HTTP PROPFIND
na:
https://www.googleapis.com/.well-known/carddav
Po przekierowaniu (HTTP 301
) do zasobu książki adresowej program klienta może wykonać na nim operację PROPFIND
, aby poznać właściwości DAV:current-user-principal
, DAV:principal-URL
i addressbook-home-set
. Program klienta może następnie znaleźć główną książkę adresową, wykonując operację PROPFIND
w addressbook-home-set
i szukając zasobów addressbook
i collection
. Pełny opis tego procesu wykracza poza zakres tego dokumentu. Zobacz
rfc6352, aby dowiedzieć się więcej.
Ścieżka przekierowania zwrócona w odpowiedzi HTTP 301
przez PROPFIND
dobrze znany identyfikator URI nie może być trwale przechowywany w pamięci podręcznej (zgodnie z
rfc6764). Urządzenia powinny ponawiać próbę połączenia ze znanymi danymi
okresowe wykrywanie identyfikatorów URI w celu sprawdzania, czy ścieżka w pamięci podręcznej jest nadal aktualna;
ponownie zsynchronizować, jeśli ścieżka kiedykolwiek się zmieni. Google zaleca, aby robić to co 2–4 tygodnie.
Zasoby
CardDAV korzysta z koncepcji REST. Aplikacje klienckie działają na zasobach, które są wyznaczone przez ich identyfikatory URI. Aby pomóc deweloperom zrozumieć pojęcia opisane w następnej sekcji, podajemy tutaj obecną strukturę URI. Obiekt może nie może być zakodowana na stałe. Zasoby powinny być wykrywane zgodnie z RFC.
- Podmiot zabezpieczeń
- https://www.googleapis.com/carddav/v1/principals/
userEmail
- https://www.googleapis.com/carddav/v1/principals/
- Zestaw domowy
- https://www.googleapis.com/carddav/v1/principals/
userEmail
/lists
- https://www.googleapis.com/carddav/v1/principals/
- Książka adresowa
- https://www.googleapis.com/carddav/v1/principals/
userEmail
/lists/default
- https://www.googleapis.com/carddav/v1/principals/
- Kontakt
- https://www.googleapis.com/carddav/v1/principals/
userEmail
/lists/default/contactId
- https://www.googleapis.com/carddav/v1/principals/
Synchronizacja kontaktów
Poniżej znajdziesz ogólny opis obsługiwanych operacji. Deweloperzy powinni szukać szczegółów w odpowiednich dokumentach RFC. Prośby i odpowiedzi są głównie zakodowany w formacie XML. Oto główne operacje używane przez aplikacje klienckie do synchronizacji:
- Korzystanie z CTag
- Programy klientów używają żądania
getctag
PROPFIND
z książki adresowej w celu określenia, czy którykolwiek kontakt na serwerze uległ zmianie oraz co pozwala określić, czy synchronizacja jest potrzebna. Wartość tej właściwości na pewno ulec zmianie w przypadku zmiany danych kontaktowych. Aplikacje klienckie powinny przechowywać tę wartość i używać jej tylko podczas początkowej synchronizacji oraz jako wartości zastępczej, gdysync-token
zostanie unieważniony. Okresowe odpytywanie Właściwośćgetctag
spowoduje ograniczenie.
- Programy klientów używają żądania
- Korzystanie z tokena synchronizacji
- Programy klienckie używają żądania
sync-token
PROPFIND
z adresem Książka, by uzyskać obiektsync-token
reprezentujący jego bieżący stan. Aplikacje klienta muszą przechowywać tę wartość i wysyłać okresowo żądaniasync-collection
REPORT
, aby określić zmiany od ostatniego wysłaniasync-token
. Wydane tokeny są ważne przez 29 dni, a odpowiedźREPORT
będzie zawierać nowy tokensync-token
.
- Programy klienckie używają żądania
- Używanie ETagów
- Aplikacje klienckie wysyłają
getetag
PROPFIND
do zasobu książki adresowej (z nagłówkiemDEPTH
równymDEPTH_1
). Dzięki temu, że program klienta zachowuje wartośćETag
każdego kontaktu, może on poprosić o wartość kontaktów, których wartośćETag
uległa zmianie.
- Aplikacje klienckie wysyłają
- Pobieranie kontaktów
- Aplikacje klienckie pobierają kontakty przez wysłanie
addressbook-multiget
prośba o:REPORT
. Na podstawie listy identyfikatorów URI kontaktów raport zwróci wszystkie żądane kontakty jako wartości VCard 3.0. Każda pozycja zawieraETag
kontaktu.
- Aplikacje klienckie pobierają kontakty przez wysłanie
- Wstawianie kontaktu
- Aplikacje klienckie wysyłają żądanie
POST
z nowym kontaktem w formacie vCard 3.0. Odpowiedź będzie zawierać identyfikator nowego kontaktu.
- Aplikacje klienckie wysyłają żądanie
- Aktualizowanie kontaktu
- Aplikacje klienckie wysyłają żądanie
PUT
z aktualnymi danymi kontaktowymi w formacie VCard 3.0. Jeśli kontakt już istnieje, zostanie zaktualizowany w książce adresowej. - W zapytaniach klienta powinien znajdować się nagłówek
If-Match
z aktualnymETag
kontaktu. Serwer odrzuci wtedyPUT
. (zHTTP 412
), jeśli bieżącyETag
na serwerze jest różni się odETag
wysłanego przez program kliencki. Dzięki temu optymistycznej serializacji aktualizacji.
- Aplikacje klienckie wysyłają żądanie
- Usuwanie kontaktu
- Aplikacje klienckie usuwają kontakt, wysyłając
DELETE
do URI kontaktu.
- Aplikacje klienckie usuwają kontakt, wysyłając