什么是通用链接?
通过唯一的网址, 就可以链接一个特定的视图到你的 APP 里面, 不需要特别的 schema 通用链接是一种能够方便的通过传统 HTTP 链接来启动 APP, 使 用相同的网址打开网站和 APP。当你的应用支持通用链接,iOS9 之后 , 用户可以点击一个链接跳转到你的网站,并获得无缝重定向到您安装的应用程序,而无需通过 Safari 浏览器。如果你的应用不支持的话,点击链接将会用 Safari 来打开。。试想一下 Twitter 使用了通用链接, 那么你每在 twitter.com 点击一个链接, 你的 iOS 设备都会在 Twitter 里面自动打开这个页面, 而不是当你没有安装时转到普通的网页。这个用户体验是顺畅的, 最重要的是用户不会失去上下文(跳到 APP 后 Safari 上不再留下空标签)。
通用链接的优点
通用链接比自定义的URL链接有几处尤为突出的好处,具体来说,通用链接
独特性:与自定义的URL链接相比,通用链接不能被其他的应用程序所访问,因为
1:它们使用的是标准的HTTP 或 HTTPS 链接到你的网站。
安全性:当用户安装应用程序,iOS会检查您已经上传到web服务器文件,以确
2:保您的网站允许你的应用程序能打开代表它的URL 文件,只要你创建并且上传该文件,那么你的应用和服务器之间的关联是安全的。灵活性:当你的应用程序没有被安装的时候,通用链接照样能够工作。
3:当用户没有
安装你的应用程序,点击该链接,将会以用户所期望的以Safari的形式访问。
简单性:通用链接既能支持你的网站,又能支持你的应用
私有性:其他的应用程序能和你的应用程序通信,不管你的应用是否被安装。
准备使用通用链接
实现通用链接不难, 但首先必须遵守一些先决条件。如下:
有一个注册的域名
通过 SSL 访问域名
支持上传一个 JSON 文件到你的域名
至少 iOS 9 beta 2 版本 [下载],这很重要,
因为如果是之前的测试版本你需要做额外的操作。
至少 Xcode 7 beta 2
如果你都有了, 那就来按照下面3个步骤来做吧。
1.开启 Associated Domains 域:
进入苹果Apple Developer --- Member Center - Certificates, Identifiers & Profiles – Identifiers - App IDs –Edit 然后开启打钩 Associated Domains 后保存。
image description
2.添加域名到 Capabilities
首先, 你必须在 Xcode 的 capabilities 里 添加你的 APP 域名, 必须用 applinks: 前置它:还添加一些你可能拥有的子域和扩展(www.domain.com, news.domain.com 等等)。
用 applinks: 前缀添加所有域名, 同时不要忘了包含所有可能需要的子域名用applinks: 前缀添加所有域名, 同时不要忘了包含所有可能需要的子域名
这将使你的 APP 从你的域名请求一个特殊的 JSON 文件 apple-app-site-association。当你第一次启动 APP,它会从 https://domain.com/apple-app-site-association 下载这个文件。跳到下个步骤来了解如何构建这个文件。
3.上传 apple-app-site-association 文件
该文件必须存在且为了安全原因可使用 SSL 通过 GET 请求访问到。你可以打开一个文本编辑器然后写一个这样的简单 JSON 格式:
{
"applinks": {
"apps": [],
"details": [
{
"appID": "L2LYHXGC7E.com.domain.Appr",
"paths": [ "*" ,"/","/archives/","/archives/*"]
},
{
"appID": "ABCD1234.com.apple.wwdc",
"paths": [ "*" ]
}
]
}
}
最后, 上传这个文件到你的域名根目录。如果你打开 https://domain.com/apple-app-site-association 可以看到你的文件, 我看到网上一部分人说可以打开苹果的这个网址检测apple-app-site-association是否是有效,在我部署完以上步骤后测试下最后一项Link to Application也是无效的但在我做完所有步骤后发现已经实现了本文要实现的功能,也就是说具体效果还是要以自己测试为准。那么你就可以继续下一步了。
注意事项(1)
1, paths 路径是大小写敏感的
2, paths 内容可明确哪些通用链接需要被处理,哪些不需要
3, NOT 使用:为了明确指出不被处理的链接,可增加 “NOT”在链接前面
例 如 "paths": [ "/wwdc/news/", "NOT /videos/wwdc/2010/", "/videos/wwdc/201?/"]
4, 你可以使用 * 明确所有的网页
5, 也可以使用一个明确的的 URL,例如 /wwdc/news/
6, 也可以追加 * 到你的 URL ,例如 /videos/wwdc/2015/* 也可以使用 * 来匹配任何字符,使用 ? 来匹配一个字符,可以在路径 中使用这种混搭的形式, 例如 /foo/*/bar/201?/mypage
注意事项(2)
1, “appID”组成部分:TeamID + BundleId TeamID
2, BundleId 一定要和 APP 的 BundleId 一致。
3, apple-app-site-association 文件不能带后缀
4, apple-app-site-association 文件需要上传到网站根目录
5, 每一个代表着应用的 字典,必须包含一个 appID 和 paths, appID 是teamID 和 bundleID,paths 是一个字符串的数组
明确着你的应用支持的通用链接和你的应用程序不支持的通用连接内容。
下图就是 “appID”组成部分:TeamID + BundleId TeamID
image description
最后为了在 APP 里支持通用链接, 你需要在 AppDelegate 里实现相对应的逻辑
image description
附上我那个验证apple-app-site-association的截图吧
<a href="http://photozou.jp/photo/show/3167534/247236710">
<a href="http://photozou.jp/photo/show/3167534/247236710">B6B1BAB7-FBDD-4CFD-8862-9B78738787E4</a> posted by <a href="http://photozou.jp/user/top/3167534">(C)sky521</a>
效果图 在“全聚星”打开
<a href="http://photozou.jp/photo/show/3167534/247236875">
IMG_0413 </a><a href="http://photozou.jp/photo/show/3167534/247236875">IMG_0413</a> posted by <a href="http://photozou.jp/user/top/3167534">(C)sky521</a>
网友评论