2015-08-03 2 views
0

У меня проблема с файлами .ics и календарем на моем смартфоне. Во-первых, создать файл ICS и загрузить его, я использую эту функцию:Загрузите .ics с веб-сайта на Android-календарь

function createEventCalendar($start, $end, $description, $location) { 
    $event = array(); 
    $rand = rand(5, 1000000000); 

    $event['name'] = "event"; 
    $event['data'] = "BEGIN:VCALENDAR\nVERSION:2.0\nPRODID:-//blabla//blabla//FR\nBEGIN:VEVENT\nDTSTAMP:".date('Ymd\THis')."\nSTATUS:CONFIRMED\nUID:".$rand."\nDTSTART:".date('Ymd\THis', strtotime($start))."\nDTEND:".date('Ymd\THis', strtotime($end))."\nSUMMARY:Rendez-vous assurance\nDESCRIPTION:".$description."\nLOCATION:".$location."\nEND:VEVENT\nEND:VCALENDAR\r\n"; 

    return $event; 
} 

public function downloadEventCalendar($event) { 
    $eventname = $event['name'].'.ics'; 

    header("Content-Type: text/x-vCalendar"); 
    header("Content-Disposition: attachment; filename=\"".$eventname."\""); 

    echo $event['data']; 
    exit(); 
} 

Для моего Exemple в DTEND закончить 1 часа после DTSTART. Моя проблема в том, когда я загрузить этот файл из моего XPERIA и нажмите на событие event.ics, я выбираю Default account : Calendar of the device и событие никогда не импортируется, и экран блокируется, как вы можете видеть:

screen blocked on this picture

ли я забыл добавить параметр для Android? потому что он работает для IOS.

UPDATE: здесь ICS сгенерированного кода

BEGIN:VCALENDAR 
VERSION:2.0 
PRODID:-//blaBla//blaBla//FR 
BEGIN:VEVENT 
DTSTAMP:20150804T095037 
STATUS:CONFIRMED 
UID:495370174 
DTSTART:20150901T120000 
DTEND:20150901T130000 
SUMMARY:My summary 
DESCRIPTION:Description of the event 
LOCATION:My calendar 
END:VEVENT 
END:VCALENDAR 

Благодарность

ответ

0

Finnaly, я нашел решение!

Когда я создал содержание моего файла, я использовал \n, мы должны использовать \r\n в конце каждой строки, как это:

$event['data'] = "BEGIN:VCALENDAR\r\nVERSION:2.0\r\nPRODID:-//blabla//blabla//EN\r\nBEGIN:VEVENT\r\nDTSTAMP:".date('Ymd\THis')."\r\nSTATUS:CONFIRMED\r\nUID:".$rand."\r\nDTSTART:".date('Ymd\THis', strtotime($start))."\r\nDTEND:".date('Ymd\THis', strtotime($end))."\r\nSUMMARY:my summary\r\nDESCRIPTION:".$description."\r\nLOCATION:".$location."\r\nEND:VEVENT\r\nEND:VCALENDAR"; 

И загрузить файл я использую заголовок, правая является:

header("Content-Type: text/Calendar"); 
header("Content-Disposition: attachment; filename=\"".$eventname."\""); 

Благодаря

0

Там же несколько проблем с сгенерированным файлом Анонсы. Я предлагаю вам попробовать онлайн-валидатор. Если у вас все еще есть проблемы после этого, вы должны поделиться фактическим сгенерированным iCalendar, а не кодом, который его генерирует (особенно если все это в одной строке: /)

+0

я сдал 'event.ics' в валидатор, и исправлены некоторые ошибки, но он не работает в любом случае. Я обновил свой код с помощью генерации кода ICS. Я добавил '\ r \ n' в конце моего кода. Вы видите ошибки? – Remi

+0

Я нашел веб-сайт, который делает то, что я хочу [здесь] (https://addthisevent.com/), я попытался скопировать «event.ics», сгенерированный в моем коде. После загрузки и получения точно такого же кода, сгенерированного в 'event.ics', моя не работает ... – Remi

+0

Привет, Реми, я видел некоторые инструкции' strtotime' и думал, что вокруг них не было функций 'date()' , поэтому я думал, что это неправильно. Новое форматирование помогает. Одна из распространенных проблем заключается в том, что некоторые клиенты не поддерживают плавающее время. Попробуйте добавить 'Z' к DTSTART и DTEND, чтобы узнать, разрешает ли он это. – Evert

 Смежные вопросы

  • Нет связанных вопросов^_^