Android主机意图过滤器中的通配符

14

在 android:host 属性中使用通配符是可能的吗?

类似这样:

        android:host="*.site.com"
        android:pathPattern=".*"
        android:pathPrefix="/m/"
        android:scheme="http" />

甚至

        android:host="*.site.*"
        android:pathPattern=".*"
        android:pathPrefix="/m/"
        android:scheme="http" />

1
我也在尝试寻找这个问题的答案,有消息了我会告诉你。 - Joao Sousa
1个回答

22
是的。阅读了Android代码中的IntentFilter.AuthorityEntry.match()后,我发现可以在主机上放置通配符以便进行匹配,但只能匹配主机的开头部分。规则如下:

  • 在主机的第一个字符处放置*。
  • 写下主机的其余部分直到结束。

这个方法可以使用:

    android:host="*site.com"
    android:pathPattern=".*"
    android:scheme="http" />

它将捕获以下链接:

  • www.site.com
  • site.com
  • mail.site.com

另一方面,下面的不起作用

    android:host="*.site.*"
    android:pathPattern=".*"
    android:scheme="http" />

2
这样做不会捕捉到 othersite.com 吗? - axelbrz
1
这里的文档说 *.site.com 应该可以工作 - "或者,如果您使用通配符声明主机名(例如 *.example.com),则必须在根主机名上发布 assetlinks.json 文件"。 - Noitidart
你所说的根主机名是什么意思?@Noitidart 我正在尝试为3个不同的工作环境实现应用链接,即alpha.xxx.com、beta.xxx.com和gamma.xxx.com,而生产环境是xxx.com。我想在我的意图过滤器中只有一个条目适用于这些环境,我应该使用*.xxx.com还是*xxx.com?我在所有变体中都使用相同的调试密钥库,如何为所有环境生成一个通用的assetlinks json文件? - Kannan_SJD
1
没问题,我会想办法解决的.. :) 谢谢 @Noitidart - Kannan_SJD
1
这是源代码的链接:https://android.googlesource.com/platform/frameworks/base/+/483f3b06ea84440a082e21b68ec2c2e54046f5a6/core/java/android/content/IntentFilter.java 请查看第674行的match()函数。 - Uriel Frankel
显示剩余5条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接