美文网首页iOS开发
iOS Universal Link 通用链接

iOS Universal Link 通用链接

作者: NanNan | 来源:发表于2019-09-26 11:24 被阅读0次
使用场景

通过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

相关文章

网友评论

    本文标题:iOS Universal Link 通用链接

    本文链接:https://www.haomeiwen.com/subject/pmswuctx.html