最近项目中新增了微信登录和QQ登录功能,微信开放平台和腾讯开放平台中都要求填写Universal Link,需要在服务器上部署一下才能使用。
先来了解一下Universal Link是做什么用的,目前iOS app之间的跳转有两种方式URL Scheme和Universal Link,URL Scheme的方式会被微信屏蔽,所以只能用Universal Link。项目中如果使用到了微信或者QQ的登录、分享功能就必须要配置Universal Link。
下面是配置Universal Link的步骤:
1.创建一个文件,文件名为apple-app-site-association,不带后缀名。
2.填写文件内容如下:
{
"applinks": {
"apps": [],
"details": [
{
"appID": "123.456",
"paths": [ "*" ]
}
]
}
}
其中123替换为TeamID,TeamID查看方法如下:

456替换为app的Bundle ID,Bundle ID查看方法如下:

path中的*代表跳转时不指定具体跳转到哪一个页面
3.把填写好的文件给到公司的服务端人员,让他把文件上传到公司服务器的根目录下,注意一定要放到https域名的根目录下。
下文介绍了如何使用rancher把文件部署到服务器的根目录:
https://www.jianshu.com/p/e6b7ee9bda89
4.假如配置好的服务器地址为https://ABC.DEF.cn,那么点击如下地址:https://ABC.DEF.cn/apple-app-site-association,就会将apple-app-site-association文件直接下载下来,打开文件即可查看到之前填写好的内容。
5.进入开发者账号,找到当前项目对应的ID,点击进入,勾选Associated Domains,点击保存。

6.验证Universal Link是否配置成功,将部署好的Universal Link用手机Safari打开,下拉页面,如果出现如下界面,显示应用图标和名称,在XXX App中打开,则说明部署成功。

以上为项目实施人员需要操作的步骤,下面为iOS开发人员需要操作的步骤:
1.进入到项目里的Signing & Capabilities,找到Associated Domins,填写Universal Link,格式为applinks:ABC.DEF.cn。例如公司服务器地址为https://ABC.DEF.cn,则填写applinks:ABC.DEF.cn

2.Universal Link在代码中的使用方法:
当使用Universal Link唤醒app时,会调用AppDelagate中的如下方法:
- (BOOL)application:(UIApplication *)application continueUserActivity:(nonnull NSUserActivity *)userActivity restorationHandler:(nonnull void (^)(NSArray<id<UIUserActivityRestoring>> * _Nullable))restorationHandler{
//当使用Universal Links唤醒app时就执行这个方法。
NSLog(@"userActivity : %@",userActivity.webpageURL.description);
//在这里可以根据自己的项目需求做对应的处理
return YES;
}
网友评论