从网站下载 .ics 到 Android 日历

Download .ics from website to Android calendar

我的智能手机上的 .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();
}

以我为例,DTENDDTSTART 后 1 小时完成。我的问题是当我从我的 XPERIA 下载此文件并单击事件 event.ics 时,我选择 Default account : Calendar of the device 并且该事件从未导入并且屏幕被阻止,如您所见:

我是否忘记为 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

谢谢

您生成的 iCalendar 文件存在几个问题。我建议您尝试使用在线验证器。如果在那之后你仍然有问题,你应该分享实际生成的 iCalendar,而不是生成它的代码(特别是如果它都在一行上:/)

最后,我找到了解决办法!

当我创建文件内容时,我使用了 \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,正确的是:

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

谢谢