uni-app中Universal Links和App Links配置不生效的常见原因包括:服务端文件路径/类型/状态码错误、appID或签名指纹与证书不匹配、Xcode或AndroidManifest配置遗漏、未用正式证书打包、测试方式不当(如Safari粘贴或Chrome地址栏输入)及CDN缓存问题。
uni-app 里 Universal Links 配置不生效,常见原因是什么
ios 的 universal links 不是加个域名就自动能跳转的,它依赖服务端托管的 apple-app-site-association 文件、app 内 bundle id 和关联域名完全匹配、xcode 中开启 associated domains,三者缺一不可。
- 服务端文件必须放在
https://yourdomain.com/.well-known/apple-app-site-association,且不能带.json后缀,HTTP 状态码必须是 200,Content-Type 必须是application/json(Nginx/Apache 常漏配) - 文件内容里的
applinks数组中appID格式必须为TEAMID.BUNDLEID,和 Xcode 中的 Bundle Identifier 严格一致(大小写敏感) - Xcode 的
Signing & Capabilities → Associated Domains里要添加applinks:yourdomain.com,不能写https://或带路径 - 真机调试时,必须用正式证书打包(Development Certificate 不支持),且设备系统需 ≥ iOS 9
Android App Links 在 uni-app 里为什么点链接没打开 App
Android 的 Android App Links 比 Intent Filter 更严格,它要求服务端提供数字签名验证,否则降级为普通 deep link,容易被浏览器拦截或跳到网页。
- 服务端必须在
https://yourdomain.com/.well-known/assetlinks.json提供签名声明,且该文件可被公开 GET 访问(禁止 301/302 重定向、禁止 require login) -
assetlinks.json中的sha256_cert_fingerprints必须是你发布 APK/AAB 所用 keystore 的签名指纹(Debug 和 Release 签名不同,常误用 debug.keystore) - AndroidManifest.xml 中的 intent-filter 必须同时满足:有
android:autoVerify="true"、scheme 为https、host 与 assetlinks.json 中一致、不含 pathPattern(或精确匹配) - 首次安装后需手动触发验证:
adb shell pm verify-app-links --re-verify your.package.name,否则系统不会信任该关联
uni-app 编译后如何监听并处理唤起参数
无论是 Universal Links 还是 App Links,最终都会触发 App 启动或前台唤醒,uni-app 通过 onLaunch 和 onShow 生命周期接收参数,但行为有差异。
- iOS
Universal Links一定会走onLaunch(冷启)或onShow(热启),参数在options的url字段里,格式如https://yourdomain.com/path?k=v - Android
App Links同样走这两个生命周期,但部分旧版 Android 或定制 ROM 可能 fallback 到 Intent 的extra,此时url可能为空,需额外检查options.referrer或原生层透传字段 - 务必在
onShow里做完整参数解析,因为用户切后台再切回时也可能携带新链接(尤其微信内点击跳转) - 不要依赖
getCurrentPages()在 onLaunch 里取首页,此时页面栈可能为空;统一用uni.navigateTo({ url: decodeURIComponent(options.url) })做路由分发
测试和上线前最容易忽略的三个细节
配置看似全对,但线上仍失败,大概率卡在这几个“隐形关卡”上。
- CDN 缓存了错误的
apple-app-site-association或assetlinks.json:强制刷新 CDN 缓存,或临时关闭 CDN 直连源站验证 HTTP 响应头和 body - iOS 测试时用了 Safari 复制粘贴 URL:Safari 默认不触发 Universal Links,必须从邮件、信息、备忘录等支持的 App 中点击,或用
ShortcutsApp 新建一个“打开 URL”动作来模拟 - Android 测试时用了 Chrome 地址栏输入:Chrome 地址栏输入会走普通导航,不是 App Links;必须用系统短信、Gmail、或桌面快捷方式点击才触发验证流程
Universal Links 和 App Links 的验证逻辑都在系统层,一旦失败不会报错,只会静默降级。上线前务必用真实设备 + 正式包 + 线上域名走一遍全链路,别信模拟器和 localhost。










