1.登录苹果开发者账号添加和配置证书:
1.1没有证书的添加证书:
关于添加Certificates, Identifiers & Profiles网上很多教程,这里就不再赘述了。
1.2开启App项目的Associated Domains功能:
苹果开发者->Account->Overview->Certificates, Identifiers & Profiles->Identifiers->选中对应的App项目的Bundle Identifier的Identifiers->开启Associated Domains功能->新建该Identifiers最新的Profiles文件->下载该Profiles文件并在Mac上安装这个文件(双击文件安装) image.png2.Xcode中添加Associated Domains:
我的Xcode版本是11.3.1版本;如果没有Associated Domains需要添加该选项:
678543.png
Associated Domains可以设置多个,格式是:applinks: + 服务器域名;Associated Domains必须已applinks:开头。
image.png
3.新建和配置后台服务器文件:
3.1新建文件:
文件名必须为apple-app-site-association的json格式文件,注意文件命不需要添加的后缀。
{
"applinks": {
"apps": [],
"details": [
{
"appID": "TeamID+Bundle Id",
"paths": ["*"]
},
{
"appID": "TeamID+Bundle Id",
"paths": ["/videos"]
},
{
"appID": "TeamID+Bundle Id",
"paths": [ "/wwdc/news/", "/videos/wwdc/2015/*"]
},
{
"appID": "TeamID+Bundle Id",
"paths": [ "/wwdc/news/", "/videos/wwdc/2015/*"]
}
]
}
}
3.2文件说明:
apps必须设置为[];
details值为一个json字典,每个应用程序一个字典。对于每个特定于应用程序的词典(上面就表示了同一个teamId下的4个不同的应用);字典中包含两个键值对:appID和paths;
appID将处理格式为的链接的应用程序的标识;命名规则:TeamID+Bundle Id;例如:V238977XUM.com.Demo.www
paths应用程序支持的网站各个部分,以路径字符串数组形式指定。只有这些指定的路径的链接,才能被app所处理, *符号写法代表了可识别域名下所有链接。
4.上传服务器:
上传 apple-app-site-association文件到域名的根目录或者.well-known子目录下;在浏览器中能打开https://域名 或 https://域名/apple-app-site-association 或 https://域名/.well-known/apple-app-site-association。
5.测试链接:
上传成功后可用苹果测试链接页,进行测试该设置是否生效。链接见文档最后一项。
image.png
6.App工程处理代码:
func application(_ application: UIApplication, continue userActivity: NSUserActivity, restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void) -> Bool {
switch userActivity.activityType {
case NSUserActivityTypeBrowsingWeb: do {
let webpageURL = userActivity.webpageURL
let host = webpageURL?.host
if host == "apple..com" { // Universal Links跳转
let urlCom = URLComponents.init(string: webpageURL?.absoluteString ?? "")
let dic = urlCom?.queryItems
for item in queryItems ?? [] {
var params = [String : Any].init()
params[item.name] = item.value
}
}
else {
UIApplication.shared.open(webpageURL!, options: [:], completionHandler: nil)
}
}
default:
break
}
return true
}
网友评论