iOS开发--通用链接(Universal Links)实战

什么是通用链接?

通用链接是一种能够方便的通过传统 HTTP 链接来启动 APP, 使用相同的网址打开网站和 APP。

通过唯一的网址, 就可以链接一个特定的视图到你的 APP 里面, 不需要特别的 schema 。试想一下 Twitter 使用了通用链接, 那么你每在 twitter.com 点击一个链接, 你的 iOS 设备都会在 Twitter 里面自动打开这个页面, 而不是当你没有安装时转到普通的网页。这个用户体验是顺畅的, 最重要的是用户不会失去上下文(跳到 APP 后 Safari 上不再留下空标签)。

怎么使用通用链接?

1.首先要有一套支持通用链接的证书,因此在appID的生成中勾选Associated Domains功能: 

勾选服务项

2.在你创建的工程中target-》capablities中打开Associated Domains服务。

3.创建一个json 格式的apple-app-site-associatio 文件:

{

"applinks": {

"apps": [],

"details": [

{

"appID": "HQK4UH6GG4.com.wwdc.cctvwwdc",

"paths": [ "/wwdc/news/", "/videos/wwdc/2015/*" ]

}

]

}

}

tips:

1)paths是域名下可支持跳转的链接路径(paths是区分大小写的)eg:https://domain.com/wwdc/news/  可以进入app,https://domain.com/wwdc/olds/不可以

2)appID组成部分:TeamID + BundleId; TeamID可以从苹果开发账号页面的 Account-》Membership-》Team ID

Team ID

4.上传 apple-app-site-association 文件

  首先,上传到web server主目录下 PS:自16年下半年后,apple修改了策略,从原来的/apple-app-site-association到现在的/.well-known/apple-app-site-association

 其次,web server 的主目录需要支持https

5.在工程中做配置支持和代码支持

配置支持:在第2步中的Associated Domains里 添加你的 APP 域名, 必须用 applinks: 前置。还可以添加一些你可能拥有的子域和扩展(www.domain.com, news.domain.com 等等)。

Associated Domains的域名支持

这将使你的 APP 从你的域名请求一个特殊的 JSON 文件 apple-app-site-association。当你第一次启动 APP,它会从https://domain.com/apple-app-site-association下载这个文件。

代码支持:在 AppDelegate 里实现 application(_:continueUserActivity:restorationHandler:)

-(BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void (^)(NSArray * _Nullable))restorationHandler{

//

if ([userActivity.activityType isEqualToString:NSUserActivityTypeBrowsingWeb]) {

//

NSURL *webUrl = userActivity.webpageURL;

NSLog(@"universal link URLString=%@",webUrl.absoluteString);

[[UIApplication sharedApplication] openURL:webUrl];

}

return YES;

}

当应用启动并且验证为NSUserActivityTypeBrowsingWeb时,此时可以使应用打开一个非空的URL地址,同样的你也可以做些其他的事情。

推荐阅读更多精彩内容