Flutter应用Deep Link调试正常但Release模式失效求解决方案
Flutter Release版本Deep Link失效解决方案
1. 确认App Links验证文件配置正确
你用了android:autoVerify="true",必须在域名根目录(https://applink-steama.web.app/.well-known/assetlinks.json)放置验证文件,内容要匹配你的Release签名证书SHA-256指纹:
[ { "relation": ["delegate_permission/common.handle_all_urls"], "target": { "namespace": "android_app", "package_name": "你的应用包名", "sha256_cert_fingerprints": ["Release签名的SHA-256指纹"] } } ]
- 调试和Release签名指纹不一样,用
keytool -list -v -keystore 你的Release密钥库路径获取正确指纹。 - 验证文件必须能通过HTTPS直接访问,不能有重定向,MIME类型得是
application/json。
2. 检查Release构建的签名配置
确保Release构建用的是正确签名密钥,在android/app/build.gradle里确认:
android { signingConfigs { release { keyAlias '你的密钥别名' keyPassword '你的密钥密码' storeFile file('你的密钥库路径.jks') storePassword '你的密钥库密码' } } buildTypes { release { signingConfig signingConfigs.release // 其他配置... } } }
签名配置错了,系统就验证不了App Links,直接跳网页。
3. 禁用ProGuard/R8对Deep Link代码的混淆
开了代码混淆可能会搞坏Flutter处理Deep Link的逻辑,在android/app/proguard-rules.pro加规则:
# Flutter Deep Link相关保护 -keep class io.flutter.app.** { *; } -keep class io.flutter.plugin.** { *; } -keep class io.flutter.util.** { *; } -keep class io.flutter.view.** { *; } -keep class io.flutter.** { *; } -keep class io.flutter.plugins.** { *; } # 保留自己写的Deep Link处理类(如果有) -keep class com.yourpackage.DeepLinkHandler { *; }
同时在build.gradle里确认混淆配置:
buildTypes { release { minifyEnabled true proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' } }
4. 确认Intent Filter的位置
把intent-filter放在MainActivity标签里,还要确保android:exported="true"开启,不然收不到外部Intent:
<activity android:name=".MainActivity" android:exported="true" android:launchMode="singleTop" android:theme="@style/LaunchTheme" android:configChanges="orientation|keyboardHidden|keyboard|screenSize|smallestScreenSize|locale|layoutDirection|fontScale|screenLayout|density|uiMode" android:hardwareAccelerated="true" android:windowSoftInputMode="adjustResize"> <!-- 你的Deep Link Intent Filter放在这里 --> <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" /> <data android:scheme="https" android:host="applink-steama.web.app" android:pathPrefix="/app" /> </intent-filter> </activity>
5. 测试Release构建的验证状态
用ADB命令查App Links验证结果:
adb shell dumpsys package domain-preferred-apps | grep applink-steama.web.app
输出里显示status: always就是验证成功,要是ask或never,就得回头查assetlinks.json和签名。
6. 清除应用默认打开方式
如果之前用户选了“始终用浏览器打开”,去系统设置→应用→你的应用→打开方式→清除默认值。
内容的提问来源于stack exchange,提问作者Ragul PR
相关产品推荐
相关产品推荐

