Blöde lange Überschrift aber es trifft das Thema. Nun zuerst das Problem; Ich verwende in meinem Android Mobile 3 Kalender, einen Privaten, einen Geschäftlichen und einen Büro internen "public" Kalender. Soweit alles kein Problem, der meiner Mailbox zugewiesene Geschäftliche wird per Exchange synchronisiert, der Private ist ein Google Kalender aber der dritte steht nur auf einem iCal / Caldav Kalender Server zur Verfügung.
Erste Idee - Ne App für alles ?!
Nun es gibt im Android Market eine App die genau das machen soll was ich möchte, einen externen iCal mit meinem Telefon abgleichen. Leider ist diese App seit Veröffentlichung in der Beta und das letzte Update ist irgendwann aus 2010. Wie Murphy es auch so will läuft die App auf einem Galaxy S wunderbar aber auf meinem HTC Desire nicht - Blöd. Fehler bekannt aber entwickelt wird daran wohl nicht mehr.Zweite Idee - iCal mit Google Kalender importieren
Nun da Android Telefon die Eigenschaft haben ohne Probleme mit beliebig vielen Google Kalendern zu synchronisieren dachte ich mir einfach den iCal vom Kalender Server in Google Kalender importieren und synchronisieren lassen. Tja... Da wäre nur ein Problem. Google Kalender akzeptiert nur offene iCals also Kalender die Public ohne Passwordschutz im Netz abrufbar sind - Fu. Lösung - Nun einfach ein kleines PHP Script gebastelt was mein Kalenderproblem löst. Das Script wird unter einer nicht zu erratenen URL online gestellt und im Google Kalender als Quell URL eingetragen. Würde dann z.b. so aussehen:http://meinedomain.de/meincalendarscript/djFfj3Djd-Djdsue-dJa94Dkf-sWsdfj.php
Wenn nun Google auf die URL zugreift öffnet das PHP Script eine Verbindung zum besagten iCal Server mit Password und gibt die zurückgegebenen Termine aus. Resultat, ich habe nun auch den mit Authentifizierung geschützten iCal im Google Kalender und damit im Android. *GRR* Hier das Script dazu:
header("Content-Type: text/calendar; charset=UTF-8");
header('Content-Disposition: filename=pub_calendar');
// create a new cURL resource
$curl= curl_init();
// set URL and other appropriate options
curl_setopt($curl, CURLOPT_URL, "https://my.awesome-ical-server.de/ical/public/Calendar");
curl_setopt($curl, CURLOPT_HEADER, false);
curl_setopt($curl, CURLOPT_USERPWD, 'username:password');
curl_setopt($curl, CURLOPT_ENCODING, 'gzip');
curl_setopt($curl, CURLOPT_HTTPAUTH, CURLAUTH_BASIC ) ;
curl_setopt($curl, CURLOPT_SSLVERSION, 3);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
// grab URL and pass it to the browser
curl_exec($curl);
// close cURL resource, and free up system resources
curl_close($curl);
Da dies simple PHP Script den Login im Klartext speichert würde ich empfehlen ein Extra iCal Konto zu erstellen was nur Zugriff auf diese Ressource hat. gl hf ^^