iOS的UniversalLink的开发
在iOS 9之前,我们从外部启动App都是通过URL scheme的方式进行跳转,开发者通过配置info.plist文件中的 URL Types 可以轻松实现跳转,而且现在苹果还对这种跳转的方式加了一个提示框:“是否打开XXX”。
最近在做UniversalLink的开发过程中,遇到了一些坑,总结一下开发流程
1、打开Associated Domains服务
登录开发者账号,在Identifiers下AppIDs找到自己的App ID,编辑打开Associated Domains服务。
2、在Xcode中开启Associated Domains服务
找到工程的Capabilities -> Associated Domains,打开此功能,在Domains中添加跳转域名,域名的格式为:
注意事项:
(1)你的服务器必须支持SSL;
(2)Domains可以添加多个;
(3)Domains必须以 applinks: 开头;
3、配置 apple-app-site-association 文件
当我们的App在设备上第一次运行时,如果支持Associated Domains功能,那么iOS会自动去GET定义的Domain下的apple-app-site-association文件。
官网链接:https://developer.apple.com/library/content/documentation/General/Conceptual/AppSearch/UniversalLinks.html#//apple_ref/doc/uid/TP40016308-CH12-SW1
注意事项:
(1)apps项必须对应一个空的数组,details项对应一个字典的数组,其中appID对应项由前缀和ID两部分组成,可以在developer.apple.com中的Identifiers→AppIDs中点击对应的App ID查看。
(2)paths对应域名中的path,用于过滤可以跳转到App的链接,支持通配符‘*’,‘?’以及‘NOT’进行匹配,匹配的优先级是从左至右依次降低。
(3)把配置好的json文件上传到服务器中该域名的根目录下,也就是说,我们可以用GET请求可以获取到这个apple-app-association文件。
(4) 需要留意iOS会先请求 https://domain.com/.well-known/apple-app-site-association
4、Xcode代码处理
(1)apple-app-site-association不需要.json后缀。
(2)如果要对没有path的域名进行支持(如:www.163.com),在json文件的paths中用通配符’*’是不行的,需要在paths数组中加入’/’进行匹配。
(3)对json文件的请求仅在App第一次启动或者更新版本时进行,如果此时网络连接出了问题apple会缓存请求,等有网的时候再去请求,而实际测试抓包并没有请求故通用连接会失效。
(4)paths匹配的优先级是从左至右依次降低,但需要明确,否则会出问题。比如"paths":[ "NOT /together/",""],在IOS9.2上path为/together/*都不会跳到App,但是在IOS9.0上会跳到。
(5)从iOS 9.2开始,在相同的domain内Universal Links是不work的,必须要跨域才生效,必须要跨域才生效,必须要跨域才生效。(这个是我遇到最大的坑。一只没注意这个,所以费了一番周折)。