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

Android深度链接配置中如何匹配URL的Fragment部分?

Android深度链接匹配URL Fragment的解决方案

Android系统的intent-filter不支持直接匹配URL的Fragment部分(即#后面的内容)。因为Fragment属于客户端侧的路由参数,不会被发送到服务器,Android在解析Intent的Data时也会自动忽略这部分内容,所以你用pathAdvancedPattern去匹配#开头的规则是无效的。

要实现你需要的“仅打开特定Fragment路由”的需求,可以按以下步骤处理:

1. 配置基础的深度链接Intent Filter

先配置一个能匹配目标域名所有HTTPS链接的Intent Filter,确保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="example.com" />
</intent-filter>

这里的autoVerify依然可以正常生效,因为它只验证scheme和host,不涉及Fragment部分。

2. 在App内手动校验Fragment路由

当App通过深度链接启动时,在入口Activity的onCreate或onNewIntent方法中,手动提取并校验Fragment内容:

Uri deepLinkUri = getIntent().getData();
if (deepLinkUri != null) {
    String fragment = deepLinkUri.getFragment();
    // 校验Fragment是否符合白名单规则
    if (fragment != null && fragment.startsWith("/whitelisted/")) {
        // 处理合法的深度链接路由
        navigateToWhitelistedPage(fragment);
    } else {
        // 不符合规则,跳转到浏览器打开原链接
        Intent browserIntent = new Intent(Intent.ACTION_VIEW, deepLinkUri);
        startActivity(browserIntent);
        finish();
    }
}

关键注意点

  • 无法通过Intent Filter直接过滤Fragment路由,必须在App内部做逻辑判断
  • 这种方式不会影响App Links的验证流程,因为验证只针对scheme和host
  • 如果需要更复杂的路由匹配,可以用正则表达式对Fragment内容做更精细的校验

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 06:03:20