如果用户在网站上,如何禁用 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"
压制它。
假设有一个网站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"
压制它。