如何通过Flutter和Dynamic Links将Android App设为HTTPS链接默认应用?
解决Flutter Dynamic Links无法唤起应用的问题
以下是针对你遇到的问题的排查和修复步骤:
1. 修正assetlinks.json的域名匹配问题
你提到在https://example.com/.well-known/assetlinks.json托管了文件,但AndroidManifest中配置的host是mydomain.com——这两个域名必须完全一致。assetlinks.json必须部署在你要关联的域名(即mydomain.com)的.well-known目录下,否则系统无法验证你的应用与域名的关联关系。
同时确认assetlinks.json的格式和内容完全正确:
[ { "relation": ["delegate_permission/common.handle_all_urls"], "target": { "namespace": "android_app", "package_name": "你的应用包名", "sha256_cert_fingerprints": ["你的SHA256指纹"] } } ]
- 替换
你的应用包名为AndroidManifest中的package字段值 - 确保SHA256指纹与你签名应用的keystore一致(debug和release版本的指纹不同,测试时要对应)
2. 验证autoVerify的生效状态
使用ADB命令检查系统是否已验证你的应用与域名的关联:
adb shell dumpsys package domain-preferred-apps
在输出中搜索你的应用包名,查看是否存在verified:true的标记。如果是verified:false,说明验证未通过,需要:
- 检查assetlinks.json是否能被无访问限制地访问(无CDN缓存、无防火墙拦截)
- 确认域名的HTTPS证书有效(autoVerify仅支持HTTPS)
- 等待一段时间(系统可能需要数小时完成验证,尤其是首次配置)
3. 测试链接的正确方式
避免直接在浏览器地址栏输入链接(部分浏览器会强制在自身打开),改用以下方式测试:
- 在短信、备忘录等应用中点击链接
- 使用ADB命令模拟Intent唤起:
adb shell am start -a android.intent.action.VIEW -d "https://mydomain.com/path/test"
如果ADB命令能成功唤起应用,说明系统配置已生效,问题可能出在浏览器的默认行为上。
4. 检查Flutter端的Dynamic Links监听配置
如果你使用的是Firebase Dynamic Links,确保Flutter端已正确初始化并监听链接:
import 'package:firebase_dynamic_links/firebase_dynamic_links.dart'; @override void initState() { super.initState(); _initDynamicLinks(); } void _initDynamicLinks() async { final PendingDynamicLinkData? data = await FirebaseDynamicLinks.instance.getInitialLink(); final Uri? deepLink = data?.link; if (deepLink != null) { // 处理深度链接逻辑 } FirebaseDynamicLinks.instance.onLink.listen((dynamicLinkData) { final Uri? deepLink = dynamicLinkData.link; if (deepLink != null) { // 处理实时接收的链接 } }).onError((error) { // 处理错误情况 }); }
如果没有配置监听,即使应用被唤起,也无法处理链接,但这不会导致链接无法唤起应用,仅作为补充检查。
5. 其他排查点
- 确认AndroidManifest中没有其他冲突的intent-filter(比如其他activity也配置了相同的host和pathPrefix)
- 检查应用是否被系统标记为“未验证”(在应用信息的“默认应用”设置中查看是否有相关提示)
- 清除应用的缓存和数据,重新安装后测试
内容的提问来源于stack exchange,提问作者Khunt Jenish
相关产品推荐
相关产品推荐

