6

假设有一个网站https://www.example.com并且我们正在 使用以下意图过滤器在 Android 应用程序 中收听https://www.example.com/product

<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将在应用程序中打开,但我们希望仅当用户在我们的网站上时才阻止应用程序打开

任何帮助将不胜感激。

4

3 回答 3

0

我认为 web 开发人员可能已经告诉过你奶酪......因为这完全是关于 URL 而不是内容。在 Chrome 中点击按住,然后“在新选项卡中打开”可以在不通过意图过滤器传递新 URL 的情况下工作......并且您将无法从 Chrome 中读取 URL,因此您可以放弃这种方法。

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

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

于 2019-11-15T07:14:42.687 回答
0

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

我注意到一件重要的事情是,如果页面是用 React 或 Angular 开发的并且不是基于 JSP的,则永远不会调用应用程序。在我们的例子中,我们使用的是 Tomcat 服务器,所以每当用户导航到不同的页面时,Android 系统都会知道在浏览器中打开了一个新页面,这使得 Android 系统在监听意图中指定的 URL 时打开 Android 应用程序筛选。但是,如果页面是用 React 和 Angular 设计的,则不会发生这种情况。

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

于 2019-10-16T07:21:55.603 回答
-1

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

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

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

包括 BROWSABLE 类别。为了使意图过滤器可以从 Web 浏览器访问,它是必需的。没有它,单击浏览器中的链接将无法解析您的应用程序。

这意味着,如果您不希望浏览器指向您的应用程序,只需删除 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"

压制它。

于 2020-01-16T08:53:51.197 回答