0x0000 背景
最近项目微信 sdk 升级到最新版,要求接入Universal Links服务,这里记录一下Universal Links 调研接入详细。
0x0001 调研
Universal Links 是 iOS 9 推出的技术,如果APP支持Universal Links,那么就可以通过https链接来打开APP。
跳转官方通道。
Universal Links 特性
- Unique:不像自定义的 URL schemes,Universal Links不会被其它的APP所使用。因为它使用标准的HTTP/HTTPS链接到我们自己的往回走哪
- Secure:当用户下载APP的时候,iOS会检查你上传到web服务器的文件以确保您的网站允许您的应用程序以其名义打开网址。因为只有本人有权利创建且上传该文件到服务器,所以网站和APP的关联是安全的。
- Flexible:如果没有安装APP时Universal Links 也是可以正常使用的,当点击link时会直接在safari中打开url。
- Simple:URL 可以同时为网站和 APP 提供服务。
- Private:其他app可以与APP进行通信,不需要知道 APP是否安装。
0x0002 接入
注册域名
domain域名必须支持 HTTPS
创建并上传apple-app-site-association文件
{
"applinks": {
"apps": [],
"details": [
{
"appID": "teamID.bundleID",
"paths": [ "*" ]
},
{
"appID": "9JA89QQLNQ.com.apple.wwdc",
"paths": [ "/wwdc/news/", "/videos/wwdc/2015/*" ]
}
]
}
}
注意事项:
- apple-app-site-association 文件没有后缀,未压缩下不能超过128k
- details 可添加多个配置,同时配置多个 APP
- appID 由 teamID 和 bundleID 组成,teamID 可以从开发者网站Membership里查询,bundleID 在 XCode 中查询
- paths 限制哪些路径可以唤醒 APP ,"*"域名下全部都可以
- apple-app-site-association 放到服务器(注册域名)的根目录下,也可以放到.well-known这个子目录下
验证apple-app-site-association
- 在浏览器中输入
https://<domain>/apple-app-site-association或https://<domain>/.well-known/apple-app-site-association. 访问刚刚上传的文件 - 通过 Apple 提供的测试网站进行验证是否上传文件是否正确。传送门
APP 内配置Universal Links
- 在开发这中心配置ASSociated Domains,并重新下载 profile,如果xcode 设置为Automatically manage signing 则可跳过这一步。

- xcode 配置ASSociated Domains,格式为applinks:<domain>,如果apple-app-site-association 文件在多个域名下,可以配置多个ASSociated Domains。

- 配置完成后体统会添加对应的工程文件
entitlements可在工程文件查看刚才的配置 - 在AppDelegate中处理Universal links回调,通过userActivity获取跳转链接从而进行逻辑处理
- (BOOL)application:(UIApplication *)application continueUserActivity:(nonnull NSUserActivity *)userActivity restorationHandler:(nonnull void (^)(NSArray<id<UIUserActivityRestoring>> * _Nullable))restorationHandler { return YES; }
测试
将链接拷贝到备忘录,点击跳转是否可以打开 APP 即可。
0x0003 对比URL Scheme
URL Scheme 提供 APP间相互跳转服务以及 web跳转 APP 的服务。外部可以通过 scheme 打开指定APP。如果有两个APP 定义 scheme 一样,则按照APP 安装顺序调用先安装的 APP,
在 iOS 9 以前,我们从外部启动App都是通过URL Scheme实现跳转的。苹果添加提示框限制,这样的体验并不好,iOS 9 以后,Universal Link 完美的解决了这个问题。用户可以通过通用连接直接唤醒 APP,而不再需要其他操作。