我一直在阅读支持Android应用程序链接的文档和我的应用程序支持的子网站工作的网站,但有太多子域,它们是动态构建的。我想知道是否有办法支持许多子域而不必在intent-filter标签中指定它们。
以下是google示例的链接:http://developer.android.com/training/app-links/index.html#request-verify 该示例位于支持应用程序链接多个子域位置。
我认为正则表达式可行,但显然在定义主机时不支持。我不想列出所有这些,因为这意味着必须在创建每个新子域时推送新版本
<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>
我不想使用第三方库或服务..但是,任何对你有用的建议都将被理解为了解如何使这项工作。
答案 0 :(得分:10)
我的应用支持的网站适用于子域名,但子域名太多而且是动态构建的
欢迎您为其中的某些子集(例如,您构建应用时已知的那些)实现应用链接。您甚至可以考虑制作一个Gradle插件,该插件可以从某个域的列表中生成相应的清单元素。
但是,在安装时会检查域名,除非通过新版本的应用程序发布新版本,否则无法添加新域名。
我想知道是否有办法支持多个子域而不必在intent-filter标记中指定它们。
不,抱歉。 Android会在安装时检查域并检索JSON文件。
我认为正则表达式可行但显然在定义主机时不支持
您无法从正则表达式下载JSON。
我不想列出所有这些内容,因为这意味着必须在创建每个新子域时推送新版本
然后要么支持一些常见的子集,要么现在不支持应用程序链接。可以想象,如果恕我直言,谷歌将来会为此提供更灵活的选择。
答案 1 :(得分:4)
或者,如果使用通配符(例如* .example.com)声明主机名,则必须在根主机名(example.com)上发布assetlinks.json文件。例如,具有以下intent过滤器的应用程序将通过example.com的任何子名称验证(例如foo.example.com),只要assetlink.json文件发布在https:/ / example.com/ .well- known / assetlinks.json:
<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现在确实支持主机名中的通配符。根据文档,现在支持它。
答案 2 :(得分:3)
您可以将自己的域名添加为*.example.com
。在the docs,据说通配符可以用作主机的第一个字符。所以你可以把清单改成这样的东西:
<intent-filter . . . >
<data android:scheme="https" />
<data android:host="*.example.org" />
. . .
</intent-filter>
这应该适用于子域:
答案 3 :(得分:2)
经过多次测试后,自Android 7.1(api level 25)以来支持多个子域。
在应用安装期间的早期版本中,我们收到此错误:E/HostsVerifier: Invalid host to verify (*.example.org):Input host is not valid.