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

时间:2015-03-25 23:27:16

标签: ios objective-c app-store deep-linking openurl

  1. 我有一个带有下载应用按钮的HTML页面。当iOS用户点击时,它会通过itms-services将用户重定向到App Store。我在这里使用的链接是:

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

    在移动浏览器上看起来像这样: Mobile webpage with Download button

  2. Facebook / Pinterest有一个应用程序内浏览器,要求用户同意,然后以“取消”或“打开”应用程序的“警报”框的形式将用户重定向到他们的应用程序,Open应用程序打开外部链接。它看起来像这样: Mobile webpage with Download button embedded in Facebook

  3. 使用“警告”框看起来像这样: FB embedded browser with alert box

    假设用户正在使用iOS设备。此处的预期行为是单击“打开”应用程序按钮时,用户将被重定向到App Store应用程序。但是,在实际重定向发生之前,我们看到了大约10秒的延迟。

    请参阅以下视频:

    https://www.youtube.com/watch?v=_dgh7v-IsK8

    https://www.youtube.com/watch?v=_LFHeRnBFgg

    https://www.youtube.com/watch?v=82Y-kj-pMyw

    注意:

    1. 我似乎无法在任何时候重现这一点。它有时只能重现。对不起!
    2. 一旦设备第一次延迟,所有后续的AppStores链接都会很快,直到大约延迟一天。重新启动手机和/或清除浏览器缓存和/或重新安装Facebook / Pinterest无助于重现这一点。
    3. 我尝试用https://itunes.apple.com/us/app/trusper-tips-tutorials-how/id578505616?mt=8替换itms-apps://链接,但我们仍然经常遇到延迟。
    4. 延迟似乎正好是10秒。
    5. 为什么会出现这种延迟?这似乎是一种糟糕的用户体验。

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

      [编辑04/02/2015] 我可以确认这个问题至今仍然存在于我的手机上(iPhone 5S和iOS 8.2)。 我做了一些进一步的研究,发现这篇文章我认为这是一个与iOS系统相关的错误:OpenUrl freezes app for over 10 seconds

1 个答案:

答案 0 :(得分:4)

由于没有关于其工作原理的适当文件,因此很难确定其原因。

让我推进一个理论。

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

  • 如果您认为AppStore在设备和iOS AppStore Server之间的iOS AppStore之间使用Keep-alive连接,那么第一次在服务器中打开套接字似乎会高于随后的时间,因为后续请求将重用相同的连接。

  • 如果应用程序已从缓存中删除,那么它会再次花一些时间让应用程序打开,并且会有一点网络延迟,因为应用程序会丢失用于保持连接的cookie然后应用程序将不得不忍受开放成本。

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

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

  • 从技术上讲,使用itms-apps应该比普通的iTunes网址有一点优势,因为itms-apps应该缩小搜索范围; itms-apps表示iTunes音乐商店应用。 一个普通的iTunes URL可能是书籍(iBook),音乐(iTunes),应用程序(Appstore)等......因此iOS可能必须决定启动哪个应用程序。

我希望这会有所帮助。