Android12+设备Capacitor应用Deep Link跳转浏览器而非应用求助
Android 12+ 下 Capacitor 应用 Deep Link 失效问题排查与解决
可能原因及对应解决方案
1. Capacitor 未正确配置 Deep Link 规则
Capacitor 有自身的 Deep Link 配置体系,仅在 AndroidManifest.xml 中添加 Intent Filter 不够,需同步在项目配置文件中声明:
- 在
capacitor.config.ts(或capacitor.config.json)中添加deepLinks配置:
export default defineConfig({ // 其他配置项 deepLinks: { android: { intentFilter: [ { action: "VIEW", categories: ["DEFAULT", "BROWSABLE"], data: { scheme: "https", host: "www.mysite.com" }, autoVerify: true } ] } } });
配置完成后执行 npx cap sync android,确保规则同步到原生项目的 MainActivity 标签下。
2. Android 12+ 包可见性限制
Android 12(API 31)及以上引入包可见性机制,未声明相关权限的应用可能无法接收浏览器发来的 Intent:
- 在
AndroidManifest.xml的<manifest>标签内添加包可见性声明:
<queries> <intent> <action android:name="android.intent.action.VIEW" /> <category android:name="android.intent.category.BROWSABLE" /> <data android:scheme="https" /> </intent> </queries>
若需临时兼容广泛场景,可添加 QUERY_ALL_PACKAGES 权限(不推荐长期使用,建议后续替换为精准声明):
<uses-permission android:name="android.permission.QUERY_ALL_PACKAGES" />
3. AutoVerify 验证失败
android:autoVerify="true" 要求域名下的 assetlinks.json 配置正确,且应用签名与文件声明一致:
- 检查
https://www.mysite.com/.well-known/assetlinks.json存在性,内容需包含应用包名和签名指纹:
[ { "relation": ["delegate_permission/common.handle_all_urls"], "target": { "namespace": "android_app", "package_name": "你的应用包名", "sha256_cert_fingerprints": ["你的应用签名SHA256指纹"] } } ]
- 确认 Capacitor 构建的应用签名与原生示例一致,debug 测试时需将 debug 签名指纹也加入文件。
- 执行
adb shell pm get-app-links --package 你的应用包名验证状态,若返回verified: false,说明验证未通过。
4. Intent Filter 位置错误
确保 Intent Filter 被添加到 MainActivity 的 <activity> 标签内,而非 SplashActivity 等其他组件。Capacitor 项目中 MainActivity 是处理 Deep Link 的核心组件,错误位置会导致 Intent 无法被正确接收。
5. Capacitor 版本兼容性问题
旧版本 Capacitor 对 Android 12+ 的 Deep Link 支持存在缺陷,建议升级到最新稳定版:
npm install @capacitor/core@latest @capacitor/android@latest npx cap sync android
6. 系统默认应用设置冲突
若之前已将浏览器设为该链接的默认处理应用,需清除默认设置:
进入设备「设置」→「应用」→ 对应浏览器 →「默认应用」→ 清除该链接类型的默认设置后重新测试。
内容的提问来源于stack exchange,提问作者Vinoy Alexander
相关产品推荐
相关产品推荐

