我(实际上是我的雇主)有一个移动网站,支持 Safari 集成(适用于 iPhone 和 iPad)——这意味着客户可以将其添加到他们的主屏幕上,然后它将作为一个独立的网络应用程序运行(没有地址栏,自定义图标、启动图像等)。
除了一周前(巧合的是,苹果发布 iOS 6.1.2 后不久),我们的一些客户(最初是 6 个)抱怨说他们不再获得正常内容,而是获得公共 wifi 的“404 页面”之外,一切正常提供商(英国 Sky 拥有的云)。经过一番调查,我们发现在某些时候,这些客户在没有实际登录的情况下连接到云 wifi(它是那些将您重定向到登录页面以输入您的凭据的提供商之一,之后您可以继续浏览)。问题是,即使在切换回他们的私人 wifi 或移动数据连接后,应用程序也会显示 Cloud 的页面。
这仅在通过书签启动应用程序时发生(据我所知)(从 safari 使用它时我看不到这种行为)。
发生的情况是客户将连接到云 wifi(无需登录),他们将打开应用程序,此时路由器将向他们的登录页面发出重定向响应;该应用程序将缓存登录页面,并且在再次使用书签时始终显示它。(发生这种情况时我已经进行了捕获,并且在启动时没有发出任何请求)。
更奇怪的是,在这种情况下,如果删除现有书签并添加一个新书签,则会向您显示相同的缓存页面(整个操作是在远离云的情况下执行的)。我们通过在每次点击书签屏幕时向 URL 添加一个唯一标识符来解决此问题(这表明 Web 应用程序的沙箱已链接到该 URL,这是意料之中的)。
我们试图实现的是让应用程序在客户离开云后正确恢复。但似乎没有直接的方法可以做到这一点。
此外,所有这些都存在一定程度的不一致 - 大多数情况下,在执行流程时,我会看到一个 404 页面(自定义 404 页面https://service.thecloud.net/service-platform),但有时我会正确重定向到登录页面,在这种情况下应用程序不会中断。
我的假设是,独立 Web 应用程序模型中存在奇怪的竞争条件,导致浏览器无法正确处理重定向(并且实际上缓存 404 页面)。我已经向 Apple 提出了支持事件(最终变成了错误报告),但这可能需要一段时间,我正在尽我所能找出解决方法。
任何想法,也许有人以前见过这个?每当我测试任何修复程序时,我都需要步行 5 分钟,这一事实使问题更加严重。我尝试过创建简单的测试表单,但我无法重现该问题,而对于完整的应用程序,我几乎每次都可以做到。
以下是重现步骤的摘要:
- 通过私人 wifi(或移动数据连接)将书签添加到网站(我已经设法使用很多支持如上所述 safari 集成的应用程序来重现它)
- 打开应用查看正常内容
- 连接到云热点并从书签打开应用程序(如果您没有立即获得 404,请打开关闭它几次)
- 连接到私人wifi(或移动数据连接)并通过书签打开应用程序->您将再次看到相同的404页面