iOS Universal Links 深入明白与实践

打印 上一主题 下一主题

主题 1280|帖子 1280|积分 3840

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x
一、Universal Links 简介

Universal Links 是 Apple 在 iOS 9 引入的深度链接技术,用于建立网站和 App 之间的无缝连接。它允许用户通过点击网页链接直接打开 App 中的特定内容。
二、工作原理

1. 系统行为差异

1) Safari 欣赏器中:

  1. // 首次点击 Universal Link
  2. - 打开对应网页
  3. - 显示系统级 banner "在 xxx 中打开"
  4. - 用户可选择:
  5.   - "打开": 本次打开 App
  6.   - "取消": 保持网页
  7.   - "始终": 后续直接打开 App
复制代码
2) 其他应用中(短信、备忘录等):

  1. // 点击 Universal Link
  2. - 直接打开 App
  3. - 不显示网页
  4. - App 直接收到回调
复制代码
三、配置步骤

1. 服务端配置

需要配置 apple-app-site-association 文件:
  1. {
  2.     "applinks": {
  3.         "apps": [],
  4.         "details": [{
  5.             "appID": "TeamID.BundleID",
  6.             "paths": ["/app/*"]
  7.         }]
  8.     }
  9. }
复制代码
2. 验证配置

可通过以下链接查看配置:
  1. https://app-site-association.cdn-apple.com/a/v1/your.domain.com
复制代码
确认返回的 JSON 是否符合预期:
appIDs 正确
paths 配置合适
JSON 格式正当
3. App 配置

1) 开启 Associated Domains:

  1. applinks:your.domain.com
复制代码
2) 处置惩罚回调:

  1. // SceneDelegate
  2. func scene(_ scene: UIScene, continue userActivity: NSUserActivity) {
  3.     guard userActivity.activityType == NSUserActivityTypeBrowsingWeb,
  4.           let url = userActivity.webpageURL else {
  5.         return
  6.     }
  7.     handleUniversalLink(url)
  8. }
  9. // AppDelegate (iOS 13 以下)
  10. func application(_ application: UIApplication,
  11.                 continue userActivity: NSUserActivity,
  12.                 restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void) -> Bool {
  13.     guard userActivity.activityType == NSUserActivityTypeBrowsingWeb,
  14.           let url = userActivity.webpageURL else {
  15.         return false
  16.     }
  17.     handleUniversalLink(url)
  18.     return true
  19. }
复制代码
四、与 URL Scheme 对比

1. URL Scheme

  1. // 配置
  2. <key>CFBundleURLTypes</key>
  3. <array>
  4.     <dict>
  5.         <key>CFBundleURLSchemes</key>
  6.         <array>
  7.             <string>myapp</string>
  8.         </array>
  9.     </dict>
  10. </array>
复制代码
优点:
配置简单
支持系统版本范围广
可自界说协议名
缺点:
不安全,易被其他 App 注册相同 scheme
总是显示确认弹窗
无法判断 App 是否安装
2. Universal Links

优点:
更安全(域名唯一性)
更好的用户体验(无需确认)
支持未安装时的降级方案
可以检测 App 是否安装
缺点:
配置相对复杂
需要 HTTPS 域名
仅支持 iOS 9.0+
五、最佳实践

1. 两者联合利用

  1. if #available(iOS 9.0, *) {
  2.     // 优先使用 Universal Links
  3.     openURL("https://your.domain.com/path")
  4. } else {
  5.     // URL Scheme 降级
  6.     openURL("myapp://path")
  7. }
复制代码
2. 前端注意事项

避免自动跳转 App Store
让系统处置惩罚 Universal Links 逻辑
提供良好的降级体验
3. 常见问题排查

1. 配置验证:

查抄 apple-app-site-association 文件是否可访问
验证 JSON 格式是否正确
确认 TeamID 和 BundleID 是否匹配
2. 行为验证:

Safari 中测试系统 banner 显示
其他应用中测试直接跳转
确认 App 是否正确接收回调
六、总结

Universal Links 是一种优秀的深度链接方案,通过合理配置和利用,可以为用户提供流通的跨 App 跳转体验。在实际应用中:
优先利用 Universal Links
生存 URL Scheme 作为降级方案
注意不同场景下的行为差异
做好配置验证和问题排查
通过这种方式,可以为用户提供最佳的应用间跳转体验。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

梦应逍遥

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表