Android 13设备上Flutter Dynamic Links无法打开,低版本正常如何修复?
针对你遇到的Dynamic Links仅在Android 13设备上失效的问题,可按以下步骤排查修复:
更新Firebase Dynamic Links插件
旧版本插件未适配Android 13的新规则,先确保pubspec.yaml中使用最新稳定版:firebase_dynamic_links: ^最新稳定版本号执行
flutter pub get完成更新。补充包可见性配置
Android 13收紧了包可见性限制,当前<queries>配置不足以支持Dynamic Links与浏览器、Firebase服务的交互,修改为:<queries> <intent> <action android:name="android.intent.action.VIEW" /> <category android:name="android.intent.category.BROWSABLE" /> <data android:scheme="https" /> </intent> <!-- 允许访问Firebase核心服务 --> <package android:name="com.google.android.gms" /> </queries>确认应用链接验证配置
你的Intent Filter已开启android:autoVerify="true",需确保域名下的/.well-known/assetlinks.json文件配置正确,该文件需关联应用的签名指纹,否则Android 11+设备会跳过应用链接验证,直接用浏览器打开链接。添加Android 13通知权限
若动态链接通过通知触发跳转,Android 13要求必须申请POST_NOTIFICATIONS权限,在AndroidManifest.xml中添加:<uses-permission android:name="android.permission.POST_NOTIFICATIONS" />同时在Flutter代码中主动请求该权限(当应用targetSdkVersion≥33时)。
检查动态链接处理逻辑
确保Flutter代码中正确监听并处理动态链接,包括冷启动时的初始链接和热启动时的实时链接:@override void initState() { super.initState(); _setupDynamicLinks(); } void _setupDynamicLinks() async { // 处理冷启动时的初始链接 final initialLink = await FirebaseDynamicLinks.instance.getInitialLink(); if (initialLink != null) { _processDeepLink(initialLink.link); } // 监听实时链接 FirebaseDynamicLinks.instance.onLink.listen((linkData) { _processDeepLink(linkData.link); }).onError((error) { // 处理链接监听错误 }); } void _processDeepLink(Uri deepLink) { // 在这里实现你的深层链接业务逻辑 }用adb命令测试Intent跳转
在Android 13设备上执行以下命令,验证Intent Filter是否生效:adb shell am start -a android.intent.action.VIEW -d "https://plone.page.link/你的测试路径" 你的应用包名如果命令能唤起应用,说明Intent Filter配置正常,问题出在Dynamic Links的服务端或插件逻辑;如果不能,重新检查Intent Filter和包可见性配置。
内容的提问来源于stack exchange,提问作者mudassar maqbool

