Gra*_*How 0 php icalendar android ios
我在获取由 PHP 生成的 .ics 文件中的条目进行更新时遇到了很多麻烦。这是我正在使用的示例:
<?php
header('Content-type: text/calendar; charset=utf-8');
header('Content-Disposition: attachment; filename=calendar.ics');
$time = time();
$dtstamp = date('Ymd', $time). 'T' . date('His', $time) . 'Z'; echo "\r\n";
?>
BEGIN:VCALENDAR
VERSION:2.0
PRODID:-//My Event
METHOD:PUBLISH
X-WR-CALNAME:MyCal
BEGIN:VEVENT
DTSTAMP:<?php echo $dtstamp; ?>
ORGANIZER:someone@example.com
SEQUENCE:0
UID:ABC123
DTSTART:20150601T120000
DTEND:20150601T130000
SUMMARY:Event 1 - <?php echo date('His', $time) ."\r\n"; ?>
LOCATION:Location 1
DESCRIPTION:This is Event 1 - <?php echo date('His', $time) ."\r\n"; ?>
END:VEVENT
BEGIN:VEVENT
DTSTAMP:<?php echo $dtstamp; ?>
ORGANIZER:someone@example.com
SEQUENCE:0
UID:DEF123
DTSTART:20150601T160000
DTEND:20150601T170000
SUMMARY:Event 2 - <?php echo date('His', $time) ."\r\n"; ?>
LOCATION:Location 2
DESCRIPTION:This is Event 2 - <?php echo date('His', $time) ."\r\n"; ?>
END:VEVENT
END:VCALENDAR
Run Code Online (Sandbox Code Playgroud)
所以这是将事件输出到可以在 Android 或 iOS 设备中点击并添加到日历的 URL。下一步是在需要时更新事件项。我一直在尝试用这样的东西来做(最初的 PHP 故意省略):
BEGIN:VCALENDAR
VERSION:2.0
PRODID:-//My Event
METHOD:PUBLISH
X-WR-CALNAME:MyCal
BEGIN:VEVENT
DTSTAMP:<?php echo $dtstamp; ?>
ORGANIZER:someone@example.com
SEQUENCE:1
UID:ABC123
DTSTART:20150601T123000
DTEND:20150601T130000
SUMMARY:Event 1 - <?php echo date('His', $time) ."\r\n"; ?>
LOCATION:Location 1
DESCRIPTION:This is Event 1 - <?php echo date('His', $time) ."\r\n"; ?>
END:VEVENT
BEGIN:VEVENT
DTSTAMP:<?php echo $dtstamp; ?>
ORGANIZER:someone@example.com
SEQUENCE:1
UID:DEF123
DTSTART:20150601T163000
DTEND:20150601T170000
SUMMARY:Event 2 - <?php echo date('His', $time) ."\r\n"; ?>
LOCATION:Location 2
DESCRIPTION:This is Event 2 - <?php echo date('His', $time) ."\r\n"; ?>
END:VEVENT
END:VCALENDAR
Run Code Online (Sandbox Code Playgroud)
由于 DTSTAMP 将始终大于前一个条目,因此序列已增加并且 METHOD 更改为 REQUEST,据我所知,这应该足够了。
然而,在 Android 中它只是再次添加事件,在 iOS 中它显示已经存在的事件以及以前的详细信息,并且只为您提供再次添加事件的选项。所以,我想知道如何更新现有事件,并在需要时使用 METHOD:CANCEL 取消它们。
谢谢。
你试图做的事情是不可能的。
您可能应该做的是创建一个 iCalendar 提要。(通常webcal://为此使用非标准 URI 模式)。
像这样的提要应该只METHOD:PUBLISH包含并且始终包含日历中的每个项目。
要更新此提要中的条目,您只需更新提要本身。您在此提要中删除的任何项目都会从日历中删除。
METHOD:CANCEL以及METHOD:REQUEST在此上下文中未使用的其他 iTip 方法。它们有两个主要用途:
这些方法仅对具有 anORGANIZER和ATTENDEEs 的iCalendar 事件才真正有意义