2016-01-26 28 views
6

Sto cercando di integrare la mia applicazione (app desktop Windows e app Web) con i calendari mobili.Come inviare eventi al calendario IPhone

La mia applicazione dovrebbe

  • spinta nuovi eventi ai calendari mobili
  • recuperano gli eventi formano calendari mobili

Finora sono riuscito a integrarsi con il calendario di Google (molto facile, simple library + OAuth)

Ora voglio fare lo stesso con il calendario di iCloud, ma non è così facile.

  • Nelle impostazioni di iCould posso rendere pubblico un calendario. Poi posso recuperare gli eventi (come un file iCalendar), ma non posso spingere gli eventi.
  • Impossibile trovare alcuna libreria seria per l'integrazione del calendario iCould. Ho dato una prova a CalDav.Client, ma ho bisogno di fornire l'URL del server CalDAV. che secondo this dovrebbe essere simile" https://pXX-caldav.icloud.com/USER_ID/calendars/CALENDAR_ID. Io non hanno idea di cosa USER_ID e CALENDAR_ID sono e dove trovarli.

Tutte le idee?

PS

C'è una soluzione. Posso chiedi all'utente di creare un account Google insieme a un calendario e utilizzarlo come proxy.Integrare IPhone con il calendario di Google e formare l'altro sito integra la mia applicazione con il calendario di Google. Funziona, ma la configurazione è un po 'noiosa per l'utente

EDIT

Ho provato seguendo le istruzioni di @ HNH e scoprire CalDAV in questo modo:

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> 

Il risultato è stato 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

A seguito di ulteriori istruzioni che sono riuscito a autenticare, ma ancora hanno problemi con le richieste del articolo:

Per:

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

ottengo: (ctag non trovato, e displayName con valore di "tmp" - che io non riconosco)

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

E per questo:

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

ottengo 400 Richiesta

+0

Che cos'è la "tua applicazione"? È un'applicazione iOS? O un servizio web? – hnh

+0

@hnh È un'applicazione desktop Windows o un'applicazione Web (preferibilmente desktop, ma anche Web). – gisek

+0

Modifica 2: molto probabilmente gli URL sono sbagliati. Leggere attentamente [ri) [Costruire un client CalDAV] (http://sabre.io/dav/building-a-caldav-client/). – hnh

risposta

3

Questa è una bella introduzione: Building a CalDAV client. Descrive anche come funziona il processo di scoperta del calendario (come trovi l'URL del homeset del calendario).

Molti server CalDAV non supportano OAuth, di solito è necessario chiedere all'utente login/password.

Non sembra esserci una libreria .NET per CalDAV. È possibile trovare un elenco di implementazioni qui: http://caldav.calconnect.org/implementations/librariestools.html.

Riassunto: Probabilmente non è facile come quello che hai fatto con Google, ma non è neanche super difficile. E una volta che lo hai, puoi connetterti a molti server diversi, dato che CalDAV è uno standard ... (incluso Google, puoi anche collegarlo a CalDAV).

aggiornamento dopo l'EDIT della questione:

Il 401 è un HTTP risposta generica. Significa che è necessario fornire le credenziali per continuare con la richiesta. Un client di solito richiede all'utente di accedere/password e quindi rieseguire la richiesta. L'autenticazione di base è ben descritta in Wikipedia article on Basic auth.

Un altro errore è utilizzare p42-caldav.icloud.com come URL del punto di ingresso. Utilizzare caldav.icloud.com in quanto non si conosce la partizione in cui si trova l'utente. È necessario utilizzare la procedura di rilevamento come descritto in Building a CalDAV client per trovare l'URL effettivo sul quale è ospitato il calendario degli utenti.

+0

Che dire di questa parte? "Devo fornire all'URL del server CalDAV, che in base a questo dovrebbe apparire come" https://pXX-caldav.icloud.com/USER_ID/calendars/CALENDAR_ID ". Dove posso trovare i valori USER_ID e CALENDAR_ID? – gisek

+0

Il processo di scoperta non funziona con iCloud. Richiede l'autorizzazione. Non sono nemmeno sicuro se sto urlando l'URL corretto./Guarda la modifica per favore. – gisek

+0

Ho letto la tua risposta. Ho appena trovato il link fornito troppo generico. Non sto cercando di fare nulla usando OAuth in questo momento. Il problema è che non riesco a trovare la documentazione specifica per iCloud e sapere che gli interni di CalDAV non mi aiutano molto – gisek