如何在Swift 3中使用自定义URL方案打开我的iOS应用程序?

时间:2017-07-27 07:48:54

标签: ios xcode swift3 deep-linking

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

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

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

id = 24
token = 8fbf662617d14c10f4a11f716c1b2285

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

我该怎么做?

1 个答案:

答案 0 :(得分:3)

您所描述的内容称为深层链接。它是一个非常常见的应用程序功能 - 大多数应用程序都有它 - 从概念上讲,它似乎很容易构建。然而,要做到这一点很复杂,并且存在许多边缘情况。

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

  1. 如果已安装该应用程序:打开该应用并将用户路由到其中的正确内容。
  2. 如果未安装该应用:将用户转发到App Store,以便他们下载。理想情况下,还可以在下载后将用户路由到应用中的正确内容(这称为“延迟深度链接”#。<)。
  3. 虽然不是你也可能想跟踪所有这些活动,这样你就可以看到什么在起作用。

    如果已安装该应用

    您现有的自定义URI方案适合此类别。但是,Apple已经决定自定义URI方案不是一项好技术,并且在iOS 9中弃用它们而不是Universal Links

    苹果对此是正确的。自定义URI方案存在许多问题,但这些问题最大:

    • 如果未安装该应用,则无法回退。事实上,你得到一个错误。
    • 它们通常无法识别为用户可以点击的链接。

    要解决这些问题,过去可以使用常规http://链接,然后在目标网页上插入重定向,以将用户转发到自定义URI方案,从而打开应用。如果重定向失败,则可以无缝地将用户重定向到App Store。这是Apple在iOS 9中打破部分以推动Universal Links的采用。

    Universal Links是一种更好的用户体验,因为它们默认为http://个链接,可避免出现令人讨厌的错误。但是,它们很难设置still don't work everywhere

    为了确保用户在安装应用时最终进入应用内部,您需要同时支持Universal Links和自定义URI方案,即使这样,也会有很多边缘情况,例如Facebook和{{ 3}}需要特殊处理。

    如果未安装该应用程序

    在这种情况下,用户将以http://后备网址结束。此时,您有两个选择:

    1. 立即将用户直接转发到App Store。
    2. 将用户发送到您的移动网站(然后使用类似Twitter的内容为他们提供进入App Store的选项
    3. 大多数大品牌更喜欢第二种选择。较小的应用程序通常采用第一种方法,特别是如果他们没有网站。

      要将用户转发到App Store,您可以使用如下的Javascript重定向:

      <script type="text/javascript">
        window.onload = function() {
          window.location = "https://itunes.apple.com/app/id1121012049";
        };
      </script>
      

      直到最近,才有可能使用HTTP重定向来提高速度,但是smart banner,所以这不再有效。

      延迟深层链接

      不幸的是,在iOS或Android上没有本地方法可以完成最后这篇文章。要使其工作,您需要一个远程服务器来关闭循环。你可以Apple changed some behavior in Safari with iOS 10.3,但你真的不应该出于很多原因,其中最重要的是你有更重要的事情要做。

      底线

      深度链接非常复杂。今天的大多数应用都没有尝试通过构建内部系统进行设置。免费托管的深层链接服务,例如build this yourself(完全披露:他们与我们合作非常棒)和Firebase动态链接可以为您处理所有这些,并确保您始终了解最新信息标准和边缘案例。

      有关视频概述的信息,请参阅Branch.io。分行的员工制作了您需要了解的所有内容。