让我们说有一个网站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,它将在应用程序中打开,但我们仅在用户在我们的网站上时才阻止其打开网站
任何帮助将不胜感激。
答案 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"
以抑制它。