如果用户在网站上,如何禁用 Android 应用程序链接?

How to Disable Android App links if user is on website?

假设有一个网站https://www.example.com 我们正在听 https://www.example.com/product 在 Android 具有以下意图过滤器的应用中

<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:host="www.example.com"
        android:pathPrefix="/product"
        android:scheme="https" />
</intent-filter>

文件 assetlinks.json 也托管在 example.com

Android 应用程序链接按预期工作正常。

现在,如果用户转到浏览器并打开 example.com,然后用户单击 https://example.com/product,这将在应用程序中打开,但 我们只想阻止应用程序打开如果用户访问我们的网站

任何帮助将不胜感激。

看了很多之后,我找到的唯一 解决方法 打开网页而不是应用程序是从网页重定向 -> 应用程序(重定向逻辑) -> 网站。

一件重要的事情,我注意到,如果页面是用 React 或 Angular 开发的,并且不是 基于 JSP[=18=,则永远不会调用应用程序].在我们的例子中,我们使用的是 Tomcat 服务器,所以每当用户导航到不同的页面时, Android 系统就会知道在浏览器中打开了一个新页面,这使得 Android 系统能够打开 Android 应用程序,如果收听在意图过滤器中指定的 url。 但是,如果页面是在 React 中设计的并且 Angular.

则不会发生这种情况

现在,这对我来说真的很难描述,因为我不是网络开发人员,这是网络开发人员告诉我的,我在 JSP 和 React 页面上都经历过。

我想网络开发人员可能已经告诉过你奶酪...因为这都是关于 URL 而不是内容。在 Chrome 中长按,然后 "open in new tab" 在不通过 Intent 过滤器传递新的 URL 的情况下工作...并且您将无法从 [=18 中读取 URL =],因此您可以放弃这种方法。

要解决通过添加 intent-filter 创建的问题,您所能做的就是设置两个子域,然后只为它们过滤一个,同时仍然在两个子域上显示相同的内容它们(需要 HTML 中的规范元标记)- 然后您可以像往常一样简单地使用该页面,并且不会触发 intent 过滤器。

并且为了仍然能够通过 intent 过滤器打开应用程序...只需添加一个按钮,该按钮链接到 intent 过滤器匹配的另一个子域。其他方法可能不合逻辑或有其他问题。

好吧,根据官方 Android 文档,您需要从 Manifest 的 intent-filter 中删除 BROWSABLE 类别。

https://developer.android.com/training/app-links/deep-linking

来自难以打开 url 并阅读文档的文档:

Include the BROWSABLE category. It is required in order for the intent filter to be accessible from a web browser. Without it, clicking a link in a browser cannot resolve to your app.

这意味着,如果您不希望浏览器定向到您的应用程序,只需删除 BROWSABLE 类别。就这样。

因此您的清单将如下所示:

<intent-filter android:autoVerify="true"
tools:ignore="AppLinkUrlError">

<action android:name="android.intent.action.VIEW" />

<category android:name="android.intent.category.DEFAULT" />

<data
    android:host="www.example.com"
    android:pathPrefix="/product"
    android:scheme="https" />
</intent-filter>

您将得到一个 "AppLinkUrlError",因此您可以添加;

tools:ignore="AppLinkUrlError"

压制它。