简介
Universal Links(又称App Links)是通过https链接来实现打开app并传递参数的一套机制,与之前的URL Scheme相比,具有更安全、功能更全面、兼容性更好等优势
iOS如何配置Universal Links
- 开启项目的associated domains功能。开发者中心 → Certificates, Identifiers & Profiles → Identifiers → 相应App Id的Capabilities → 勾选Associated Domains
- 在项目里配置applinks,即本app支持的universal links域名。工程的Target → Signing & Capabilities → Associated Domains → +号 → 输入applinks:www.example.com
- 在以上域名的根目录或者.well-known目录下,放置一个名为apple-app-site-association的json文件,该文件里定义了要打开的url的规则
- 在AppDelegate中实现相应的回调方法,
func application(_ application: UIApplication, continue userActivity: NSUserActivity, restorationHandler: @escaping ([UIUserActivityRestoring]?) → Void)→ Bool
Universal Links工作流程和与URL Scheme的对比
Universal Links是一个四方的鉴权流程,包括调用者、我方app、apple、我方服务器,和以前使用的URL Scheme相比,多出了apple和我方服务器的角色,来确保调用的规范和安全。
具体流程为:
- 安装或者更新app时,apple会去我们配置的域名下载apple-app-site-association文件。该文件不直接配置在项目里,而是只配置域名然后apple去自行下载,可以确保apple-app-site-association文件不会被客户端伪造。相比使用URL Scheme是可以随便伪造的,为了保证安全,一般都得自己再加一个接口签名
- 某个app或者网页尝试打开https链接时,apple检查该URL的域名是否匹配我方app申明的applinks,如果是,再去匹配apple-app-site-association中定义的appID和paths,如果可以匹配会调起app,否则通过safari打开该链接。我们可以为该链接配置H5页面来提示引导用户下载我们的app。相比使用URL Scheme,如果用户没有安装我们的app,我们将无法做任何后续的引导
- 在回调方法中,从
userActivity.webpageURL
拿到调起我们app URL,通过其path或者parameters来处理后续的业务
Universal Links无法打开app?
检查以下check list
- apple-app-site-association文件不要带json或者其他任何后缀
- 去域名根目录或者.well-known看是否能下载到apple-app-site-association
- apple-app-site-association必须是合法的json
- apple-app-site-association中的appID要带team id的前缀,paths前面要带/
- 项目里配置的applinks,只能包括域名,不要在后面加path。如果要支持多个配置,可以使用多个域名或者子域;也可以在apple-app-site-association文件中通过path进行区分
- h5唤起Universal Links必须要跨域,在app尝试的时候,可以使用"Notes",编辑链接后点击看是否有 Open in “XXX” 的选项
- 一般情况下,Entitlements File会自动生成并配置好applinks,但是还是应该检查一下文件内容和路径
- 尝试卸载安装app,苹果在安装app时会去下载apple-app-site-association