使用场景
通过qq或者微信分享出来的H5链接,当点击H5链接的某个按钮时,要实现如下功能:
- 用户未安装APP时,跳转到AppStore引导用户安装
- 用户安装时,唤醒APP并跳转到APP某一个指定的页面。
注意⚠️:传统的URL Schema实现存在的弊端- 跳转的时候会出现提示框,“是够打开XX”,用户体验不好。
- 微信屏蔽URL Schema ,必须是出现在白名单里面才可以跳转(意味着用户无法在微信里面一键直达APP)。
而通用链接可以解决上述问题
通用链接的介绍及优点可以参考一下链接
通用链接的优点
- 安全性: 当用户安装应用程序,iOS会检查您已经上传到web服务器文件,以确 保您的网站允许你的应用程序能打开代表它的URL 文件,只要你创建并且上传该文件,那么你的应用和服务器之间的关联是安全的。
- 灵活性: 当你的应用程序没有被安装的时候,通用链接照样能够工作。当用户没有安装你的应用程序,点击该链接,将会以用户所期望的以Safari的形式访问
- 私有性: 其他的应用程序可以和你的应用程序进行通信,不管你的应用是够被安装。
- 简单性: 通用链接既能支持你的网站,又能支持你的应用。
- 独特性: 与自定义的URL链接相比,通用链接不能被其他的应用程序所访问,因为它们使用的是标准的HTTP 或 HTTPS 链接到你的网站。
通用链接实现的条件
- 有一个注册的域名
- 域名可通过 SSL 访问(应该是需要有效的证书)
- 支持上传一个 JSON 文件到域名
- 至少 iOS 9 beta 2 版本
- 至少 Xcode 7 beta 2
- 需要真机测试,模拟器不支持通用链接
- web server 需要支持 https,客户端需要通告 https 访问,并且不支持任何重定向
通用链接实现的操作步骤
-
1. 开发者账号中开启Associated Domains域:
进入苹果Apple Developer --- Member Center - Certificates, Identifiers & Profiles – Identifiers - App IDs –Edit 然后开启打钩 Associated Domains 后保存。 -
2. 添加Associated Domains域:
说明:你的 APP 域名必须用 applinks: 前置它,还添加一些你可能 拥有的子域和扩展(www.domain.com, news.domain.com 等等)。
作用:配置之后你的 APP 会自动从你的域名请求一个特殊的 JSON 文 件 apple-app-site-association。当你第一次启动 APP,它会从 https://domain.com/apple-app-site-association 下载这个文件。 -
上传 apple-app-site-association到服务器的根目录:
注意事项1 - 1 paths 路径是大小写敏感的
- 2 paths 内容可以明确哪些通用链接是需要被处理的,哪些是不需要被处理的。
- 3 NOT使用:为了明确不被处理的链接,可以增加NOT在链接前面
- 4 可以使用*明确所有的网页
- 5 可以使用一个明确的URL
- 6 可以追加到你的URL,使用匹配任何字符,使用?匹配一个字符,也可以使用和?的混搭模式。
注意事项2
- Appid的组成部分:teamId+bundleId teamId
- bundleId一定要和APP的bundleId一致
- apple-app-site-association文件不能带后缀
- apple-app-site-association文件需要上传到网站根目录。
- 每一个代表应用的字典必须包含一个appid和paths,appid是teamID和bundleId,paths是一个字符串的数组。明确着你的应用支持的通用链接和不支持的通用链接。
列子:
此处如果有截图就添加,json里面的内容。
- (BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void (^)(NSArray<id<UIUserActivityRestoring>> * _Nullable))restorationHandler {
NSString *activityTypeStr = userActivity.activityType;
if ([activityTypeStr isEqualToString:NSUserActivityTypeBrowsingWeb]) {
NSURL *webUrl = userActivity.webpageURL;
if ([webUrl.host isEqualToString:@"baidu.com"] ) {
//打开对应页面
} else {
//不能识别safari打开
[[UIApplication sharedApplication] openURL:webUrl];
}
}
}
在APP中处理通用链接
如果有截图再替换
参考资料
https://developer.apple.com/ios/download/
http://www.cocoachina.com/ios/20150902/13321.html
http://www.jianshu.com/p/c2ca5b5f391f
http://strivingboy.github.io/blog/2015/09/27/ios9
http://help.tune.com/marketing-console/ios-universal-links-with-tune/
http://stackoverflow.com/questions/33391615/ios-9-universal-links-dont-work
http://www.jackivers.me/blog/2015/9/17/list-of-universal-link-ios-9-apps