Universal Link是苹果在iOS 9提供的一种通过https从App外部返回、打开当前App的方法,如果配置了Universal Link,当用户点击了Universal Link,或者在App打开微信、QQ后返回时(如分享、支付),会根据配置的链接重定向到对应App,但如果未配置,则会通过浏览器打开。在iOS 9
之前,使用的是URL Schemes
来从外部对App进行跳转。
1、开发者中心配置:在Certificates, Identifiers & ProfilesIdentifiers一栏中找到对应App的Bundle ID,点击对应的Bundle ID进行编辑,勾选Associated Domains一栏,然后保存。
2、配置apple-app-site-association文件
创建一个内容如下的json格式的文件,首先创建一个没有后缀名的文件,不要手动去除后缀名,这个文件名必须为apple-app-site-association,切记没有后缀名,可通过在终端输入命令:vim apple-app-site-association 创建文件,文件内容可如下:
{
"applinks": {
"apps": [
],
"details": [
{
"appID": "WQ8TNCB73.com.universallink.demo",
"paths": [
"*",
"/*",
"/app/*",
"/qq_conn/123/*"
]
}
]
}
}
注意:
appID:组成方式是 Team ID
.APP
Bundle ID。Team ID登陆开发者中心,在Account ->Membership可看到paths:设定app支持的路径列表,"*"的写法代表了可识别域名下所有链接,/app/*是微信路径,/qq_conn/123/是QQ路径,123为QQ互联平台appID。
json文件编辑好后上传该文件到后台服务器根目录下或者.well-known目录下,上传完后,根据如下:www.xxx.com/apple-app-site-association路径在浏览器访问一下(www.xxx.com为服务器域名根目录),当在浏览器中输入这个文件链接后,应该是直接下载apple-app-site-association文件。
3、Xcode 工程配置
在项目里添加Associated Domains:targets->Signing&Capabilites->+Capability->Associated Domains,添加后,在其中的Domains中填入的是存放apple-app-site-association文件的服务器域名,必须以applinks:为前缀,后面接服务器域名,不需要https,如下:
配置好后,可以在苹果提供的网页来验证我们编写的这个apple-app-site-association是否合法有效,进入验证网址输入域名进行验证,配置成功后一般可搜索出app对应信息,有时我们会在最后一行看到如下Error:
以上信息提示 Error no apps with domain entitlements 是因为app还未在App Store上发布。
4、可以在手机备忘录上输入配置的domains,长按该链接,如果出现在’XXX’中打开,则表示成功
或是将要测试的网址在Safari
中打开,在出现的网页上方下滑,可以看到有在”XX”应用中打开:(注意:在Google浏览器中下拉不会出现)
5、最后,在AppDelegate中实现如下方法,对通过Universal Link方式打开app进行处理:
- (BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void(^)(NSArray<id<UIUserActivityRestoring>> * __nullable restorableObjects))restorationHandler {
if (![[UMSocialManager defaultManager] handleUniversalLink:userActivity options:nil]) {
// 其他SDK的回调
}
return YES;
}
另外,在微信开放平台配置Universal Link只需要配置成:https://www.xxx.com/的格式,以/结尾,QQ互联平台配置成https://www.xxx.com,QQ互联平台会自动拼接上/qq_conn/123/