Я столкнулся с несколькими проблемами, связанными с созданием файла ICS, который должен быть совместим с несколькими клиентами, особенно iOS
, Gmail
, Outlook
, Android
и Windows Phone
. Погуглив, я обнаружил предлагаемый стандарт 2009 года, он же RFC5546. Я прочитал этот документ и нашел очень интересный момент, который потенциально может решить мою проблему. В разделе Методы для компонентов календаря VEVENT объясняются различия между методами REQUEST и PUBLISH. Но есть пара моментов, которые мне не совсем понятны:
- Что делать ПУБЛИКАЦИИ? Должен ли он добавить новый календарь? Должен ли он создать новый календарь (например, в Outlook или iOS) или добавить событие в существующий пользовательский календарь (например, в Gmail или Lightning)? РЕДАКТИРОВАНИЕ: обратите внимание на календарь в виде файла, прикрепленного к электронному письму.
- Может ли PUBLISH содержать более одного события? Из документа и по логике да, но тогда Gmail добавляет только первое событие из списка. Lightning добавляет только одно событие и выдает ошибку 804a0004.
- Как должен работать ЗАПРОС? В документе указано:
VEVENT | 1+ | All components MUST have the same UID.
что означает, что в календаре может быть более 1 VEVENT, но они должны иметь одинаковый UID. Тогда как я могу клиент различать эти события? И на самом деле ни один клиент, который я пробовал, не может отличить события, сгенерированные с одним и тем же UID, но они добавляют только одно с самой высокой ПОСЛЕДОВАТЕЛЬНОСТЬЮ. По логике вещей, я не хочу отправлять более одного события на одно приглашение, но RFC позволяет мне это сделать (и в моем случае я хочу), так как же? - С ЗАПРОСОМ, забыв оператор
VEVENT | 1+ | All components MUST have the same UID.
, поэтому предоставляя уникальный UID для каждого события в файле ICS, Gmail и iOS добавляют все события, содержащиеся в файле, в то время как Lightning и Outlook добавляют только первое. Есть ли способ пойти по этому пути, или, поскольку это не должно быть разрешено, я должен найти другой путь? - В принципе, как вы предлагаете добавить больше событий с помощью одного файла ICS в календарь пользователей для упомянутых мной платформ?
Пример ICS для ПУБЛИКАЦИИ:
BEGIN:VCALENDAR
PRODID:-//prodid//product//IT
VERSION:2.0
METHOD:PUBLISH
CALSCALE:GREGORIAN
BEGIN:VEVENT
UID:uid1
DTSTAMP:20130515T121437Z
DTSTART:20130619T205000
DTEND:20130619T215000
DESCRIPTION:Desc 1
SUMMARY:Sum 1
LOCATION:location
ORGANIZER:mailto:organizer@somedomain
SEQUENCE:1
STATUS:CONFIRMED
END:VEVENT
BEGIN:VEVENT
UID:uid2
DTSTAMP:20130515T121437Z
DTSTART:20130719T205000
DTEND:20130719T215000
DESCRIPTION:Desc 2
SUMMARY:Sum 2
LOCATION:location
ORGANIZER:mailto:organizer@somedomain
SEQUENCE:1
STATUS:CONFIRMED
END:VEVENT
END:VCALENDAR
Образец для ЗАПРОСА:
BEGIN:VCALENDAR
PRODID:-//prodid//product//IT
VERSION:2.0
METHOD:REQUEST
CALSCALE:GREGORIAN
BEGIN:VEVENT
UID:uid1
DTSTAMP:20130515T121437Z
DTSTART:20130619T205000
DTEND:20130619T215000
DESCRIPTION:Desc 1
SUMMARY:Sum 1
LOCATION:location
ORGANIZER:mailto:organizer@somedomain
ATTENDEE;RSVP=TRUE;CN=attendee cn:mailto:attendee@email
SEQUENCE:1
STATUS:CONFIRMED
END:VEVENT
BEGIN:VEVENT
UID:uid2
DTSTAMP:20130515T121437Z
DTSTART:20130719T205000
DTEND:20130719T215000
DESCRIPTION:Desc 2
SUMMARY:Sum 2
LOCATION:location
ORGANIZER:mailto:organizer@somedomain
ATTENDEE;RSVP=TRUE;CN=attendee cn:mailto:attendee@email
SEQUENCE:1
STATUS:CONFIRMED
END:VEVENT
END:VCALENDAR