iOS Universal Links 深入理解与实践

一、Universal Links 简介

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

二、工作原理

1. 系统行为差异

1) Safari 浏览器中:
// 首次点击 Universal Link
- 打开对应网页
- 显示系统级 banner "在 xxx 中打开"
- 用户可选择:
  - "打开": 本次打开 App
  - "取消": 保持网页
  - "始终": 后续直接打开 App
2) 其他应用中(短信、备忘录等):
// 点击 Universal Link
- 直接打开 App
- 不显示网页
- App 直接收到回调

三、配置步骤

1. 服务端配置

需要配置 apple-app-site-association 文件:

{
    "applinks": {
        "apps": [],
        "details": [{
            "appID": "TeamID.BundleID",
            "paths": ["/app/*"]
        }]
    }
}

2. 验证配置

可通过以下链接查看配置:

https://app-site-association.cdn-apple.com/a/v1/your.domain.com

确认返回的 JSON 是否符合预期:
appIDs 正确
paths 配置合适
JSON 格式合法

3. App 配置

1) 开启 Associated Domains:
applinks:your.domain.com
2) 处理回调:
// SceneDelegate
func scene(_ scene: UIScene, continue userActivity: NSUserActivity) {
    guard userActivity.activityType == NSUserActivityTypeBrowsingWeb,
          let url = userActivity.webpageURL else {
        return
    }
    handleUniversalLink(url)
}

// AppDelegate (iOS 13 以下)
func application(_ application: UIApplication,
                continue userActivity: NSUserActivity,
                restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void) -> Bool {
    guard userActivity.activityType == NSUserActivityTypeBrowsingWeb,
          let url = userActivity.webpageURL else {
        return false
    }
    handleUniversalLink(url)
    return true
}

四、与 URL Scheme 对比

1. URL Scheme

// 配置
<key>CFBundleURLTypes</key>
<array>
    <dict>
        <key>CFBundleURLSchemes</key>
        <array>
            <string>myapp</string>
        </array>
    </dict>
</array>

优点:
配置简单
支持系统版本范围广
可自定义协议名
缺点:
不安全,易被其他 App 注册相同 scheme
总是显示确认弹窗
无法判断 App 是否安装

2. Universal Links

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

五、最佳实践

1. 两者结合使用

if #available(iOS 9.0, *) {
    // 优先使用 Universal Links
    openURL("https://your.domain.com/path")
} else {
    // URL Scheme 降级
    openURL("myapp://path")
}

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 作为降级方案
注意不同场景下的行为差异
做好配置验证和问题排查
通过这种方式,可以为用户提供最佳的应用间跳转体验。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值