我们有一个使用html缓存清单的https Web应用程序,因此它可以离线运行。
我们指示用户将其添加到主屏幕以获得最佳体验(手机上没有地址栏等)。我们有一个问题,如果你从主屏幕上删除应用程序,关闭safari,然后重新打开并添加到主屏幕,该应用程序将不会使用应用程序图标,无法完成https请求,并且缺少一些缓存数据。
该应用程序将继续在safari中运行良好,所有资源都被缓存和加载,所有https请求都能正常工作。
以下是重现这一点的步骤,我们在iOS 7 iPhone、iOS 8 iPhone和iOS 7 iPad2上进行了复制。这可能适用于其他提出https请求并使用缓存清单的网络应用程序,但我不确定。这与真实的证书以及自签名证书一起复制。
破解Webapp的步骤
- 转到主屏幕
- 按住Web应用程序图标
- 点击出现的小x以从主屏幕删除应用程序
- 点击主页按钮关闭编辑模式
- 双击主页按钮
- 向上滑动所有打开的应用程序(如果打开Safari和Webapp)
- 重新打开Safari(应重新加载网络应用程序)
- 点击共享按钮并添加到主屏幕。(不应显示徽标)
- 从主屏幕打开应用程序并尝试部署
修复网络应用程序的步骤
- 如果主屏幕上存在Web应用程序,请执行以下操作:
- 点击并按住网络应用程序图标
- 点击出现的x将其删除
- 点击主页按钮关闭编辑模式
- 打开设置->Safari
- 点击清除历史记录
- 点击清除Cookie和数据
- 打开Safari,键入
https://OurWebappURL
- 点击共享按钮并将应用程序添加到主屏幕(应显示徽标和"AppTitle")
- 从主屏幕打开应用程序并部署
这是html <head>
标记的一块,告诉它作为网络应用程序运行并使用应用程序图标(它是跨平台的)。
<html lang="en" manifest="cache.manifest">
<head>
<title>Our App Title</title>
<!-- Enable the homescreen app on mobile devices -->
<meta name="apple-mobile-web-app-capable" content="yes" />
<meta name="mobile-web-app-capable" content="yes" />
<meta name="apple-mobile-web-app-status-bar-style" content="black" />
<!-- Enable the App Icon -->
<link rel="icon" type="image/png" sizes="196x196" href="images/AppIcon.png">
<link rel="apple-touch-icon" href="images/AppIcon.png">
<link rel="apple-touch-startup-image" href="https://ourURL/images/iPhoneStartup.png">
<meta name="viewport" content="width=device-width" />
<meta name="viewport" content="initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no, height=device-height, width=device-width" />
<meta http-equiv="content-language" content="en">
如果我们删除<meta name="apple-mobile-web-app-capable" content="yes" />
,使其打开safari并在那里加载应用程序,它会正常工作,因为它只是在safari中运行。然而,这不是我们想要的体验,所以这是一种变通方法,而不是解决方案。这也没有解决第二次添加到主屏幕的问题,徽标仍然没有使用。
我们没有注册为苹果开发人员,所以我无法记录错误报告。请与任何想法或反馈意见,这是一个非常艰难的问题!
编辑:我现在已经用同一应用程序的http(无SSL)版本进行了测试,它运行良好,这似乎是一个https问题。
我们确定原因是通配符证书具有不完整的证书链,或者使用了自签名证书。
完全签名的单域证书在大多数情况下都很有效,我们建议我们的客户这样做,但您似乎可以通过联系您的证书提供商并请求安装中间证书来修复证书链。
在这种情况下,我们没有这样做,据我所知,我们使用了一个具有较短链的单个域证书。