33

WWDC2019:What's New in Universal Links

 5 years ago
source link: https://www.tuicool.com/articles/QzmMrur
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

WWDC2019 Session 717 : What’s New in Universal Links

上面是 session 视频原 link ,整个视频不长,也就 20min

视频脉络

  • OverView 总览
  • Configuring Your Web Server 配置网络服务
  • Configuring Your App 配置应用
  • BestPractice 最佳实践

OverView 总览

Universal Link 的基本运作机制

  • 通过在 XCode 的 App 配置中配置了相关信息以及安全域名指定
  • 通过在 Https only 的安全域名上部署一个配置 json ,包含证丰富的 website 与 app 的链接信息
  • 建立起了安全又有效的 website 与 app 的握手机制
  • 实现 website 的 url 与 app 的直接联动

相对于自定义的 schemes 来说 Universal Link 能带给你更安全更流畅的体验

补充:schemes 上最令人诟病的就是 app 劫持,很多 app 会冒充注册知名大厂的 app scheme 从而拦截调常规的大厂 scheme 唤起,这一点在 Universal Link 就能很好的避免

What’s new ? 新特性

Universal Link 之前只支持 iOS tvOS 平台,现在全面登录到 macOS 平台上了,无论你是用 UIKit 还是 AppKit 开发的 Mac App 都可以使用 Universal Link

Configuring Your Web Server 配置网络服务

  • 必须支持 https:

必须是正规证书,不能使用自定义证书

  • 添加 apple-app-site-association file:

当 app 安装到设备的时候,会从配置域名上下载这个 json file 到本地,从而根据配置生效相关的功能。并且设备上下载的这个 json file 会不定期的更新

笔者注 1:这个 json file 不仅仅可以支持 Universal Link ,关于跨设备联动 Hand off 等功能也是依赖这个 json file

笔者注 2: 亲测过,app 发布版本更新的时候也会触发 json file 的更新

  • apple-app-site-association file 在域名下的位置

必须是 https://your-domain/.well-known/apple-app-site-association 这个路径,其他路径无法生效

笔者注 3:以前要求必须是域名根目录下,也就是 https://your-domain/apple-app-site-association ,这次看起来有所更改

笔者注 4:苹果曾经讨论过必须要对 json file 签名,但现在不再需要签名这一步了

What’s new ? 新特性

apple-app-site-association file 的写法变更

2qYBJbE.jpg!web

上图是用知乎的 apple-app-site-association file 的老写法示例

YfeaAbB.jpg!web

这是新的写法,支持了更多更强的配置能力

  • apps 这个字段只有在 iOS 上有用,tvOS/macOS 这个字段可以忽略
  • details 字段结构大幅度变化
    • 以前是字典 appID 为 Key,现在是数组,并且支持 appIDs 这样的 key,可以一套配置适配多个 appID,大幅度减少工作量
    • 新增 components 字段,可以进一步约束 universal link 的生效条件
      • 可以通过 / 来配置支持的 path 格式条件
      • 可以通过 # 来配置支持的锚点条件
      • 可以通过 ? 来配置支持的字段条件
      • exclude 是排除字段,符合这个条件的 universal link 不生效

ZZZv2ia.jpg!web

视频中还有更详细的 components 字段配置说明,左边是 components 配置,右边是匹配的 url 格式

More Tips 服务配置建议

  • URL 使用 ASCII 编码

因为在 URL 中会使用很多符号诸如 # ?% 要使用 ASCII 编码

  • 减少 apple-app-site-association file 的大小

减少大小有助于在拥堵的网络条件下,更顺畅的生效 universal link。如果你的应用面向不通的国家,针对不同的国家有不同的配置文件,可以通过国家标记符来分别配置,从而让用户只下载最精简的 json file

Configuring Your App 配置应用

XCode 有了全新的 Universal Link 配置页面,不过本质上还只是一个 XML 配置文件

UFFNz2f.jpg!web

  • 支持配置子域名
  • 支持配置父域名(子域名优先)
  • 支持配置特殊字符的域名,但必须 Punycode 编码

J7b22mq.jpg!web

在支持 macOS 的情况下,appdelegate 的 universal link 的处理也是这个 delegate,区别只是 UIApplication 变为 NSApplication

由于这个 delegate 会由很多其他的快捷方式触发,不仅仅由 universal link 触发,所以通过 NSUserActivityTypeBrowsingWeb 来判断来源

剩下的就是标准的 url 处理了

What’s new ? 新特性

macOS 下 universal link 的差异

  • 默认打开网页,会提示用户是否需要打开app
  • 远程登录下无法生效
  • 唤起开发者签名 app 优先级大于唤起 appstore 签名 app

在 mac app 中打开一个 universal link

Uvmqq2b.jpg!web

BestPractice 最佳实践

  • 处理好失败 Fail Gracefully

universal link 生效的时候,请小心的处理好各种数据,传参等原因导致的错误

  • 使用 Smart Banner

网页中的 Smart Banner 可以有效的引导未安装 app 的用户前往下载,已安装 app 的用户就可以顺畅使用 universal link

  • 给苹果反馈

如果你有更多对 universal link 的建议,欢迎反馈

PS: 我以前写过的一篇 UniversalLink 的部署实践:

Universal Link 部署采坑记


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK