eth*_*gui 39 objective-c deep-linking app-store openurl ios
我有一个带有下载应用按钮的HTML页面.当iOS用户点击时,它会通过itms-services将用户重定向到App Store.我在这里使用的链接是:
window.location.replace("itms-apps://itunes.apple.com/app/id578505616");
Run Code Online (Sandbox Code Playgroud)
它在移动浏览器上看起来像这样:

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

警报框看起来像这样:

假设用户正在使用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
笔记:
为什么会出现这种延迟?这似乎是一个糟糕的用户体验.
我目前的理论是问题出在苹果方面.原因是,一旦点击打开应用程序按钮,它就不在我们网站的手中,以及Facebook/Pinterest应用程序.我认为,一旦点击按钮,iOS就会处理从一个应用程序到另一个应用程序的实际上下文切换.因此,它表明系统调用实际打开URL是挂起,或系统调用打开App Store应用程序是?? 但是,我无法证明任何一个是真是假.有没有人有更好的解释?
[编辑04/02/2015]我可以确认此问题在我的手机上仍然存在(iPhone 5S w/iOS 8.2).我做了一些进一步的研究,发现这篇文章我认为这是一个与iOS系统相关的错误:OpenUrl冻结app超过10秒
由于没有关于其工作原理的适当文档,因此很难查明其原因。
让我提出一个理论。
从浏览器打开应用程序会导致上下文切换;确实是从浏览器到App Store。因此,第一次会花费一些时间,而在随后的时间中,它会打开得更快,因为它会从缓存中打开。
如果您考虑 AppStore 在设备中的 iOS AppStore 和 iOS AppStore 服务器之间使用 Keep-alive 连接,那么服务器中第一次打开的套接字看起来会比后续次数要高,因为后续请求将重用相同的连接。
如果应用程序从缓存中删除,那么应用程序将再次需要一些时间才能打开,并且会出现一点网络延迟,因为应用程序将丢失用于保持活动连接的 cookie,然后应用程序将不得不忍受插座开通成本。
还有其他因素,例如 Safari 挂起,导致一些延迟。您可以在此处了解 Safari 是如何变得混乱的。
iOS 没有垃圾回收,只有 ARC(自动引用计数)之类的东西。每个都有自己的优点和缺点。有时这些缺点会浮现出来并导致一些问题;没有什么是可以排除的。例如,内存泄漏或应用程序崩溃可能会留下悬空指针。
从技术上讲,使用itms-apps应该比普通的 iTunes url 有一点优势,因为itms-apps可以缩小搜索范围;itms-apps指 iTunes 音乐商店应用程序。一个普通的 iTunes URL 可能是一本书 (iBook)、音乐 (iTunes)、应用程序 (Appstore) 等...因此 iOS 可能必须决定启动哪个应用程序。
我希望这有帮助。