iOS 9 通用链接(Universal Links)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了iOS 9 通用链接(Universal Links)相关的知识,希望对你有一定的参考价值。

参考技术A 当您支持通用链接时,ios用户可以点击链接到您的网站,并无缝地重定向到已安装的应用程序,而无需通过Safari。如果您的应用未安装,请点击您的网站的链接在Safari中打开您的网站。

通用链接为您提供了使用自定义URL方案时无法获得的几个主要优点。具体来说,通用链接是:

独特。 与自定义网址方案不同,其他应用不能声明通用链接,因为它们使用标准的HTTP或HTTPS链接到您的网站。

安全。 当用户安装您的应用程序时,iOS会检查您已上传到Web服务器的文件,以确保您的网站允许您的应用程序代表其打开URL。只有您可以创建和上传此文件,因此您的网站与您的应用程序的关联是安全的。

灵活。 即使您的应用程序未安装,Universal links也可以正常工作。当您的应用程序未安装时,点击链接到您的网站会按照用户期望在Safari中打开内容。

简单。 一个URL适用于您的网站和您的应用程序。

私人的。 其他应用程序可以与您的应用程序通信,而无需知道您的应用程序是否已安装。

注意

通用链接可让用户在点击链接到您的网站 WKWebView , UIWebView 浏览和Safari页面之前打开您的应用程序,以及导致呼叫的链接 openURL: ,例如邮件,邮件和其他应用程序中发生的链接。

当用户在Safari中浏览您的网站,并点击与当前网页位于同一个域中的URL的通用链接时,iOS会尊重用户最有可能的意图,并在Safari中打开链接。如果用户点击不同域中的URL的通用链接,则iOS会在您的应用中打开链接。

对于运行9.0之前的iOS版本的用户,点击通用链接到您的网站将在Safari中打开链接。

添加对通用链接的支持很容易。您需要采取以下三个步骤:

创建一个apple-app-site-association包含您的应用程序可以处理的URL的JSON数据的文件。

将apple-app-site-association文件上传到您的HTTPS Web服务器。您可以将文件放在服务器的根目录或.well-known子目录中。

准备您的应用程序来处理通用链接。

您可以测试设备上的通用链接。

创建和上传关联文件

要在您的网站和您的应用程序之间建立安全的连接,您将建立它们之间的信任关系。你建立这种关系的两个部分:

apple-app-site-association您添加到您的网站的文件

一个com.apple.developer.associated-domains您添加到您的应用程序的权利(这部分中描述的 准备您的应用程序以处理通用链接 )

您可以了解有关应用程序和网站如何在“ 共享Web凭据参考” 中 共享凭据的更多信息 。

注意

如果您的应用程序在iOS 9或更高版本中运行,并且使用HTTPS来投放该apple-app-site-association文件,则可以创建使用application/jsonMIME类型的纯文本文件,而不需要对其进行签名。如果您在iOS 8中支持切换和共享网络凭据,则仍需要按照“ 共享Web凭据参考”中 所述对文件进行签名。

您需要为apple-app-site-association您的应用程序支持的独特内容为每个域提供单独的文件。例如,apple.com并且developer.apple.com需要单独的apple-app-site-association文件,因为这些域提供不同的内容。相比之下,apple.com并且www.apple.com不需要单独的站点关联文件 - 因为两个域都提供相同的内容 - 但是这两个域都必须使该文件可用。对于在iOS 9.3.1及更高版本中运行的应用程序,apple-app-site-association文件的未压缩大小必须不大于128 KB,无论文件是否已签名。

在您的apple-app-site-association文件中,您将指定您的网站中应该作为通用链接处理的路径以及不应被视为通用链接的路径。保持路径列表相当短,并且依靠通配符匹配来匹配更大的路径集。清单6-1显示了一个apple-app-site-association文件的示例,该文件标识了应作为通用链接处理的三个路径。

清单6-1 创建apple-app-site-association文件



"applinks":

"apps": [],

"details": [



"appID": "9JA89QQLNQ.com.apple.wwdc",

"paths": [ "/wwdc/news/", "/videos/wwdc/2015/*"]

,



"appID": "ABCD1234.com.apple.wwdc",

"paths": [ "*" ]



]





注意

不附加.json到apple-app-site-association文件名。

文件中的apps键apple-app-site-association必须存在,其值必须为空数组,如清单6-1所示。details密钥的值是一系列字典,您的网站支持的每个应用程序有一个字典。数组中字典的顺序决定了系统在查找匹配时遵循的顺序,因此您可以指定一个应用程序来处理网站的特定部分。

每个特定于应用程序的字典包含一个appID键和一个paths键。appID密钥的值是团队ID或应用ID前缀,后跟bundle ID。(该appID值与构建应用程序的权利中的“应用程序标识符”键相关联的值。)paths键的值是指定应用程序支持的网站部分的字符串数组以及您不想与应用程序关联的网站部分。要指定不应作为通用链接处理的区域,请在路径字符串的开头添加“NOT”(包括一个空格T)。例如,清单6-1apple-app-site-association所示的文件可能会阻止/videos/wwdc/2010/*通过更新paths数组来将网站的区域作为通用链接处理,如下所示:

"paths": [ "/wwdc/news/", "NOT /videos/wwdc/2010/*", "/videos/wwdc/201?/*"]

因为系统paths按照指定的顺序对阵列中的每个路径进行评估,并且在发现正或负匹配时停止评估 - 应在低优先级路径之前指定高优先级路径。请注意,只有URL的路径组件用于比较。其他组件(如查询字符串或片段标识符)将被忽略。

有多种方式可以在apple-app-site-association文件中指定网站路径。例如,您可以:

使用*指定整个网站

包括一个特定的URL,如/wwdc/news/指定一个特定的链接

附加*到特定的URL,例如/videos/wwdc/2015/*,指定您的网站的一部分

除了使用*匹配任何子字符串,您还可以使用?匹配任何单个字符。您可以在单个路径中组合两个通配符,例如/foo/*/bar/201?/mypage。

注意

用于指定paths阵列中的网站路径的字符串区分大小写。

创建apple-app-site-association文件后,将其上传到HTTPS Web服务器的根目录或.well-known子目录。该文件需要访问通过HTTPS,没有任何重定向,在https:///apple-app-site-association或https:///.well-known/apple-app-site-association。接下来,您需要处理应用程序中的通用链接。

准备您的应用程序处理通用链接

通用链接使用两种技术:第一种是与Web浏览器和本机应用程序之间切换功能相同的机制,第二种是共享Web凭据(有关这些技术的更多信息,请参阅 Web浏览器到本机应用程序切换 和 共享Web凭据参考 )。当用户点击通用链接时,iOS会启动您的应用程序并发送一个 NSUserActivity 可以查询的对象,以了解应用程序的启动方式。

要在您的应用程序中支持通用链接,请执行以下步骤:

添加一个指定您的应用程序支持的域的权利。

更新您的应用程序委托收到 NSUserActivity 对象时适当响应。

在您的com.apple.developer.associated-domains权利中,将应用程序要处理的域列表列为通用链接。要在Xcode中执行此操作,请打开“功能”选项卡中的“关联域”部分,并为您的应用程序支持的每个域添加一个条目,前缀applinks:如applinks:www.mywebsite.com。将此列表限制为不超过约20到30个域。

要匹配关联域的所有子域,您可以*.在特定域的开头之前通过前缀指定通配符(需要该时间段)。域匹配基于applinks条目中最长的子字符串。例如,如果您指定条目,applinks:*.mywebsite.com并且针对较长条目执行applinks:*.users.mywebsite.com域匹配。请注意,由于星号后的期间,条目不匹配。为了使两个匹配和,您需要提供一个单独的每个条目。emily.users.mywebsite.com*.users.mywebsite.com*.mywebsite.commywebsite.com*.mywebsite.commywebsite.comapplinks

指定关联的域后,请采用 UIApplicationDelegate Handoff(特别是 application:continueUserActivity:restorationHandler: )方法,以便您的应用程序可以接收链接并妥善处理。

当用户点击通用链接后,iOS启动您的应用程序时,您会收到 NSUserActivity 一个 activityType 值为的对象 NSUserActivityTypeBrowsingWeb 。activity对象的 webpageURL 属性包含用户正在访问的URL。网页网址属性始终包含HTTP或HTTPS网址,您可以使用 NSURLComponents API来操纵网址的组件。

当用户点击您处理的通用链接时,iOS还会检查用户最近的选择,以确定是否打开您的应用或您的网站。例如,一个利用通用链接打开应用程序的用户可以稍后在状态栏中点击导航痕迹按钮,选择在Safari中打开您的网站。用户进行此选择后,iOS会继续在Safari中打开您的网站,直到用户选择通过在网页上的智能应用横幅中点击OPEN打开您的应用程序。

注意

如果您实例化 SFSafariViewController , WKWebView 或 UIWebView 对象来处理通用链接,则iOS会在Safari中打开您的网站,而不是打开您的应用程序。但是,如果用户点击由嵌入在一个通用的链接SFSafariViewController,WKWebView或UIWebView对象,iOS版开启应用程式。

重要的是要明白,如果您的应用程序用于 openURL: 打开通用链接到您的网站,该链接不会在您的应用程序中打开。在这种情况下,iOS会识别该呼叫源自您的应用程序,因此您的应用程序不应被视为通用链接。

如果您在活动对象中收到无效的网址,那么重要的是正常失败。要处理不受支持的URL,您可以调用 openURL: 共享应用程序对象以在Safari中打开链接。如果您无法拨打此电话,则会向用户显示一条错误消息,以说明发生了什么。

重要

为了保护用户的隐私和安全,您不必在需要传输数据时使用HTTP;而是使用HTTPS等安全传输协议。

简单配置iOS的通用链接,迅速解决“universal link 校验不通过”问题!

参考技术A     对于需要使用微信支付等功能的APP来说,对接微信提供的openSDK是不可缺少的一环。随着苹果iOS 13系统版本的安全升级,为此openSDK在1.8.6版本进行了适配。1.8.6之后的openSDK需要支持Universal Links(通用链接)跳转,否则会出现“ 微信登录失败, universal link 校验不通过 ”的错误信息。

    对于通过链接的介绍和接入方式,这里不再赘述,具体步骤可以参考各大论坛下的接入教程。

    大致来说,配置通用链接需要客户端和服务端相互协助配合,并且通用链接要求 服务器必须支持https,且是受苹果信任的证书。 这里我们可以借助openinstall平台免费提供的一键拉起功能来省略服务端配置步骤,简单快速地实现通用链接的接入。

首先根据openinstall接入文档,确保当前的AppID开启了Associated Domains(关联域名)服务:

接着更新证书,配置到工程里即可。

    Xcode中,配置好openinstall自动分配的关联域名(需要在官网注册且创建应用)。这里的关联域名由openinstall所提供,相较于传统的接入方式,省去自行配置https地址的烦恼。

接着按照文档,在AppDelegate中添加对应的回调方法即可。这里无需配置apple-app-site-association文件的步骤。

    对于与微信openSDK的兼容性,openinstall也给出相应的解决方法:

    配置成功后,将落地页地址中点击触发的请求链接复制进备忘录中,长按点击之后便可验证出通用链接配置正确,这里以openinstall官网demo为例:

    对于无法使用通用链接跳转,或者想在网页中无需点击直接进行跳转的应用来说,openinstall同样给出了使用scheme进行跳转的解决方法,具体实现方法可按照其对应文档集成即可。

参考文档:

微信SDK接入说明: https://developers.weixin.qq.com/doc/oplatform/Mobile_App/Access_Guide/iOS.html

openinstall接入文档: https://www.openinstall.io/doc/ios_sdk.html

传统通用链接配置教程: https://blog.csdn.net/Tiramisu_LM/article/details/86582054

以上是关于iOS 9 通用链接(Universal Links)的主要内容,如果未能解决你的问题,请参考以下文章

iOS 9 通用链接(Universal Links)

iOS13+ 通用链接(Universal Link)设置 解决APP接入微信支付和分享问题

跨平台应用开发进阶(三十四) :uni-app 应用 Universal Link 实现 iOS 微信分享

iOS 9学习系列:打通 iOS 9 的通用链接(Universal Links)

iOS 9 通用链接(Universal Links)

趣谈 iOS Universal Link