在 2016 年,仅通过 Javascript 是不可能实现的
您仍然可以在 Android 上使用该方法,但 Apple 在 iOS 9.2 中进行了更改,这意味着这在 iOS 设备上基本上没有用。
它过去如何在 iOS 上运行
过去完成此操作的方法是尝试通过将 window.location 设置为您想要的自定义 URI 路径来在 Javascript 中打开应用程序。
window.location = “imdb://title/tt3569230”;
应用程序未安装
问题是,当应用程序未安装时,它会显示“无法打开页面”错误。相信大家都看过了。这是深度链接的祸根。 iOS 7和iOS 8期间曾有过一段辉煌时期,可以绕过这个,但黄金时代已经过去了。
为了避免这种情况,您必须在页面中添加一些 Javascript,以便重定向到 App Store。这样,用户就不会在屏幕上看到错误。
window.location = 'imdb://title/tt3569230';
setTimeout(function() {
window.location = 'itms-apps://itunes.apple.com/us/app/imdb-movies-tv/id342792525'
}, 250);
应用程序已安装
安装应用程序后,它将显示以下模式,提示用户是否要打开该应用程序:
现在发生的事情是,在 iOS 9 中,苹果改变了在“[应用程序]”中打开来自 Javascript 的模态blocking模态到 a非阻塞模态。这意味着当您尝试通过 Javascript 重定向到自定义 URI 方案打开应用程序时,模式将不再阻止 Javascript 执行,因此到 App Store 的回退重定向将立即执行在用户点击“打开”按钮之前.
At Branch.io(全面披露:我是 Branch 团队的成员),我们在 iOS 9.2 测试版中看到了这一问题,并希望我们的 Apple 雷达(错误报告)和有影响力的合作伙伴能够促使 Apple 在发布前解决该问题。不幸的是,对于 iOS 开发者来说,事实并非如此。苹果对我们担忧的回应非常清楚地表明了他们希望每个人都能做的事情:采用通用链接。
2016年解决方案
拥有可在任何地方使用的单个链接(包括路由到应用程序(如果已安装)或回退 Web URL(如果未安装)的唯一方法必须包括在 iOS 上使用通用链接。当然,iOS 中实际上还没有全面支持通用链接,因此在某些特定的边缘情况下仍然需要自定义 URI 方案(Chrome 和 Gmail 是两个大例子)。您需要检测这些并构建自定义处理。
大多数公司没有资源为此投入一名(或两名)全职工程师,这就是为什么 Pinterest、Tinder、Airbnb、Jet.com、Yummly 等都采用了链接平台,例如Branch.io或 Firebase 动态链接。