当在 Safari 浏览器上单击以下链接时,我需要打开我的特定 UIViewController:
http://my.sampledomain.com/en/customer/account/resetpassword/?id=24&token=8fbf662617d14c10f4a11f716c1b2285
当在浏览器上单击此链接时,我需要在特定屏幕上打开我的应用程序并从该 URL 检索数据。例如:
id = 24
token = 8fbf662617d14c10f4a11f716c1b2285
...并将其传递给特定的 UIViewController。
我该怎么做?
Best Answer-推荐答案 strong>
您所描述的称为深度链接。这是一个非常常见的应用程序功能——大多数应用程序都有它——从概念上讲,它似乎是一件容易构建的事情。但是,要正确处理很复杂,并且有很多边缘情况。
你基本上需要完成两件事:
- 如果已安装应用:打开应用并将用户引导至其中的正确内容。
- 如果未安装该应用:将用户转至 App Store,以便他们下载。理想情况下,在下载后将用户路由到应用内的正确内容(这称为“延迟深度链接”)。
虽然不是必需的,您可能还想跟踪所有这些事件,以便了解哪些事件正在发挥作用。
如果应用已安装
您现有的自定义 URI 方案属于此类别。然而,Apple 认为自定义 URI 方案不是一项好的技术,并在 iOS 9 中弃用了它们,转而支持 Universal Links。 .
Apple 在这点上是对的。自定义 URI 方案有很多问题,但这些是最大的问题:
- 如果未安装该应用,则没有后备方案。实际上,您会遇到错误。
- 它们通常不被识别为用户可以点击的链接。
为了解决这些问题,过去可以使用常规 http:// 链接,然后在目标页面上插入重定向以将用户转发到您的自定义 URI 方案,从而打开应用程序。如果该重定向失败,您可以将用户无缝地重定向到 App Store。这是 Apple 在 iOS 9 中打破的部分,旨在插入通用链接的采用。
通用链接是更好的用户体验,因为默认情况下它们是 http:// 链接并避免严重错误。但是,它们很难设置,still don't work everywhere .
为确保您的用户在安装应用程序后最终进入应用程序,您需要同时支持通用链接和自定义 URI 方案,即使这样也有很多边缘情况,例如 Facebook和 Twitter需要特殊处理。
如果应用没有安装
在这种情况下,用户最终会访问您的 http:// 后备 URL。此时,您有两种选择:
- 立即将用户直接转到 App Store。
- 将用户引导至您的移动网站(然后使用 smart banner 之类的方式为他们提供访问 App Store 的选项)。
大多数大品牌更喜欢第二种选择。较小的应用程序通常采用第一种方法,尤其是在它们没有网站的情况下。
要将用户转发到 App Store,您可以使用 Javascript 重定向,如下所示:
<script type="text/javascript">
window.onload = function() {
window.location = "https://itunes.apple.com/app/id1121012049";
};
</script>
直到最近,还可以使用 HTTP 重定向来提高速度,但是 Apple changed some behavior in Safari with iOS 10.3 ,所以这不再有效。
延迟深层链接
不幸的是,在 iOS 或 Android 上都没有本地方法可以完成最后一个任务。要完成这项工作,您需要一个远程服务器来关闭循环。您可以build this yourself ,但你真的不应该有很多原因,尤其是你有更重要的事情要做。
底线
深度链接非常复杂。今天的大多数应用程序都不会尝试通过构建内部系统来设置它。免费托管的深层链接服务,例如 Branch.io (全面披露:我和他们一起工作真是太棒了)Firebase 动态链接可以为您处理所有这些,并确保您始终了解最新的标准和边缘案例。
见 here对于视频概述,Branch 的员工制作了您需要了解的所有内容。
关于ios - 如何在 Swift 3 中使用自定义 URL 方案打开我的 iOS 应用程序?,我们在Stack Overflow上找到一个类似的问题:
https://stackoverflow.com/questions/45344487/
|