iOS系统在打开App Store URL之前挂起

  1. 我有一个下载应用程序button的HTML页面。 当被iOS用户点击时,它通过itms-services将用户redirect到App Store。 我在这里使用的链接是:

    window.location.replace("itms-apps://itunes.apple.com/app/id578505616"); 

    它在移动浏览器上看起来如此: 移动网页与下载按钮

  2. Facebook / Pinterest有一个应用程序内浏览器,要求用户的同意,然后用取消或打开应用程序,打开应用程序打开外部链接的警报框的formsredirect用户的应用程序。 它看起来像这样: 在Facebook中嵌入下载按钮的移动网页

它看起来像这样的警报框: 带有警报框的FB嵌入式浏览器

假设用户正在使用iOS设备。 这里预期的行为是当打开应用程序button被点击时,用户被redirect到App Store应用程序。 但是,在实际redirect发生之前,我们看到大约10秒的延迟。

请参阅以下video:

笔记:

  1. 我似乎无法在任何时候重现这一点。 有时只能重现。 抱歉!
  2. 一旦设备第一次延迟,所有后续的AppStores链接将会很快,直到大约晚了一天。 重新启动手机和/或清除浏览器caching和/或重新安装Facebook / Pinterest无助于重现这一点。
  3. 我尝试用https://itunes.apple.com/us/app/trusper-tips-tutorials-how/id578505616?mt=8replaceitms-apps://链接,但是我们仍然遇到延迟时间。
  4. 延迟似乎正好是10秒。

为什么这个延迟发生? 这似乎是一个不好的用户体验。

我目前的理论是,问题出在苹果方面。 原因是,一旦打开应用程序button被点击,它是在我们的网站,以及Facebook / Pinterest的应用程序的手中。 我认为,一旦button被点击,iOS正在处理从一个应用程序到另一个应用程序的实际上下文切换。 因此,这表明实际打开URL的系统调用挂起,或打开App Store应用程序的系统调用是? 但是,我无法certificate任何一个是真的还是假的。 有没有人有更好的解释?

[编辑04/02/2015]我可以证实,这个问题依然存在,因为我的手机(iPhone 5S W / iOS 8.2)仍然存在。 我做了一些进一步的研究,发现这篇文章,我认为这是一个iOS系统相关的错误: OpenUrl冻结了超过10秒的应用程序

由于没有适当的文件说明它的工作原理,所以很难找出原因。

让我推进一个理论。

  • 从浏览器中打开应用程序会导致上下文切换; 的确从浏览器到App Store。 因此,第一次花费一些时间,而在以后的时间,它会打开更快,因为它会从caching中打开。

  • 如果考虑到AppStore在设备和iOS AppStore Server中的iOS AppStore之间使用Keep-alive连接,则第一次在服务器中打开套接字看起来会比后续时间更长,因为后续请求将重新使用相同的连接。

  • 如果应用程序从caching中删除,那么它会再次需要一些时间的应用程序打开,将有一点点的networking延迟,因为应用程序将失去保持连接的cookie,那么应用程序将不得不忍受强化开放成本。

  • 还有其他一些因素,如Safari挂,导致一些延迟。 您可以阅读Safari如何在这里搞砸。

  • iOS没有垃圾收集,只有像ARC(自动引用计数)的东西。 每个人都有自己的优点和缺点。 有时候,这些缺点可能会导致一些问题; 什么都不排除。 例如内存泄漏或应用程序崩溃可能会留下悬挂的指针。

  • 从技术上讲,使用itms-apps应该比简单的iTunes url有一点优势,因为itms-apps应该缩小search范围; itms-apps表示iTunes音乐商店应用程序。 一个普通的iTunesurl可能是书(iBook),音乐(iTunes),应用程序(Appstore)等等,所以iOS可能需要决定要启动哪个应用程序。

我希望这有帮助。

Interesting Posts