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,OPTIONSiPROPFIND. - Nie obsługuje metod HTTP
LOCK,UNLOCK,COPY,MOVEaniMKCOL. - 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
ctagjest 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
getctagPROPFINDz 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-tokenzostanie unieważniony. Okresowe odpytywanie Właściwośćgetctagspowoduje ograniczenie.
- Programy klientów używają żądania
- Korzystanie z tokena synchronizacji
- Programy klienckie używają żądania
sync-tokenPROPFINDz adresem Książka, by uzyskać obiektsync-tokenreprezentujący jego bieżący stan. Aplikacje klienta muszą przechowywać tę wartość i wysyłać okresowo żądaniasync-collectionREPORT, aby określić zmiany od ostatniego wysłaniasync-token. Wydane tokeny są ważne przez 29 dni, a odpowiedźREPORTbędzie zawierać nowy tokensync-token.
- Programy klienckie używają żądania
- Używanie ETagów
- Aplikacje klienckie wysyłają
getetagPROPFINDdo zasobu książki adresowej (z nagłówkiemDEPTHrównymDEPTH_1). Dzięki temu, że program klienta zachowuje wartośćETagkażdego kontaktu, może on poprosić o wartość kontaktów, których wartośćETaguległa zmianie.
- Aplikacje klienckie wysyłają
- Pobieranie kontaktów
- Aplikacje klienckie pobierają kontakty przez wysłanie
addressbook-multigetproś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 zawieraETagkontaktu.
- Aplikacje klienckie pobierają kontakty przez wysłanie
- Wstawianie kontaktu
- Aplikacje klienckie wysyłają żądanie
POSTz 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
PUTz 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-Matchz aktualnymETagkontaktu. Serwer odrzuci wtedyPUT. (zHTTP 412), jeśli bieżącyETagna serwerze jest różni się odETagwysłanego przez program kliencki. Dzięki temu optymistycznej serializacji aktualizacji.
- Aplikacje klienckie wysyłają żądanie
- Usuwanie kontaktu
- Aplikacje klienckie usuwają kontakt, wysyłając
DELETEdo URI kontaktu.
- Aplikacje klienckie usuwają kontakt, wysyłając