You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter:如何配置仅通过含Fragment的链接唤起应用?

解决Android深度链接过滤Fragment的问题

嘿,我懂你的困扰——本来只想让带#/app fragment的链接唤起应用,结果现在只要是https://*.name的链接都能触发,完全没达到预期。这其实是因为你对AndroidManifest里的android:fragment属性理解错啦,它根本不是用来过滤URL中#后面的fragment部分的!

问题根源

Android的<intent-filter>里的<data>标签的android:fragment属性,作用是指定启动Activity时要加载的Fragment实例,和URL里#后的内容没有半毛钱关系。所以你之前的配置相当于没做任何fragment过滤,只要是符合scheme和host的链接,都会触发这个intent-filter唤起应用。

正确的解决方案

我们换个思路:先让所有符合https://*.name的链接都能唤起应用,再在代码层面判断链接是否包含目标fragment,决定是否执行对应唤起逻辑。

1. 修正AndroidManifest配置

删掉<data>标签里的android:fragment="/app",修改后的配置如下:

<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="*.name" />
</intent-filter>

2. 在代码中过滤Fragment

用uni_links拿到完整链接后,判断是否包含#/app,只有符合条件的才处理唤起逻辑:

import 'package:uni_links/uni_links.dart';
import 'package:flutter/services.dart';

// 初始化深度链接监听
Future<void> initDeepLinkListener() async {
  try {
    // 处理应用冷启动时的初始链接
    final initialLink = await getInitialLink();
    if (initialLink != null) {
      _processDeepLink(initialLink);
    }

    // 处理应用运行时的链接
    linkStream.listen((String? link) {
      if (link != null) {
        _processDeepLink(link);
      }
    }, onError: (error) {
      // 添加错误处理逻辑
    });
  } on PlatformException catch (e) {
    print('深度链接初始化失败: ${e.message}');
  }
}

// 处理深度链接逻辑
void _processDeepLink(String link) {
  // 检查链接是否包含目标fragment
  if (link.contains('#/app')) {
    // 执行唤起对应页面的逻辑
    print('加载带/app fragment的页面');
    // 示例:Navigator.pushNamed(context, '/target-page');
  } else {
    // 不符合条件的链接,可选择引导到首页或不处理
    print('非目标链接,不执行特定唤起逻辑');
    // 示例:Navigator.pushNamed(context, '/home');
  }
}

这样设置后,只有带有#/app的链接才会触发你想要的唤起逻辑,其他同域名链接即便能唤起应用,也会被引导到合适的页面,不会干扰你的预期流程。

内容的提问来源于stack exchange,提问作者Little Monkey

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 08:10:59