我目前有一个在 Android 上运行的简单 Flutter 应用程序。 Flutter应用程序主要由WebView组成,当用户在WebView中导航时,它应该重定向到由不同应用程序注册的Applink,例如:
https://www.bank.com
,已经安装了Bank应用程序,并且注册了一个Applink在https://www.bank.com/.well-known/assetlinks.json
。
当用户使用Webview进行导航时,不是打开原生应用程序,而是在webview中显示HTML视图。我尝试使用
url_launcher
来解决这个问题,如下所示:
onNavigationRequest: (navigation) {
if(navigation.url.startsWith('https://www.bank.com')) {
_launchURL(navigation.url);
return NavigationDecision.prevent;
}
return NavigationDecision.navigate;
},
但这不起作用,因为它失败了:
I/UrlLauncher(17085): component name for https://www.bank.com is null
有什么建议我可以从 Flutter webview 触发本机应用程序吗?
我发现没办法这么做了。为此,您必须使用
url_launcher
插件,并且必须通过将 https
方案添加到查询列表中来正确配置它,令人困惑的是,该列表没有记录:
<queries>
<!-- If your app checks for https support -->
<intent>
<action android:name="android.intent.action.VIEW"/>
<data android:scheme="https"/>
</intent>
</queries>
然后,使用以下函数,您可以启动该 URL:
_launchURL(String input) async {
var url = Uri.parse(input);
if (await canLaunchUrl(url)) {
await launchUrl(url);
} else {
throw 'Could not launch $url';
}}