Flutter中uniLinks包Deep Link在真机上失效问题求助
Flutter uniLinks Deep Link真机失效排查方案
1. 检查App Links验证配置(关键)
你配置了android:autoVerify="true",这意味着必须完成App Links域名验证才能在真机生效:
- 必须在域名
payment.mlggrand.ir的.well-known目录下放置assetlinks.json文件,路径为https://payment.mlggrand.ir/.well-known/assetlinks.json - 文件内容需包含应用包名和真机签名的SHA256指纹,格式示例:
[ { "relation": ["delegate_permission/common.handle_all_urls"], "target": { "namespace": "android_app", "package_name": "com.your.app.package", "sha256_cert_fingerprints": ["AA:BB:CC:...(你的SHA256指纹)"] } } ]
- 验证方法:用adb命令测试跳转:
adb shell am start -a android.intent.action.VIEW -d "https://payment.mlggrand.ir" com.your.app.package
能直接打开应用说明验证生效,弹出应用选择框则说明验证未通过。
2. 补充普通Deep Link配置( fallback方案)
App Links验证不通过时,新增普通Deep Link配置保障基础跳转:
在AndroidManifest的MainActivity中添加一个独立的intent-filter(与现有App Links配置并存):
<intent-filter> <action android:name="android.intent.action.VIEW" /> <category android:name="android.intent.category.DEFAULT" /> <category android:name="android.intent.category.BROWSABLE" /> <!-- 自定义scheme,支持直接跳转(如 mlggrand://payment) --> <data android:scheme="mlggrand" android:host="payment" /> <!-- 兼容http/https作为普通Deep Link(无需验证) --> <data android:scheme="https" android:host="payment.mlggrand.ir" /> </intent-filter>
此配置无需域名验证,浏览器会弹出应用选择框供用户选择跳转。
3. 确认uniLinks监听逻辑正确
确保Flutter端初始化和监听代码无遗漏:
void main() async { WidgetsFlutterBinding.ensureInitialized(); // 处理应用启动时的初始链接 final initialLink = await getInitialLink(); if (initialLink != null) { handleDeepLink(initialLink); } // 监听后续的链接跳转 linkStream.listen((String? link) { if (link != null) { handleDeepLink(link); } }, onError: (error) { // 处理监听错误 }); runApp(const MyApp()); } void handleDeepLink(String link) { // 这里处理你的Deep Link业务逻辑,比如路由跳转 }
同时确保MainActivity的launchMode设置为singleTop或singleTask,避免重复创建实例:
<activity android:name=".MainActivity" android:launchMode="singleTop" ...>
4. 核对真机签名指纹
模拟器使用debug签名,真机若用release包,签名指纹与debug不同:
- 获取release签名SHA256:
keytool -list -v -keystore /path/to/your/release.keystore -alias your_alias
输入密钥库密码后,复制输出中的SHA256值,替换到assetlinks.json中。
5. 浏览器跳转测试注意事项
- 避免直接在浏览器地址栏输入链接,改为点击网页中的链接(部分浏览器地址栏输入会优先打开网页);
- 测试不同浏览器(如Chrome、Firefox),部分小众浏览器对Deep Link支持不佳;
- 若浏览器仍不触发跳转,检查系统应用默认设置,确认你的应用已关联该域名。
内容的提问来源于stack exchange,提问作者Morteza Lotfi G
相关产品推荐
相关产品推荐

