Flutter 中 Android 应用链接深层链接的无限循环

问题描述

目前,我们的 Flutter 应用程序和深层链接(或应用程序链接和通用链接)存在问题。在 iOS 上一切正常,但在 Android 上,我们在某些链接上出现了无限循环。

应用程序可以通过深层链接打开,我们可以根据这些链接显示内容(我们使用的是 uni_links2 包)。但是,我们在应用中的传出链接方面遇到了一个大问题。

我们的应用程序有一个详细信息页面,此处显示具有相同域的链接,但它们应该在浏览器中打开,而不是在应用程序中打开。这些链接指向我们无法在应用中处理的内容

这些链接应该在应用内从深层链接打开:

应该在浏览器中打开这样的网址:

AndroidManifest.xml

<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:scheme="http" android:host="ourdomain.com" />
    <data android:scheme="http" android:host="www.ourdomain.com" />
    <data android:scheme="https" />
</intent-filter>

使用 url_launcher 包我可以打开网址,但它们被直接视为深层链接并在我们自己的应用程序中再次打开。我也试过 android_intent,它在将 Chrome 定义为认意图时工作。

AndroidIntent intent = AndroidIntent(
  action: 'action_view',data: url,package: 'com.android.chrome',);
await intent.launch();

但我不能保证用户安装了 Chrome。

目前我不知道如何解决这个问题。我所知道的是,我可以将整个域或路径指定为模式。不幸的是,我不能排除特定的路径。另外,我不知道如何指定链接应该在浏览器中打开,而不是在我们的应用中打开。

你知道我该如何解决这个问题吗?提前致谢!

解决方法

只有在默认情况下选择应用程序作为与关联域的链接打开时,才能出现无限循环。

对于 url_launcher 包,使用 forceWebView 参数。

await launch('URL',forceWebView: true);

这将允许特定链接仅在浏览器中打开。您可能还需要 enableJavaScript