Android 12/13中Flutter应用深度链接异常:跳转至浏览器而非应用
Flutter深度链接在Android 12/13直接跳转浏览器的解决方案
针对Android 12和13上深度链接直接跳转浏览器、无应用选择弹窗的问题,可按以下步骤排查解决:
1. 修正AndroidManifest.xml的Intent Filter配置
确保Activity的<intent-filter>包含android:autoVerify="true",且显式声明android:exported="true"(Android 12+强制要求),示例配置如下:
<activity android:name=".MainActivity" android:exported="true"> <intent-filter android:autoVerify="true"> <action android:name="android.intent.action.VIEW" /> <category android:name="android.intent.category.DEFAULT" /> <category android:name="android.intent.category.BROWSABLE" /> <!-- 替换为你的域名和scheme --> <data android:scheme="https" android:host="your-domain.com" /> </intent-filter> </activity>
注意:如果有多个域名,需在同一个<intent-filter>下添加多个<data>标签,或拆分多个带autoVerify的<intent-filter>。
2. 验证assetlinks.json的服务器配置
- 检查文件的Content-Type是否为
application/json:执行curl -I https://your-domain.com/.well-known/assetlinks.json,确认响应头中包含Content-Type: application/json。部分服务器默认会返回text/plain,导致系统无法识别验证文件。 - 确保文件可公开访问,无登录限制、CDN缓存拦截等情况,Android系统需要能直接获取到该文件内容。
3. 重置系统深度链接缓存
Android 12+会缓存深度链接的验证结果,需手动重置:
- 进入系统设置→应用→你的应用→默认应用→打开链接,清除已有的默认关联设置。
- 卸载并重装应用,触发系统重新验证assetlinks.json。调试版与发布版切换后,缓存的验证状态可能失效,重装能彻底重置。
4. 确认调试环境的签名匹配
- 调试时,确保运行的应用签名sha256与assetlinks.json中调试版条目一致。可通过以下命令获取调试密钥指纹:
keytool -list -v -keystore ~/.android/debug.keystore
(默认调试密钥库密码为android)
5. 采用正确的测试方式
- 避免直接在浏览器地址栏跳转链接,通过短信、备忘录等第三方应用点击测试,部分浏览器对地址栏跳转有特殊处理逻辑。
- 使用adb命令直接测试深度链接:
adb shell am start -W -a android.intent.action.VIEW -d "https://your-domain.com/test-path" com.your.package.name
若命令能直接打开应用,说明配置本身有效,问题出在系统验证或第三方应用的链接触发逻辑上。
内容的提问来源于stack exchange,提问作者Kawinda Hasith
相关产品推荐
相关产品推荐

