支持通用链接
当您支持通用链接时,iOS 用户可以点击指向您网站的链接,并无缝重定向到您安装的应用程序,而无需通过 Safari。如果您的 App 尚未安装,轻点指向您网站的链接会在 Safari 浏览器中打开您的网站。
通用链接为您提供了使用自定义 URL 方案时无法获得的几个关键优势。具体来说,通用链接是:
- 独特。与自定义网址方案不同,其他应用无法声明通用链接,因为它们使用指向您网站的标准 HTTP 或 HTTPS 链接。
- 安全。当用户安装您的应用时,iOS 会检查您上传到网络服务器的文件,以确保您的网站允许您的应用代表它打开网址。只有您可以创建和上传此文件,因此您的网站与您的应用程序的关联是安全的。
- 灵活。即使未安装应用,通用链接也能正常工作。如果 App 未安装,轻点指向您网站的链接会在 Safari 浏览器中打开内容,正如用户所期望的那样。
- 简单。一个网址适用于您的网站和应用。
- 私人。其他应用可以与你的应用通信,而无需知道你的应用是否已安装。
添加对通用链接的支持很容易。您需要采取三个步骤:
- 创建一个文件,其中包含有关应用可以处理的 URL 的 JSON 数据。
apple-app-site-association - 将文件上传到您的 HTTPS Web 服务器。您可以将文件放在服务器的根目录或子目录中。
apple-app-site-association.well-known - 准备您的应用以处理通用链接。
您可以在设备上测试通用链接。
要在网站和应用之间建立安全连接,请在它们之间建立信任关系。您可以分两部分建立此关系: 您可以在共享 Web 凭据参考中详细了解您的应用和网站如何共享凭据。 需要为每个域提供一个单独的文件,其中包含应用支持的唯一内容。例如,并且需要单独的文件,因为这些域提供不同的内容。相比之下,不需要单独的网站关联文件(因为两个域提供相同的内容),但两个域都必须使文件可用。对于运行 iOS 9.3.1 及更高版本的应用,无论文件是否签名,文件的未压缩大小都不得大于 128 KB。 在您的文件中,您可以指定应作为通用链接处理的网站路径以及不应作为通用链接处理的路径。保持路径列表相当短,并依靠通配符匹配来匹配更大的路径集。示例 6-1 显示了一个文件示例,该文件标识了应作为通用链接处理的三个路径。 文件中的键必须存在,并且其值必须是一个空数组,如示例 6-1 所示。键的值是一个词典数组,您的网站支持的每个应用一个词典。数组中词典的顺序决定了系统在查找匹配项时遵循的顺序,因此您可以指定一个应用程序来处理网站的特定部分。 每个特定于应用的词典都包含一个键和一个键。键的值是团队 ID 或应用 ID 前缀,后跟捆绑包 ID。(该值与构建应用权利中的“application-identifier”键关联的值相同。键的值是一个字符串数组,用于指定应用支持的网站部分以及您不想与应用关联的网站部分。若要指定不应作为通用链接处理的区域,请在路径字符串的开头添加“”(包括 后面的空格)。例如,示例 6-1 中显示的文件可以通过更新数组来阻止网站区域被处理为通用链接,如下所示: 由于系统会按照指定的顺序评估数组中的每条路径,并在找到正或负匹配时停止计算,因此应在低优先级路径之前指定高优先级路径。请注意,仅使用 URL 的路径组件进行比较。其他组件(如查询字符串或片段标识符)将被忽略。 有多种方法可以在文件中指定网站路径。例如,您可以: 创建文件后,将其上传到 HTTPS Web 服务器的根目录或子目录。该文件需要通过 HTTPS 访问(无需任何重定向)位于 或 。接下来,您需要处理应用中的通用链接。 通用链接使用两种技术:第一种是支持 Web 浏览器和本机应用程序之间切换的相同机制,第二种是共享 Web 凭据(有关这些技术的更多信息,请参阅 Web 浏览器到本机应用程序切换和共享 Web 凭据参考)。当用户点按通用链接时,iOS 会启动您的应用并向其发送一个对象,您可以查询该对象以了解您的应用是如何启动的。 要在应用中支持通用链接,请执行以下步骤: 在权利中,包括应用要作为通用链接处理的域列表。要在 Xcode 中执行此作,请打开“功能”选项卡中的“关联域”部分,然后为您的应用程序支持的每个域添加一个条目,前缀为 ,例如 。将此列表限制为不超过 20 到 30 个域。 要匹配关联域的所有子域,您可以通过在特定域的开头之前添加前缀来指定通配符(句点是必需的)。域匹配基于条目中最长的子字符串。例如,如果指定条目 和 ,则将针对较长的条目执行域的匹配。请注意,由于星号后面的句点,条目不匹配。要同时启用 和 的匹配,您需要为每个 提供单独的条目。 指定关联域后,请采用 Handoff 的方法(特别是),以便应用可以接收链接并适当地处理它。 当 iOS 在用户点击通用链接后启动您的应用程序时,您会收到一个值为 .活动对象的属性包含用户正在访问的 URL。网页 URL 属性始终包含 HTTP 或 HTTPS URL,您可以使用 API 来作 URL 的组件。 当用户轻点您处理的通用链接时,iOS 还会检查用户最近的选择,以确定是打开您的 App 还是您的网站。例如,轻点通用链接以打开 App 的用户稍后可以通过轻点状态栏中的痕迹导航按钮来选择在 Safari 浏览器中打开您的网站。用户做出此选择后,iOS 会继续在 Safari 浏览器中打开你的网站,直到用户选择通过轻点网页上智能 App 横幅中的“打开”来打开你的 App。 请务必了解,如果您的应用用于打开指向您网站的通用链接,则该链接不会在您的应用中打开。在这种情况下,iOS 会识别调用源自您的应用,因此您的应用不应将其作为通用链接进行处理。 如果您在活动对象中收到无效的 URL,请务必正常失败。若要处理不受支持的 URL,可以调用共享应用程序对象以在 Safari 中打开链接。如果无法进行此调用,请向用户显示一条错误消息,说明出了什么问题。创建和上传关联文件
apple-app-site-associationcom.apple.developer.associated-domains)apple-app-site-associationapple.comdeveloper.apple.comapple-app-site-associationapple.comwww.apple.comapple-app-site-associationapple-app-site-associationapple-app-site-associationapple-app-site-association{'applinks': {'apps': [],'details': [{'appID': '9JA89QQLNQ.com.apple.wwdc','paths': [ '/wwdc/news/', '/videos/wwdc/2015/*']},{'appID': 'ABCD1234.com.apple.wwdc','paths': [ '*' ]}]}}appsapple-app-site-associationdetailsappIDpathsappIDappIDpathsNOT Tapple-app-site-association/videos/wwdc/2010/*paths'paths': [ '/wwdc/news/', 'NOT /videos/wwdc/2010/*', '/videos/wwdc/201?/*']pathsapple-app-site-association*/wwdc/news/*/videos/wwdc/2015/*
除了用于匹配任何子字符串外,您还可以用于匹配任何单个字符。您可以在单个路径中组合两个通配符,例如 .*?/foo/*/bar/201?/mypageapple-app-site-association.well-knownhttps://https://准备应用以处理通用链接
NSUserActivityNSUserActivitycom.apple.developer.associated-domainsapplinks:applinks:www.mywebsite.com*.applinksapplinks:*.mywebsite.comapplinks:*.users.mywebsite.comemily.users.mywebsite.com*.users.mywebsite.com*.mywebsite.commywebsite.com*.mywebsite.commywebsite.comapplinksUIApplicationDelegateapplication:continueUserActivity:restorationHandler:NSUserActivityactivityTypeNSUserActivityTypeBrowsingWebwebpageURLNSURLComponentsopenURL:openURL:

