Przewodnik dla programistów interfejsu CalDAV API

Zadbaj o dobrą organizację dzięki kolekcji Zapisuj i kategoryzuj treści zgodnie ze swoimi preferencjami.

CalDAV to rozszerzenie WebDAV, które zapewnia klientom dostęp do informacji z kalendarza na zdalnym serwerze.

Google udostępnia interfejs CalDAV, którego możesz używać do wyświetlania kalendarzy i zarządzania nimi za pomocą protokołu CalDAV.

Specyfikacja

W przypadku każdej ze specyfikacji Google zapewnia pomoc CalDAV:

  • rfc4918: Rozszerzenia HTTP dla rozproszonego tworzenia i wersji wersji stron internetowych (WebDAV)
    • Obsługuje metody HTTP GET, PUT, HEAD, DELETE, POST, OPTIONS, PROPFIND i PROPPATCH.
    • Nie obsługuje metod HTTP LOCK, UNLOCK, COPY, MOVE ani MKCOL ani nagłówka If* (z wyjątkiem If-Match).
    • Nie obsługuje dowolnych (zdefiniowanych przez użytkownika) właściwości WebDAV.
    • Nie obsługuje kontroli dostępu WebDAV (rfc3744).
  • rfc4791: Kalendarzowanie rozszerzeń do WebDAV (CalDAV)
    • Obsługuje metodę HTTP REPORT. Wdrożono wszystkie raporty z wyjątkiem zapytań wolnych.
    • Nie obsługuje metody HTTP MKCALENDAR.
    • Nie obsługuje działania AUDIO.
  • rfc5545: iCalendar
    • Dane ujawnione w interfejsie CalDAV są sformatowane zgodnie ze specyfikacją iCalendar.
    • Obecnie nie obsługuje danych VTODO ani VJOURNAL.
    • Nie obsługuje rozszerzenia Apple iCal®, aby zezwalać na właściwości adresu URL ustawianego przez użytkownika.
  • rfc6578: Synchronizacja kolekcji dla WebDAV
    • Aplikacje klienckie muszą przełączyć się na ten tryb działania po początkowej synchronizacji.
  • rfc6638: planowanie rozszerzeń do CalDAV
    • Obsługuje trygon „skrzynkę odbiorczą”, która jest zawsze pusta.
    • Otrzymane zaproszenia są automatycznie dostarczane do Twojej kolekcji „wydarzenia” zamiast do „skrzynki odbiorczej”.
    • Nie obsługuje wyszukiwania informacji o stanie Wolny/Zajęty.
  • caldav-ctag-02: tag elementu kolekcji kalendarzy (CTag) w CalDAV
    • Kalendarz ctag jest jak zasób etag. Zmienia się on, gdy cokolwiek w kalendarzu zostanie zmienione. Dzięki temu aplikacja kliencka może szybko sprawdzić, czy nie musi synchronizować żadnych zmienionych zdarzeń.
  • calendar-proxy: Funkcje proxy w kalendarzu użytkownika w CalDAV
    • Aby poprawić wydajność synchronizacji kalendarzy na urządzeniach z iOS, które nie obsługują przekazywania dostępu, używanie właściwości calendar-proxy-read-for lub calendar-proxy-write-for z klientem użytkownika iOS nie powiedzie się.

Nie opracowaliśmy jeszcze pełnej implementacji wszystkich istotnych parametrów. Jednak w przypadku wielu klientów, takich jak Apple iCal, protokół CalDAV powinien działać prawidłowo.

Uwaga: ze względu na bezpieczeństwo konta i aby zapobiegać nadużyciom, Google może umieszczać pliki cookie w aplikacjach klienckich, które uzyskują dostęp do danych przez CalDAV.

Tworzenie identyfikatora klienta

Aby korzystać z interfejsu CalDAV API, musisz mieć konto Google. Jeśli masz już konto, którego możesz używać, nie musisz nic więcej robić.

Zanim będzie można wysyłać żądania do interfejsu CalDAV API, musisz zarejestrować klienta w konsoli interfejsu API Google, tworząc projekt.

Otwórz konsolę interfejsów API Google. Kliknij Utwórz projekt, wpisz nazwę i kliknij Utwórz.

Następnym krokiem jest aktywowanie interfejsu CalDAV API.

Aby włączyć interfejs API w projekcie, wykonaj te czynności:

  1. Otwórz bibliotekę interfejsów API w Konsoli interfejsów API Google. Jeśli pojawi się taka prośba, wybierz projekt lub utwórz nowy. Biblioteka interfejsów API zawiera wszystkie dostępne interfejsy API, pogrupowane według rodziny usług i popularności.
  2. Jeśli interfejsu API, który chcesz włączyć, nie ma na liście, użyj wyszukiwarki, aby go znaleźć.
  3. Wybierz interfejs API, który chcesz włączyć, a następnie kliknij przycisk Włącz.
  4. Jeśli pojawi się taka prośba, włącz płatności.
  5. Jeśli pojawi się taka prośba, zaakceptuj Warunki korzystania z interfejsu API.
Aby wykonywać żądania dotyczące interfejsu CalDAV API, potrzebujesz identyfikatora klienta i kluczu klienta.

Aby znaleźć identyfikator klienta i tajny klucz klienta dla swojego projektu:

  1. Wybierz istniejące dane logowania OAuth 2.0 lub otwórz stronę Dane logowania.
  2. Utwórz dane logowania OAuth 2.0 w swoim projekcie, klikając Utwórz dane logowania > Identyfikator klienta OAuth, i podaj informacje potrzebne do utworzenia tych danych.
  3. W sekcji Identyfikatory klienta OAuth 2.0 znajdź identyfikator klienta. Aby uzyskać szczegółowe informacje, kliknij identyfikator klienta.

Łączenie z serwerem Google CalDAV

Aby używać interfejsu CalDAV, program kliencki początkowo łączy się z serwerem kalendarza w jednym z dwóch punktów początkowych. W obu przypadkach należy nawiązywać połączenie przez HTTPS i korzystać ze schematu uwierzytelniania OAuth 2.0. Serwer CalDAV odmówi uwierzytelnienia żądania, jeśli nie otrzyma on protokołu HTTPS z uwierzytelnianiem OAuth 2.0 na koncie Google. Próba nawiązania połączenia przez HTTP lub użycia uwierzytelniania podstawowego powoduje wygenerowanie kodu stanu HTTP 401 Unauthorized.

Jeśli program kliencki (taki jak Apple iCal) jako punkt początkowy wymaga podmiotu zabezpieczeń, identyfikator URI, z którym należy się połączyć, to:

https://apidata.googleusercontent.com/caldav/v2/calid/user

Gdzie calid należy zastąpić „identyfikatorem kalendarza” kalendarza, do którego chcesz uzyskać dostęp. Aby ją wyświetlić, w interfejsie internetowym Kalendarza Google: w menu obok nazwy kalendarza wybierz Ustawienia Kalendarza. Na stronie wyników pojawi się identyfikator kalendarza w sekcji Adres kalendarza. Identyfikator kalendarza głównego użytkownika jest taki sam jak adres e-mail tego użytkownika.

Jeśli program kliencki (np. Mozilla Sunbird) jako punkt początkowy wymaga kolekcji kalendarzy, identyfikator URI do połączenia to:

https://apidata.googleusercontent.com/caldav/v2/calid/events

Stary punkt końcowy https://www.google.com/calendar/dav został wycofany i nie jest już obsługiwany. Korzystasz z niego na własne ryzyko. Zalecamy przejście na nowy format punktów końcowych opisany powyżej.

iCal jest znakiem towarowym firmy Apple Inc.