注册不包含子域的 Android 深层链接路径

Posted

技术标签:

【中文标题】注册不包含子域的 Android 深层链接路径【英文标题】:Registering Android deep link path without including subdomains 【发布时间】:2020-07-30 21:35:12 【问题描述】:

我正在尝试创建一个深层链接以匹配特定域上的 URL,而不是任何子域上的 URL。我的意图过滤器<data /> 条目如下所示:

<data
  android:host="example.com"
  android:pathPrefix="/somepath"
  android:scheme="https" />

这很好用,并且可以按照我的预期将 URL 与 https://example.com/somepath 匹配。但是,也有一些我不想匹配的 URL 看起来像 https://subdomain.example.com/somepath。这些也被该数据条目拾取!

我想在主机上严格匹配并且不包含任何子域。这在 Android 中可行吗?

无法更改任一组链接的 URL 方案。

【问题讨论】:

【参考方案1】:

正如我在documentation 中看到的,您的配置与子域不匹配。

如果您想接受所有子域,您必须在主机前使用星号 (*) 字符,如下所示:*.example.com

所以,答案是:example.com 不会匹配任何子域,例如 subdomain.example.com

我已经使用以下意图过滤器创建了 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:host="example.com"
       android:pathPrefix="/somepath"
       android:scheme="https" />
</intent-filter>

这会在浏览器窗口中打开 test.example.com:

adb shell am start -a android.intent.action.VIEW -d "https://test.example.com/somepath/test"

这会打开我的应用程序:

adb shell am start -a android.intent.action.VIEW -d "https://example.com/somepath/test"

【讨论】:

谢谢,但我有相反的问题 - 我不想匹配子域,所以我省略了任何通配符,它​​仍然匹配子域。 我创建了一个测试项目,它对我来说很好。 我已经用对我有用的过滤器更新了我的答案。

以上是关于注册不包含子域的 Android 深层链接路径的主要内容,如果未能解决你的问题,请参考以下文章

OAuth 回调 URI 的 Android 深层链接不起作用

如何使用 Branch 支持现有的深层链接路由

使用意图不打开应用程序的 Android 深层链接

Parcelables 不支持默认值。 Android 导航深层链接参数

Android 深层链接 - 不显示意图选择器弹出窗口,强制打开应用

带有 Mandrill 子域的通用深度链接