2016-01-26 32 views
6

Próbuję zintegrować moją aplikację (aplikację komputerową Windows i aplikację internetową) z kalendarzami mobilnymi.Jak przekazywać wydarzenia do kalendarza IPhone

Moja aplikacja ma

  • pchania nowych wydarzeń do kalendarzy mobilnych
  • sprowadzić zdarzenia tworzą kalendarze mobilnych

Do tej pory udało mi się zintegrować z kalendarzem Google (bardzo proste, simple library + OAuth)

Teraz chcę zrobić to samo z kalendarzem iCloud, ale to nie takie proste.

  • W ustawieniach iCould mogę upublicznić kalendarz. Niż mogę pobierać zdarzenia (jako plik iCalendar), ale nie mogę przesyłać zdarzeń.
  • Nie można znaleźć żadnych poważnych bibliotek do integracji kalendarza iCould. Wydałem próbkę CalDav.Client, ale muszę podać adres URL serwera CalDAV. który według this powinien wyglądać”https://pXX-caldav.icloud.com/USER_ID/calendars/CALENDAR_ID. Nie mam pojęcia, co USER_ID i CALENDAR_ID są i gdzie można je znaleźć.

Jakieś pomysły?

PS

Istnieje obejście. Mogę poproś użytkownika, aby utworzył Google accout wraz z kalendarzem i używał go jako serwera proxy. Zintegruj iPhone'a z kalendarzem Google i utwórz drugą stronę integruj moją aplikację z kalendarzem Google. Działa, ale konfiguracja jest dla tego użytkownika zbyt nużąca

EDIT

Próbowałem następujące instrukcje @ HNH i odkryć CalDav ten sposób:

PROPFIND https://p42-caldav.icloud.com/ HTTP/1.1 
Depth: 0 
Prefer: return-minimal 
Content-Type: application/xml; charset=utf-8 
Host: p42-caldav.icloud.com 
Content-Length: 102 

<d:propfind xmlns:d="DAV:"> 
    <d:prop> 
    <d:current-user-principal /> 
    </d:prop> 
</d:propfind> 

Wynik był 401:

HTTP/1.1 401 Unauthorized 
Content-Type: text/html;charset=utf-8 
WWW-Authenticate: x-mobileme-authtoken realm="MMCalDav" 
WWW-Authenticate: basic realm="MMCalDav" 
Server: iCloudCalendarServer 15G33 
Date: Tue, 26 Jan 2016 12:46:14 GMT 
X-Responding-Server: mr26p42ic-ztdg05101801 17 a63660a6f7d1a25b5a7ed66dab0da843 
X-Transaction-Id: c8dc19d4-c42a-11e5-8381-008cfaeb448c 
Content-Length: 141 
Strict-Transport-Security: max-age=31536000; includeSubDomains 

<html><head><title>Unauthorized</title></head><body><h1>Unauthorized</h1><p>You are not authorized to access this resource.</p></body></html> 

EDIT 2

następujące dodatkowe instrukcje udało mi się uwierzytelnić, ale nadal mają problemy z wniosków z artykułu:

dla:

<d:propfind xmlns:d="DAV:" xmlns:cs="http://calendarserver.org/ns/"> 
    <d:prop> 
    <d:displayname /> 
    <cs:getctag /> 
    </d:prop> 
</d:propfind> 

uzyskać: (ctag nie znaleziono, a displayName z wartością "tmp" - która nie uznaję)

<?xml version='1.0' encoding='UTF-8'?> 
<multistatus xmlns='DAV:'> 
    <response> 
    <href>/</href> 
    <propstat> 
     <prop> 
     <displayname>tmp</displayname> 
     </prop> 
     <status>HTTP/1.1 200 OK</status> 
    </propstat> 
    <propstat> 
     <prop> 
     <getctag xmlns='http://calendarserver.org/ns/'/> 
     </prop> 
     <status>HTTP/1.1 404 Not Found</status> 
    </propstat> 
    </response> 
</multistatus> 

A do tego:

<c:calendar-query xmlns:d="DAV:" xmlns:c="urn:ietf:params:xml:ns:caldav"> 
    <d:prop> 
     <d:getetag /> 
     <c:calendar-data /> 
    </d:prop> 
    <c:filter> 
     <c:comp-filter name="VCALENDAR" /> 
    </c:filter> 
</c:calendar-query> 

otrzymuję 400 Bad Request

+0

Co to jest "aplikacja"? Czy to aplikacja na iOS? Lub usługa internetowa? – hnh

+0

@hnh Jest to aplikacja komputerowa dla systemu Windows lub aplikacja internetowa (najlepiej na komputer, ale także w Internecie). – gisek

+0

Edycja 2: Prawdopodobnie adresy URL są nieprawidłowe. Ostrożnie (przeczytaj) [Budowanie klienta CalDAV] (http://sabre.io/dav/building-a-caldav-client/). – hnh

Odpowiedz

3

To miłe wprowadzenie: Building a CalDAV client. Opisuje również sposób działania procesu odnajdowania kalendarza (jak znaleźć adres URL zestawu kalendarzy).

Wiele serwerów CalDAV nie obsługuje OAuth, zwykle trzeba poprosić użytkownika o login/hasło.

Nie ma biblioteki .NET dla CalDAV. Możesz znaleźć listę implementacji tutaj: http://caldav.calconnect.org/implementations/librariestools.html.

Podsumowanie: Prawdopodobnie nie tak łatwe, jak to, co zrobiłeś z Google, ale też nie było to zbyt trudne. A gdy już to zrobisz, możesz łączyć się z wieloma różnymi serwerami, biorąc pod uwagę, że CalDAV to standard ... (w tym Google, możesz połączyć się z tym również za pomocą CalDAV).

Aktualizacja po EDIT pytania:

401 jest ogólnym HTTP odpowiedź. Oznacza to, że musisz podać referencje, aby kontynuować wysyłanie żądania. Klient zazwyczaj monituje użytkownika o login/hasło, a następnie ponownie uruchamia żądanie. Podstawowe uwierzytelnianie jest dobrze opisane w Wikipedii article on Basic auth. Kolejnym błędem jest użycie p42-caldav.icloud.com jako adresu URL punktu wejścia. Użyj caldav.icloud.com, ponieważ nie wiesz, na której partycji znajduje się użytkownik. Musisz użyć procesu wykrywania, jak opisano w Building a CalDAV client, aby znaleźć rzeczywisty adres URL, w którym hostowany jest kalendarz użytkowników.

+0

Co z tą częścią? "Muszę podać adres URL serwera CalDAV, który zgodnie z tym powinien wyglądać" https://pXX-caldav.icloud.com/USER_ID/calendars/CALENDAR_ID. "Gdzie mogę znaleźć wartości USER_ID i CALENDAR_ID? – gisek

+0

Proces wykrywania nie działa z usługą iCloud, ponieważ wymaga autoryzacji, nie jestem nawet pewien, czy trafiam na właściwy adres URL;)/Zobacz, proszę, edytuj proszę ... – gisek

+0

Przeczytałem twoją odpowiedź, po prostu uważam, że podany link jest zbyt ogólny. W tej chwili nie próbuję nic robić za pomocą OAuth. Problem polega na tym, że nie mogę znaleźć dokumentacji specyficznej dla iCloud i znajomość wewnętrznych elementów CalDAV niewiele mi pomoże – gisek