浅析iOS唤起APP之Universal Link(通用链接)
官方文档:https://developer.apple.com/library/archive/documentation/General/Conceptual/AppSearch/UniversalLinks.html 里有说到 Universal Links 是什么、注意点、以及如何配置的。简单来说就是:
当您支持通用链接时,iOS 用户可以点击指向您网站的链接,并无缝重定向到您安装的应用程序
大白话就是说,用户通过点击某个链接,可以直接唤起对应的app。提供这样功能的目的是为了吸引网络用户(俗称引流)。(注意url的变化,一定是用户点击造成的!使用js触发是无效的)。
1、Universal Links 如何配置

简单的来说,配置Universal Links需要涉及到两方面 - 域名服务器和app:
(1)域名服务器上要配置apple-app-site-association文件 (也被称为AASA文件)
创建apple-app-site-association文件后,将其上传到 HTTPS Web 服务器的根目录或子目录.well-known。该文件需要可通过 HTTPS 访问(无需任何重定向),地址为https:///apple-app-site-association或https:///.well-known/apple-app-site-association。接下来,您需要处理应用程序中的通用链接
即配置成以后,有3个链接要访问成功才可以:
https://你的域名.com/apple-app-site-association
https://你的域名.com/.well-known/apple-app-site-association
https://app-site-association.cdn-apple.com/a/v1/你的域名.com
最后一个链接是苹果CDN链接,可以理解为只要这个地址返回正常,就说明我们配置的AASA文件没有问题
配置指定文件:创建一个内容为json格式的文件,苹果将会在合适的时候,从我们在项目中填入的域名请求这个文件。这个文件名必须为apple-app-site-association,切记没有后缀名,文件内容大概是这样子:
{
"applinks": {
"apps": [],
"details": [
{
"appID": "****.com.apple.wwdc",
"paths": [ "/wwdc/news/"]
},
{
"appID": "****.com.apple.wwdc",
"paths": [ "*" ]
}
]
}
}
说明:appID:组成方式是 teamId.yourapp’s bundle identifier。如上面的 9JA89QQLNQ就是teamId。登陆开发者中心,在Account -> Membership里面可以找到Team ID。
paths:设定你的app支持的路径列表,只有这些指定的路径的链接,才能被app所处理。星号的写法代表了可识 别域名下所有链接。
上传指定文件:上传该文件到你的域名所对应的根目录或者.well-known目录下,这是为了苹果服务器能获取到你上传的文件(注意:存在时间差问题,需过一段时间苹果才会访问)。上传完后,自己先访问一下看看是否能够获取到,当你在浏览器中输入这个文件链接后,应该是直接下载apple-app-site-association文件。
(2)app上要在Xcode的Associated Domains里面去配置applinks
开发者中心配置:找到对应的App ID,在Application Services列表里有Associated Domains一条,把它变为Enabled就可以了。
配置App ID支持Associated Domains:


两方面都要配置好,才能正常使用Universal Links 唤起app。配置OK后,可以在钉钉、微信、safari浏览器、扫描器等里面直接通过配置的域名唤起app。
2、问题出现与调试
打开那3个链接进行调试,发现只有前个是可以正常访问的,第三个显示Not Found

在shell里面运行,可以看到该请求的详细信息查看具体原因:
curl -v https://app-site-association.cdn-apple.com/a/v1/你的域名.com
< Apple-Failure-Details: {"status":"405 Not Allowed"}
< Apple-Failure-Reason: SWCERR00101 Bad HTTP Response: 405 Method Not Allowed

浙公网安备 33010602011771号