如果用户在网站上,如何禁用Android App链接?

时间:2019-06-17 09:15:58

标签: android deep-linking android-app-links

让我们说有一个网站https://www.example.com 我们正在听https://www.example.com/product 在Android App中具有以下意图过滤器

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

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

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

现在,如果用户转到浏览器并打开example.com,并且用户单击了https://example.com/product,它将在应用程序中打开,但我们仅在用户在我们的网站上时才阻止其打开网站

任何帮助将不胜感激。

3 个答案:

答案 0 :(得分:1)

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

我注意到的一件重要事情是,如果页面是用React或Angular开发的,并且不是基于JSP 的,则永远不会调用该App。在我们的例子中,我们使用的是Tomcat服务器,因此每当用户导航到其他页面时,Android系统就会知道在浏览器中打开了一个新页面,这使得Android系统可以在侦听意图中指定的URL时打开Android App过滤。 但是,如果页面是在React和Angular中设计的,则不会发生这种情况。

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

答案 1 :(得分:0)

我认为网络开发人员可能已经告诉过您……因为这全都是关于URL而不是内容。点击并按住Chrome,然后“在新标签页中打开”,无需将新的URL通过意图过滤器即可进行操作...您将无法从Chrome中读取该URL,因此可以放弃这种方法。

要解决因添加Intent过滤器而造成的问题,您需要做的就是设置两个子域,然后仅为其过滤一个子域,同时仍在两个子域上显示相同的内容(需要HTML中的规范元标记)-那么您可以像往常一样简单地使用页面,没有任何东西会触发意图过滤器。

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

答案 2 :(得分:-1)

基于Android官方文档,您需要从清单上的Intent过滤器中删除BROWSABLE类别。

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

从文档中查找那些难以打开URL和阅读文档的人:

包括“可浏览”类别。为了使意图过滤器可以从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"

以抑制它。