Android 具有应用程序链接的多个子域支持

Android 具有应用程序链接的多个子域支持,android,subdomain,intentfilter,deep-linking,applinks,Android,Subdomain,Intentfilter,Deep Linking,Applinks,我一直在阅读支持android应用程序链接的文档,我的应用程序支持的网站与子域一起工作,但子域太多,它们是动态构建的。我想知道是否有一种方法可以支持许多子域,而不必在intent filter标记中指定它们 以下是来自谷歌的示例链接: 该示例位于多个子域位置的支持应用程序链接中 我认为正则表达式可以工作,但显然在定义主机时不支持它。我不想列出所有这些,因为这意味着必须在创建每个新子域的同时推出新版本 <activity ...> <intent-filter>

我一直在阅读支持android应用程序链接的文档,我的应用程序支持的网站与子域一起工作,但子域太多,它们是动态构建的。我想知道是否有一种方法可以支持许多子域,而不必在intent filter标记中指定它们

以下是来自谷歌的示例链接: 该示例位于多个子域位置的支持应用程序链接中

我认为正则表达式可以工作,但显然在定义主机时不支持它。我不想列出所有这些,因为这意味着必须在创建每个新子域的同时推出新版本

<activity ...>
    <intent-filter>
        <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" />
        <data android:host=".*.example.org" />
        <data android:pathPattern="/.*" />
    </intent-filter>
</activity>

我宁愿不使用第三方库或服务。。但是,任何对你有用的建议,如果你能理解如何使它发挥作用,我们将不胜感激

我的应用程序支持的网站与子域一起工作,但子域太多,并且是动态构建的

欢迎您为其中的一些子集(例如,在您构建应用程序时已知的应用程序链接)实施应用程序链接。您甚至可以考虑编写一个GADLE插件,可以从某个域的列表中生成适当的清单元素。 但是,在安装时会检查这些域,并且除了使用新清单发布新版本的应用程序外,没有其他方法可以添加新域

我想知道是否有一种方法可以支持许多子域,而不必在intent filter标记中指定它们

不,对不起。Android在安装时检查域并检索JSON文件

我认为正则表达式可以工作,但显然在定义主机时不支持它

您不能从正则表达式下载JSON

我不想列出所有这些,因为这意味着必须在创建每个新子域的同时推出新版本

<activity ...>
    <intent-filter>
        <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" />
        <data android:host=".*.example.org" />
        <data android:pathPattern="/.*" />
    </intent-filter>
</activity>
然后要么支持一些公共子集,要么暂时不支持应用程序链接。这是可以想象的,如果不太可能的话,谷歌将在未来为此提供更灵活的选择


更新:2019-11-08:似乎从。

起,您可以将域添加为
*.example.com
。据说通配符可以用作主机的第一个字符。因此,您可以将清单更改为如下内容:

<intent-filter . . . >
    <data android:scheme="https" />
    <data android:host="*.example.org" />
    . . .
</intent-filter>

. . .
这应该适用于子域:

  • example.org
  • www.example.org
  • anyOtherSubDomain.example.org

经过多次测试,自android 7.1(api级别25)以来支持多个子域。 在应用程序安装的早期版本中,我们遇到了以下错误:
E/HostsVerifier:验证的主机无效(*.example.org):输入主机无效。
引用自:

或者,如果使用通配符(例如*.example.com)声明主机名,则必须在根主机名(example.com)处发布assetlinks.json文件。例如,只要assetlinks.json文件发布在https://example.com/.well-known/assetlinks.json上,具有以下意图过滤器的应用程序将通过example.com(如foo.example.com)任何子名称的验证:

<application>
  <activity android:name=”MainActivity”>
    <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>
  </activity>
</application>


以前的答案似乎已经过时,Android现在确实支持主机名中的通配符。根据文档,它现在得到了支持。

正如我预期的那样。感谢您的回答,我可能最终构建了一个gradle脚本,可以生成适当的清单。因为这是我能真正支持他们的唯一途径。在安装时准备好数据是有意义的。我现在也有同样的问题@Miguel,当时有什么解决方案吗?这个答案不再有效,Vaibhav Raj从官方文档中得到的例子表明,现在支持这种方案。我不确定处理这个问题的最佳方式是什么,可能是通过@Miguel更改已接受的答案,或者只是添加一些勘误表。您的示例支持深度链接,但不支持应用程序链接(android:autoVerify=“true”)。在您的情况下,我们有以下错误:E/HostsVerifier:验证(*.example.org)的主机无效:输入主机无效。