OGeek|极客世界-中国程序员成长平台

标题: ios - 如何在 Swift 3 中使用自定义 URL 方案打开我的 iOS 应用程序? [打印本页]

作者: 菜鸟教程小白    时间: 2022-12-12 13:36
标题: ios - 如何在 Swift 3 中使用自定义 URL 方案打开我的 iOS 应用程序?

当在 Safari 浏览器上单击以下链接时,我需要打开我的特定 UIViewController:

http://my.sampledomain.com/en/customer/account/resetpassword/?id=24&token=8fbf662617d14c10f4a11f716c1b2285

当在浏览器上单击此链接时,我需要在特定屏幕上打开我的应用程序并从该 URL 检索数据。例如:

id = 24
token = 8fbf662617d14c10f4a11f716c1b2285

...并将其传递给特定的 UIViewController。

我该怎么做?



Best Answer-推荐答案


您所描述的称为深度链接。这是一个非常常见的应用程序功能——大多数应用程序都有它——从概念上讲,它似乎是一件容易构建的事情。但是,要正确处理很复杂,并且有很多边缘情况。

你基本上需要完成两件事:

  1. 如果已安装应用:打开应用并将用户引导至其中的正确内容。
  2. 如果未安装该应用:将用户转至 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 方案,即使这样也有很多边缘情况,例如 FacebookTwitter需要特殊处理。

如果应用没有安装

在这种情况下,用户最终会访问您的 http:// 后备 URL。此时,您有两种选择:

  1. 立即将用户直接转到 App Store。
  2. 将用户引导至您的移动网站(然后使用 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/






欢迎光临 OGeek|极客世界-中国程序员成长平台 (http://ogeek.cn/) Powered by Discuz! X3.4