3

好吧,我创建了一个小脚本来生成 iCal 事件并使用 webcal 协议自动将其添加到日历中。

该脚本的工作方式如下:我在服务器上托管 ical-generator.php 文件,并通过在开头添加 webcal 来发送包含必要信息的 url。

webcal://www.test.com/ical-generator.php?id=66038&titulo=Teste&data-inicio=20190311&data-final=20190312&local=Teste&descricao=Lorem Ipsum dolor&url=http://www.test.com/

但是,当我将事件导入日历时,这个唯一的事件最终会被添加为新日历而不是单个事件,应该将其添加到用户现有的日历中。

这是脚本:

    <?php
header("Content-type: text/calendar; charset=utf-8");
header("Content-Disposition: inline; filename=\"teste-evento-".$_GET['titulo'].".ics" ."\"");

echo "BEGIN:VCALENDAR
VERSION:2.0
PRODID:-//TESTE//NONSGML Teste//EN
CALSCALE:GREGORIAN
METHOD:PUBLISH
BEGIN:VEVENT
UID:".$_GET['id']."-teste.com.br
ORGANIZER;CN=TESTE:MAILTO:teste@teste.com.br
SUMMARY:".$_GET['titulo']."
STATUS:CONFIRMED
DTSTART:".$_GET['data-inicio']."
DTEND:".$_GET['data-final']."
DTSTAMP:".date('Ymd').'T'.date('His')."
LOCATION:".$_GET['local']."
DESCRIPTION:".$_GET['descricao'].".\nSaiba mais em: ".$_GET['url']."
URL:".$_GET['url']."
CLASS:PUBLIC
TRANSP:TRANSPARENT
PRIORITY:5
SEQUENCE:0
X-MICROSOFT-CDO-IMPORTANCE:1
END:VEVENT
END:VCALENDAR";
4

1 回答 1

0

(请注意,webcal 是非官方 URI(得到很好的支持,但官方 uri 是 http/s,所有日历应用程序都应支持。请参阅https://www.rfc-editor.org/rfc/rfc5545#section -3.8.4.6https://en.wikipedia.org/wiki/Webcal。)

现在,应用程序如何处理 ics 文件或 URL 通常取决于用户的操作。EG:在谷歌日历中,如果点击添加日历>导入,谷歌会提供一个默认的你的主日历导入,或者允许一个人从其他日历中选择。

但是,如果单击添加日历-> 从 URL,则谷歌日历将“订阅”-即在“其他日历”下创建一个新日历(无法“导入”其他事件)

如果附加到电子邮件中,大多数应用程序将只期望一个事件,并会提示一个事件添加到一个人的默认日历中。

仔细检查您在测试中所做的事情,并请确保您为每个事件使用唯一的 UID,以确保应用程序重新测试,就好像它是一个新事件(或删除以前的事件)。有些人很聪明,可以说“嘿,这是同一个事件”,这让测试变得混乱。

于 2019-03-17T03:49:17.340 回答