我的.ics文件和智能手机上的日历有问题。首先,要创建一个ICS文件并下载它,我使用这个函数:
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();
}
我的例子是DTEND
完成后DTSTART
完成event.ics
。我的问题是当我从我的XPERIA下载此文件并单击事件Default account : Calendar of the device
时,我选择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
并且永远不会导入事件并且屏幕被阻止,如您所见:
我忘记为android添加参数了吗?因为它适用于IOS。
更新:这里是ICS生成的代码
<plugins>
由于
答案 0 :(得分:0)
您生成的iCalendar文件存在多个问题。我建议你试试在线验证器。如果之后仍有问题,您应该共享实际生成的iCalendar,而不是生成它的代码(特别是如果它全部在一行上:/)
答案 1 :(得分: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."\"");
由于