App Links 的多子域支持
Multiple subdomain support with App Links
我一直在阅读支持 android 应用程序 link 的文档,我的应用程序支持的网站使用子域,但子域太多,而且它们是动态构建的。我想知道是否有一种方法可以支持许多子域而不必在 intent-filter 标记中全部指定它们。
这是 google 中示例的 link:http://developer.android.com/training/app-links/index.html#request-verify
该示例位于支持应用程序 linking for multiple subdomains 位置。
我认为正则表达式可以工作,但显然在定义主机时不支持它。我不想列出所有这些,因为这意味着必须为每个创建的新子域推送一个新版本
<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>
我不希望使用第三方库或服务。但是任何对您有用的建议都将不胜感激,以了解如何使这项工作发挥作用。
the website my app supports works with subdomains but there's too many subdomains and they are built dynamically
欢迎您为其中的某些子集(例如,在您构建应用程序时已知的链接)实现应用程序链接。您甚至可以考虑编写一个 Gradle 插件,它可以从某处的域列表中生成适当的清单元素。
但是,域会在安装时进行检查,并且无法添加新域,除非使用新清单发布新版本的应用程序。
I was wondering if there is a way to support many subdomains without having to specifiy them all in the intent-filter tag.
不,对不起。 Android 检查域并在安装时检索 JSON 文件。
I thought a regex would work but apparently that's not supported when defining the host
您无法从正则表达式下载 JSON。
I don't want to list all of them since that would mean having to push a new release with every new subdomain created
那么要么支持一些通用的子集,要么暂时不支持应用链接。可以想象,如果不太可能,恕我直言,Google 将来会为此提供更灵活的选择。
更新:2019-11-08:看来 as of .
您可以将您的域添加为 *.example.com
。在 the docs 处说通配符可以用作主机的第一个字符。因此,您可以将清单更改为如下内容:
<intent-filter . . . >
<data android:scheme="https" />
<data android:host="*.example.org" />
. . .
</intent-filter>
这应该适用于子域:
- example.org
- www.example.org
- 任何其他子域。example.org
经过多次测试,自android 7.1(api 25级)起支持多个子域。
在之前的版本中,我们在安装应用程序时遇到了这个错误:E/HostsVerifier: Invalid host to verify (*.example.org):Input host is not valid.
或者,如果您使用通配符(例如 *.example.com)声明您的主机名,则必须在根主机名 (example.com) 处发布您的 assetlinks.json 文件。例如,具有以下 Intent 过滤器的应用程序将通过对 example.com 的任何子名称(例如 foo.example.com)的验证,只要 assetlinks.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 现在确实支持主机名中的通配符。根据文档,现在支持它。
我一直在阅读支持 android 应用程序 link 的文档,我的应用程序支持的网站使用子域,但子域太多,而且它们是动态构建的。我想知道是否有一种方法可以支持许多子域而不必在 intent-filter 标记中全部指定它们。
这是 google 中示例的 link:http://developer.android.com/training/app-links/index.html#request-verify 该示例位于支持应用程序 linking for multiple subdomains 位置。
我认为正则表达式可以工作,但显然在定义主机时不支持它。我不想列出所有这些,因为这意味着必须为每个创建的新子域推送一个新版本
<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>
我不希望使用第三方库或服务。但是任何对您有用的建议都将不胜感激,以了解如何使这项工作发挥作用。
the website my app supports works with subdomains but there's too many subdomains and they are built dynamically
欢迎您为其中的某些子集(例如,在您构建应用程序时已知的链接)实现应用程序链接。您甚至可以考虑编写一个 Gradle 插件,它可以从某处的域列表中生成适当的清单元素。
但是,域会在安装时进行检查,并且无法添加新域,除非使用新清单发布新版本的应用程序。
I was wondering if there is a way to support many subdomains without having to specifiy them all in the intent-filter tag.
不,对不起。 Android 检查域并在安装时检索 JSON 文件。
I thought a regex would work but apparently that's not supported when defining the host
您无法从正则表达式下载 JSON。
I don't want to list all of them since that would mean having to push a new release with every new subdomain created
那么要么支持一些通用的子集,要么暂时不支持应用链接。可以想象,如果不太可能,恕我直言,Google 将来会为此提供更灵活的选择。
更新:2019-11-08:看来
您可以将您的域添加为 *.example.com
。在 the docs 处说通配符可以用作主机的第一个字符。因此,您可以将清单更改为如下内容:
<intent-filter . . . >
<data android:scheme="https" />
<data android:host="*.example.org" />
. . .
</intent-filter>
这应该适用于子域:
- example.org
- www.example.org
- 任何其他子域。example.org
经过多次测试,自android 7.1(api 25级)起支持多个子域。
在之前的版本中,我们在安装应用程序时遇到了这个错误:E/HostsVerifier: Invalid host to verify (*.example.org):Input host is not valid.
或者,如果您使用通配符(例如 *.example.com)声明您的主机名,则必须在根主机名 (example.com) 处发布您的 assetlinks.json 文件。例如,具有以下 Intent 过滤器的应用程序将通过对 example.com 的任何子名称(例如 foo.example.com)的验证,只要 assetlinks.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 现在确实支持主机名中的通配符。根据文档,现在支持它。