从网站下载.ics到Android日历

时间:2015-08-03 08:16:44

标签: php android ios calendar icalendar

我的.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 并且永远不会导入事件并且屏幕被阻止,如您所见:

screen blocked on this picture

我忘记为android添加参数了吗?因为它适用于IOS。

更新:这里是ICS生成的代码

<plugins>

由于

2 个答案:

答案 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."\"");

由于