2016-01-26 13 views
6

Ich versuche meine Anwendung (Windows Desktop App und Web App) mit mobilen Kalendern zu integrieren.So pushen Ereignisse zum IPhone Kalender

Meine Anwendung

  • Push neue Ereignisse auf mobile Kalender soll
  • Ereignisse mobil
  • Kalender holen

Bisher habe ich es geschafft, die Integration mit Google Kalender (sehr leicht, simple library + OAuth)

Jetzt möchte ich das gleiche mit iCloud Kalender machen, aber es ist nicht so einfach.

  • In iCould-Einstellungen kann ich einen Kalender veröffentlichen. Dann kann ich Ereignisse abrufen (als iCalendar-Datei), aber ich kann keine Ereignisse pushen.
  • Das kann keine ernsthaften Bibliotheken für iCould Kalenderintegration finden. Ich gab CalDav.Client einen Versuch, aber müssen CalDAV Server-URL bereitstellen. die nach this aussehen sollte“https://pXX-caldav.icloud.com/USER_ID/calendars/CALENDAR_ID. Ich habe keine Ahnung, was USER_ID und CALENDAR_ID sind und wo sie zu finden.

Irgendwelche Ideen?

PS

es eine Abhilfe ist. Ich kann Bitten Sie den Nutzer, ein Google-Konto zusammen mit einem Kalender zu erstellen und als Proxy zu verwenden. Integrieren Sie IPhone in den Google-Kalender und erstellen Sie die andere Website. Integrieren Sie meine Anwendung in den Google Kalender. Die Konfiguration ist für den Benutzer jedoch mühsam.

EDIT

Ich habe versucht, folgende Anweisungen des @ hnh und entdecken CalDAV auf diese Weise:

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> 

Das Ergebnis war 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

weiter verfolgt Anweisungen, die ich geschafft habe, zu authentifizieren, aber immer noch Probleme mit den Anforderungen aus dem Artikel:

Für:

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

ich: (ctag nicht gefunden, und displayName mit Wert "tmp" - was ich nicht kenne)

<?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> 

Und dafür:

<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> 

ich 400 Bad Request

+0

Was ist "Ihre Anwendung"? Ist es eine iOS-Anwendung? Oder ein Webservice? – hnh

+0

@hnh Es ist eine Windows-Desktop-Anwendung oder eine Web-Anwendung (vorzugsweise Desktop, aber Web wird auch tun). – gisek

+0

Edit 2: Sehr wahrscheinlich sind die URLs falsch. Lesen Sie sorgfältig [Bauen Sie einen CalDAV-Client] (http://sabre.io/dav/building-a-caldav-client/). – hnh

Antwort

3

Dies ist eine nette Einführung: Building a CalDAV client. Außerdem wird beschrieben, wie der Kalendererkennungsprozess funktioniert (wie finden Sie die Kalenderhostsatz-URL).

Viele CalDAV-Server unterstützen OAuth nicht, normalerweise müssen Sie den Benutzer nach dem Login/Passwort fragen.

Es scheint keine .NET-Bibliothek für CalDAV zu geben. Sie können eine Liste der Implementierungen hier finden: http://caldav.calconnect.org/implementations/librariestools.html.

Zusammenfassung: Wahrscheinlich nicht so einfach wie das, was Sie mit Google gemacht haben, aber auch nicht sehr schwer. Und sobald Sie es haben, können Sie sich mit vielen verschiedenen Servern verbinden, da CalDAV ein Standard ist ... (einschließlich Google, mit dem Sie auch eine Verbindung mit CalDAV herstellen können).

Update nach dem EDIT der Frage:

Die 401 ist eine generische HTTP Antwort. Dies bedeutet, dass Sie Anmeldeinformationen angeben müssen, um mit der Anfrage fortzufahren. Ein Client fordert den Benutzer normalerweise zur Anmeldung/zum Passwort auf und führt die Anfrage dann erneut aus. Die Standardauthentifizierung ist in der Wikipedia article on Basic auth gut beschrieben.

Ein weiterer Fehler ist p42-caldav.icloud.com als Einstiegspunkt URL verwenden. Verwenden Sie caldav.icloud.com, da Sie nicht wissen, auf welcher Partition der Benutzer ist. Sie müssen den Erkennungsprozess wie in Building a CalDAV client beschrieben verwenden, um die tatsächliche URL zu finden, auf der der Benutzerkalender gehostet wird.

+0

Was ist mit diesem Teil? "Ich muss CalDAV Server-URL zur Verfügung stellen, die wie folgt aussehen sollte" https://pXX-caldav.icloud.com/USER_ID/calendars/CALENDAR_ID. "Wo kann ich USER_ID und CALENDAR_ID Werte finden? – gisek

+0

Der Entdeckungsprozess funktioniert nicht mit iCloud. Es erfordert Autorisierung. Ich bin nicht einmal sicher, ob ich die richtige URL treffe.;/Siehe bitte bearbeiten. – gisek

+0

Ich lese deine Antwort. Ich finde nur den bereitgestellten Link zu generisch. Ich versuche gerade nichts mit OAuth zu machen. Das Problem ist, dass ich keine iCloud-spezifische Dokumentation finde und dass CalDAV-Interna mir nicht viel helfen. – gisek

Verwandte Themen