注册不包含子域的 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 深层链接不起作用
Parcelables 不支持默认值。 Android 导航深层链接参数