基于 URI 的意图过滤器在 Chrome 隐身/Twitter IAB 中不起作用

Posted

技术标签:

【中文标题】基于 URI 的意图过滤器在 Chrome 隐身/Twitter IAB 中不起作用【英文标题】:URI-based intent-filter Doesn't Work in Chrome Incognito/Twitter IAB 【发布时间】:2020-12-23 04:53:34 【问题描述】:

我在我的应用清单中设置了<intent-filter>s,这样当用户导航到https://foo.bar/baz 时,他们会自动发送到我应用中的相应活动。这对于在“常规”Chrome 中点击的链接 100% 有效。

不过,我注意到的是,在同一设备上,这些相同的链接在浏览器中都可以正常导航

用户在 Chrome 的隐身标签页中 用户在 Twitter 的应用内浏览器(可能还有其他应用,虽然我没有测试过)时正在关注链接。

在这些情况下启用这些基于 URI 的意图过滤器是否存在已知问题,或者需要在清单中执行任何特殊操作以启用这些场景?我四处寻找,结果空无一物,所以希望这里的人能帮助我。

【问题讨论】:

【参考方案1】:

我在我的应用清单中设置了 s,因此当用户导航到 https://foo.bar/baz 时,它们会自动发送到我应用中的相应活动。

我假设您的<intent-filter> 是针对ACTION_VIEW,可能同时针对BROWSEABLELAUNCHER 类别。

对于在“常规”Chrome 中点击的链接,这 100% 的时间都有效。

大概,Chrome 正在查询 PackageManager,看到该 URL 和 ACTION_VIEW 有一个已注册的活动,然后启动该活动。

或者,应用可能只调用startActivity() 来获取ACTION_VIEW Intent 以获取您的URL。这和PackageManager 路由几乎是您的活动基于 URL 开始的唯一方式。

这两个都是选择加入的。碰巧遇到您的 URL 的任何应用都不需要执行上述任何一项操作。

用户在 Chrome 的隐身标签页中

鉴于您的 <intent-filter> 在常规 Chrome 中工作,我猜隐身模式不会出于隐私原因这样做。隐身模式的目的是限制所有人对您浏览的了解,因此拒绝启动应用程序是其中合理的一部分。

浏览器可能存在其他限制。例如,有一段时间,对于在地址栏中手动输入的 URL,Chrome 不会导航到外部应用程序。我已经很多年没有尝试过了,所以我不知道这个限制是否仍然有效。

用户在 Twitter 的应用内浏览器中关注该链接(可能还有其他应用,尽管我尚未对其进行测试)。

许多使用WebView 的应用程序都有将链接保留在WebView 内的逻辑,因此当用户单击时,它不会启动Web 浏览器。该逻辑还将阻止启动像您这样的应用程序,除非开发人员特别注意处理这种情况(类似于 Chrome 正在做的事情)。

在这些情况下启用这些基于 URI 的意图过滤器是否存在已知问题

是的,只要开发者有意或无意地禁止以这种方式启动第三方应用程序。如果您要问的话,这不是您的错误。

或者需要在清单中执行什么特殊操作才能启用这些场景?

您不能仅仅因为您的网址出现在他们的应用中就强迫您的开发人员启动您的应用。毕竟,开发人员不需要因为您的 URL 出现在他们的应用中就启动 Web 浏览器。

【讨论】:

这似乎是最可能的解释,感谢您确认我可能没有做错任何事情。

以上是关于基于 URI 的意图过滤器在 Chrome 隐身/Twitter IAB 中不起作用的主要内容,如果未能解决你的问题,请参考以下文章

爬虫进阶Chrome在爬虫中的使用(必备技能)

如何在隐身模式下启用Chrome扩展程序?

如何在隐身模式下启用我的 chrome 扩展程序?

为啥 Chrome 的隐身模式检索资源比普通模式快?

如何在 chrome 隐身模式下打开 URL

在 chromebook/chrome 操作系统上注册 Android 应用程序的协议处理程序以打开外部链接?