美文网首页iOS开发
苹果官方Universal Links的介绍

苹果官方Universal Links的介绍

作者: lcd357287797 | 来源:发表于2020-08-24 10:23 被阅读0次

当您支持通用链接时,iOS用户可以点击指向您网站的链接并无缝重定向到您已安装的应用程序,而无需通过Safari。 如果未安装您的应用,用户点击指向您网站的链接时会在Safari中打开您的网站。

通用链接为您提供了使用自定义URL方案时无法获得的几个关键好处。具体来说,通用链接有以下几个好处:

1. Unique(唯一性):与自定义URL方案不同,通用链接不可以被其他的app声明,因为它们使用标准的HTTP或HTTPS协议链接到您的网站。

2.Secure(安全性):当用户安装了你的app时,iOS会检查你上传到网络服务器的文件,以确保你的网站允许你的应用程序打开它的URL。只有你创建并上传了这个文件,这样你的网站和你的app的关联才是安全的。

3.Flexible(灵活性):即使你的app没有被用户安装,通用链接也可以正常工作。当你的app没有被安装时,点击一个链接就会在Safari中打开你的网站,这正是用户所希望的。

4.Simple(简单性):一个URL对你的网站和app都有效。

5.Private(私密性):其他的app可以与你的app进行通信,而不需要知道你的app是否被已经安装了。

注意:

通用链接使用户可以在点击WKWebView和UIWebView视图以及Safari页面中的网站链接时打开您的应用程序,此外也可以响应邮件,信息或者其他app中调用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子目录中。

○ 让您的app做好准备以处理通用链接。

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

创建和上传关联文件

要在您的网站和应用之间建立安全连接,您需要在它们之间建立信任关系。 您可以分为两部分来建立这种关系:

○ 在您的网站添加apple-app-site-association文件。

○ 在您的app中添加一个com.apple.developer.associated-domains的权利(这一部分在 Preparing Your App to Handle Universal Links中进行了描述)。

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

注意

如果您的应用程序在iOS 9或更高版本中运行,并且您使用HTTPS来提供apple-app-site-association文件,则可以创建一个使用application / json MIME类型的纯文本文件,而无需对其进行签名。 如果您在iOS 8中支持交接和共享Web凭据,则仍然需要按照Shared Web Credentials Reference中的说明对文件进行签名。

您需要为每个域提供一个单独的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文件的示例,该文件标识了应作为通用链接处理的三个路径。

List 6-1

注意:

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

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

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

因为系统按照指定的顺序评估path数组中的每个路径,并且在找到可以匹配或不可以匹配时停止评估,所以您应在低优先级路径之前指定高优先级路径。 请注意,仅将URL的路径部分用于比较。 其他组件(例如查询字符串或片段标识符)将被忽略(Note that only the path component of the URL is used for comparison. Other components, such as the query string or fragment identifier, are ignored)。

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

○ 使用*指定整个网站

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

○ 将*附加到特定的网址(例如/ videos / wwdc / 2015 / *),以指定网站的一部分。除了使用*匹配任何子字符串外,还可以使用? 匹配任何单个字符。 您可以将两个通配符合并在一个路径中,例如/ foo / * / bar / 201?/ mypage。

注意

用于在path数组中指定网站路径的字符串区分大小写。

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

准备您的app以处理通用链接

通用链接使用两种技术:第一种是在Web浏览器和本机应用程序之间提供切换功能的相同机制,第二种是共享Web凭据(有关这些技术的更多信息,请参阅Web Browser–to–Native App Handoff 和 Shared Web Credentials Reference)。 当用户点击通用链接时,iOS将启动您的app并向其发送一个NSUserActivity对象,您可以查询该对象以了解您的app是如何启动的。

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

○ 添加一个entitlement以指定您的app所支持的domain

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

在您的com.apple.developer.associated-domains entitlement中,包括您的app希望作为通用链接处理的domains的列表。 若要在Xcode中执行此操作,请在“Capabilities”选项卡中打开“Associated Domains section”部分,并为您的app支持的每个domain添加一个条目,并以applinks:为前缀,例如applinks:www.mywebsite.com。 将该列表限制为不超过20到30个域。

要匹配关联domain的所有子domain,可以通过在前缀*之前指定通配符。在特定domain的开头之前(必须输入.)。domain匹配基于applinks条目中最长的子字符串。例如,如果您指定条目applinks:*.mywebsite.com和applinks:*.users.mywebsite.com,则对domainemily.users.mywebsite.com的匹配是针对较长的*.users.mywebsite.com条目执行的。请注意,*.mywebsite.com的条目与星号后的.不匹配,因此与mywebsite.com不匹配。若要同时为*.mywebsite.com和mywebsite.com进行匹配,您需要为每个提供单独的applinks条目。

在指定关联的domain后,采用UIApplicationDelegate中处理Handoff的方法(即application:continueUserActivity:restorationHandler:),以便您的app可以接收链接并适当地处理它。

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

注意

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

请务必了解,如果您的app使用openURL: 打开指向您网站的通用链接,则该链接不会在您的app中打开。 在这种情况下,iOS会识别出呼叫来自您的app,因此您的应用程序不会将其视为通用链接。

重要:

为了保护用户的隐私和安全,当您需要传输数据时,请勿使用HTTP。 而是使用安全传输协议,例如HTTPS。

原文链接:https://developer.apple.com/library/archive/documentation/General/Conceptual/AppSearch/UniversalLinks.html#//apple_ref/doc/uid/TP40016308-CH12-SW2

相关文章

网友评论

    本文标题:苹果官方Universal Links的介绍

    本文链接:https://www.haomeiwen.com/subject/fknpjktx.html