老实说,这对于您自己实施是一种痛苦。如果没有大量令人讨厌的边缘情况,就没有简单的方法来处理所有事情,最值得注意的是“无法打开页面”错误用户会看到他们是否没有安装您的应用程序。在 iOS 9 之前,一个合理的基本实现是放置一个 JavaScript像这样重定向到您网站上的专用重定向页面:
setTimeout(function() {
window.location = "https://yourdomain.com";
}, 25);
// If "yourapp://" is registered, the user will see a dialog
// asking if they want to open your app. If they agree, your
// app will launch immediately and the timer won't fire.
// If not installed, you'll get an ugly "Cannot Open Page"
// dialogue and your fallback page will open when the timer expires.
window.location = "yourapp://";
不幸的是,这仍然会显示“无法打开页面”错误,但直到最近,通过使用此脚本的更细微的版本,可以以合理的用户友好方式解决此问题。可悲的是,Apple 故意在 iOS 9.2 更新中打破了这一点,因此自定义 URL 方案现在实际上对于深度链接几乎没有用,除非您确定该应用程序已经安装在该设备上。Apple 显然正在尽可能地推动 Universal Links 的采用。
最好的解决方案是自定义 URL 方案链接(带有智能 JavaScript 重定向)和 Apple 新的Universal Links的组合。通用链接让您可以使用普通的 http:// URL 指向您网站上的某个页面(该页面可能是一个简单的重定向到您想要的后备网页,没有导致“无法打开页面”错误的自定义 URL 触发器),该页面被拦截通过您的手机并直接发送到您的应用程序(如果已安装)。不幸的是(如您所述)Universal Links 仅适用于 iOS 9+,并且在许多应用程序中打开时还不起作用,因此需要大量的边缘案例处理才能为每个用户提供可靠的体验。
这需要处理很多,所以最好的选择可能是像Branch.io这样的免费服务(完全披露:我与团队合作)来处理所有技术方面的问题。您可以在此处找到使用 Branch 服务的应用程序示例(包括来自 eBay 的几个)。