如何防止iOS提示在线订阅ICS文件?
Posted
技术标签:
【中文标题】如何防止iOS提示在线订阅ICS文件?【英文标题】:How to prevent iOS from suggesting to subscribe to an ICS file online? 【发布时间】:2021-12-06 10:18:55 【问题描述】:我正在发布一份关于一些活动的简报,我想为其添加“添加到日历”链接。
为此,我在 Linode 的对象存储(与 S3 兼容)上托管了一些 ICS 文件。以下是日历事件的 URL 示例:https://app-statium.eu-central-1.linodeobjects.com/25782331-363c-4ba6-b255-b10f87a30895.ics
。
我的问题是,当从 ios 或 iPadOS 设备点击此链接时,日历将提供订阅 URL,而不仅仅是从日历中的文件添加事件。这是截图:
另一方面,在 macOS 上,行为符合预期:日历打开并显示事件。不建议订阅该 URL。
有没有什么方法可以通过这些链接让 iOS 的行为与 macOS 相同?我调查了某些查询参数或 HTTP 标头是否可以说“请不要订阅”但没有找到任何东西。
【问题讨论】:
不完全是你的问题,但看起来它取决于用户如何选择他们的默认日历应用程序techcommunity.microsoft.com/t5/office-365/… 【参考方案1】:我找到了解决办法。
TL;DR
电子邮件不应直接链接到 ICS 资源。相反,它应该使用带有最终 ICS 资源位置的临时重定向 HTTP 状态代码(即 302、303 或 307)进行响应。
我是如何到达那里的
为了找到这个解决方案,我反向设计了一个按照我想要的方式运行的链接(即添加事件,不订阅)。我发现工作行为和我的行为有以下区别:
-
电子邮件中的链接回复为
302
;
对302
位置的 HTTP get 响应将包含额外的 HTTP 标头;
最终的 ICS 资源将包含额外的元数据。
在尝试模仿这 3 种不同的行为之后,只有 302
hack 最终以我想要的方式工作。 ?
我最终回复了一个更合适的303
,它的行为符合预期。
【讨论】:
以上是关于如何防止iOS提示在线订阅ICS文件?的主要内容,如果未能解决你的问题,请参考以下文章