Flutter使用uni_links实现深度链接遇Activity解析错误求助
深度链接「无法解析Intent」问题排查方案
1. 先确认adb测试命令正确性
确保使用的命令格式正确,替换成你的包名和深度链接:
adb shell am start -W -a android.intent.action.VIEW -d "https://your-domain.com/user/123" com.your.app.package
- 重点检查:包名是否和
AndroidManifest.xml里的package属性完全一致;链接是否和intent-filter中配置的data规则匹配。
2. 校验AndroidManifest.xml的intent-filter配置
Deep Links配置示例(自定义scheme)
确保配置在主MainActivity内:
<intent-filter> <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="yourapp" /> <data android:host="profile" /> </intent-filter>
App Links配置示例(HTTPS scheme)
必须包含android:autoVerify="true",且data规则匹配你的域名:
<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="your-domain.com" android:pathPrefix="/user/" /> </intent-filter>
- 注意:不要把多个intent-filter的规则混写,分开配置Deep Links和App Links。
3. 验证assetlinks.json的有效性
- 确保文件放在域名的
.well-known目录下,访问路径应为:https://your-domain.com/.well-known/assetlinks.json - 文件内容必须包含正确的包名和SHA256指纹(区分debug和release证书),示例:
[ { "relation": ["delegate_permission/common.handle_all_urls"], "target": { "namespace": "android_app", "package_name": "com.your.app.package", "sha256_cert_fingerprints": ["AA:BB:CC:..."] } } ]
- 可以用Android Studio的「App Links Assistant」工具(Tools > App Links Assistant)来验证文件是否符合要求,以及域名验证状态。
4. 检查Flutter端的链接处理逻辑
- 确保
uni_links的初始化代码正确,同时监听初始链接和实时链接:
Future<void> initUniLinks() async { // 处理初始启动链接 final initialUri = await getInitialUri(); if (initialUri != null) { _handleUri(initialUri); } // 处理后续传入的链接 uriLinkStream.listen((Uri? uri) { if (uri != null) { _handleUri(uri); } }, onError: (err) { // 处理错误 }); } void _handleUri(Uri uri) { // 交给routemaster处理路由 Routemaster.of(context).push(uri.path); }
- 确认routemaster的路由规则匹配链接路径,比如链接是
/user/123,路由配置要对应:
final routes = RouteMap( routes: { '/user/:id': (routeData) => UserProfilePage(id: routeData.pathParameters['id']!), }, );
5. 其他排查点
- 测试设备需为Android 6.0(API 23)及以上,App Links才会生效;
- 如果是debug包,确保assetlinks.json中使用的是debug证书的SHA256指纹(可通过
keytool -list -v -keystore ~/.android/debug.keystore -alias androiddebugkey获取); - 检查是否有其他Activity配置了相同的scheme/host规则,导致系统无法确定启动目标;
- 先用自定义scheme的Deep Links测试(比如
yourapp://profile/123),如果能正常启动,说明问题出在App Links的域名验证环节。
内容的提问来源于stack exchange,提问作者abhi jain
相关产品推荐
相关产品推荐

