1、对通用链接Universal Link的理解
iOS app间的跳转,目前常见的有2种方式:URL Scheme和通用链接Universal Link。
URL Scheme是可以自定义的,会被微信等屏蔽。
通用链接Universal Link不会被微信屏蔽,项目中有微信分享和QQ分享的话,就必须去配置通用链接Universal Link。
2、通用链接Universal Link的配置
A、首先要创建一个文件,注意不能带任何后缀名,且命名必须为apple-app-site-association,必须放在https域名的根目录下。
B、这个apple-app-site-association文件的内容,要是json格式的,需要的可以直接复制下面的:
{
"applinks": {
"apps": [],
"details": [
{
"appID": "123.456",
"paths": [ "*" ]
}
]
}
}
其中123请替换为开发者账号的teamid,456请替换为你的项目Bundle ID(注意中间是有个点的)。
path这里的 "*",可以理解为一个全路径,也就是跳转时不做具体指定跳转到哪一个界面。
文件配置好之后,给到你们公司的服务端,让他上传到服务器的根目录下,然后把地址给到你,如我司服务器地址是https://ABC.DEF.cn,那么后台给到我的就是https://ABC.DEF.cn/apple-app-site-association,当我点击这个地址,就会直接将apple-app-site-association文件下载下来,双击可打开查看内容。
C、进到开发者账号,找到你项目对应的ID,点进去,勾选上Associated Domains,如图所示:

D、进到你项目的Signing & Capabilities ,找到Associated Domins ,去填写Domins。
这个地址怎么填呢?坑来了!!
很多其他的讲Universal Link的博客都告诉你需要以applinks开头,然后就没有然后了。我当时就是这个地方没注意,配错了,导致卡了很久。
正确的填写内容应该是:applinks:ABC.DEF.cn
这个ABC.DEF.cn就是我们在前面讲到的,公司的服务器地址https://ABC.DEF.cn。
也就是说,如果公司服务器地址为https://ABC.DEF.cn,那么Domians应该填入的就是applinks:ABC.DEF.cn。
//不明白可以随时私我
到这一步,通用链接Universal Link就配置好啦!!
既然配置的工作我们都做好啦,那么配置的对不对呢,也是有方法可以验证的。
3、验证通用链接Universal Link是否配置成功
打开Safari,输入地址https://ABC.DEF.cn/后点击前往,若看到下面这个界面:

就说明配置已经成功啦!
接下来见证一下奇迹吧!用手指将界面往下滑,就会看到:

“在XXX”App中打开,就能看到我们项目的icon和名称了,到这一步,说明验证成功了我们刚刚配置的通用链接是木有毛病的!
4、通用链接Universal Link的代码调用
当使用Universal Links唤醒app时会走到App Delegate里的这个方法:
- (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;
}
网友评论