如何防止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文件?的主要内容,如果未能解决你的问题,请参考以下文章

当用户使用其他帐户登录时,如何防止激活应用内订阅?

扫描/识别 NFC 意图时防止提示音

如何防止 Visual Studio 提示从 app.config 更新 .settings 文件

如何每 x 秒重复 ICS 文件中的事件?

iOS:如何防止临时文件可见性

向 Google 日历移动应用添加 ics 提要?