猿问

“net::ERR_UNKNOWN_URL_SCHEME”错误,当 url 是

我已经使用 flutter web_view_plugin(webview) 构建了一个混合应用程序。我们的一种支付方式需要打开第三方应用程序(在本例中为 kakaotalk)。但是flutter webview插件没有提供这个功能,返回了net::ERR_UNKNOWN_URL_SCHEME。我做了一些研究,我明白问题出在url. 如果url不以http或开头https,则会导致此错误。


所以,为了解决这个问题,我不得不更改本机 java 代码。java现在我对和没有任何经验android,因此修复本机代码非常困难。我知道我必须修改shouldOverrideUrlLoading部分,以允许url以开头的intent://部分,而且我必须进行一些验证以检查该应用程序是否已安装。(如果未安装,则应将用户重定向到 playstore)


我添加的代码在shouldOverrideUrlLoading. 我也做了三个进口。剩下的就是代码,flutter生成


package com.flutter_webview_plugin;


import android.annotation.TargetApi;

import android.graphics.Bitmap;

import android.os.Build;

import android.webkit.WebResourceRequest;

import android.webkit.WebResourceResponse;

import android.webkit.WebView;

import android.webkit.WebViewClient;


import java.util.HashMap;

import java.util.Map;

import java.util.regex.Matcher;

import java.util.regex.Pattern;

import android.content.Intent; //added import

import android.net.Uri; //added import

import android.content.ActivityNotFoundException; //added import

/**

 * Created by lejard_h on 20/12/2017.

 */


public class BrowserClient extends WebViewClient {

    private Pattern invalidUrlPattern = null;


    public BrowserClient() {

        this(null);

    }


    public BrowserClient(String invalidUrlRegex) {

        super();

        if (invalidUrlRegex != null) {

            invalidUrlPattern = Pattern.compile(invalidUrlRegex);

        }

    }


    public void updateInvalidUrlRegex(String invalidUrlRegex) {

        if (invalidUrlRegex != null) {

            invalidUrlPattern = Pattern.compile(invalidUrlRegex);

        } else {

            invalidUrlPattern = null;

        }

    }


    @Override

    public void onPageStarted(WebView view, String url, Bitmap favicon) {

        super.onPageStarted(view, url, favicon);

        Map<String, Object> data = new HashMap<>();

        data.put("url", url);

        data.put("type", "startLoad");

        FlutterWebviewPlugin.channel.invokeMethod("onState", data);

    }

代码编译,但当net::ERR_UNKNOWN_URL_SCHEME我尝试使用“第 3 方应用程序(kakaotalk)”付款时,它仍然返回相同的错误


子衿沉夜
浏览 1245回答 3
3回答

慕娘9325324

之前,当 Firebase 动态链接被强制加载到 WebView 中时,我在 Android 上遇到了类似的错误。就我而言,FDL 预计将由 Android 中的 Google Play 服务处理。但是由于 WebView 不知道如何处理它被迫显示的链接,WebView 返回“net::ERR_UNKNOWN_URL_SCHEME”错误。我不确定这是否与您的情况相同,因为我无法验证您尝试从“intent://kakaopay...”加载的链接您可以尝试使用外部打开链接url_launcher。使用 RegEx 过滤意图 URL 并检查 URL 是否可以在外部(应用程序外部)启动和处理。var yourURL = "URL goes here";// Check if URL contains "intent"yourURL.contains(RegExp('^intent://.*\$')){  // Check if the URL can be launched  if (await canLaunch(yourURL)) {    await launch(yourURL);  } else {    print('Could not launch $yourURL');  }}此外,您使用的插件 ( web_view_plugin) 似乎已过时,我无法在此处找到它https://pub.dev/packages?q=web_view_plugin。Flutter 有它的官方 WebView 插件 ( webview_flutter) 已经发布,我建议检查它是否适合你的用例。

红颜莎娜

这样做了:_launchURL(url) async {  var link = "https://hiddenwords.page.link/deposit";  if (await canLaunch(link)) {      await launch(link,      forceWebView: false, enableJavaScript: true, forceSafariVC:     false);  } else {    throw 'Could not launch $link';  }}我手动将我希望它在 _launch 函数中打开的 url/链接放在 _launch 函数中...不要介意 _launch 括号中的 url。我还将此添加到 Webview 小部件:navigationDelegate: (NavigationRequest request) {   if (request.url.contains(RegExp('^intent://.*\$')))  {        _launchURL(request.url);        return NavigationDecision.prevent;   }     return NavigationDecision.navigate;},希望这对你有用。这个对我有用...

慕村225694

1.使用你的APP在flutter中使用参数打开其他应用程序(在你的动态链接中);2.使用:url_launcher:^6.1.6;首先,他们的应用程序必须支持动态链接;其次,他们为您提供交易的动态链接;这样我们就可以点击你APP中的动态链接,跳转到他们APP的指定页面了。代码:&nbsp;final Uri toLaunch = Uri(scheme: 'https', host: 'link.fitstop.com', path: 'link/qbvQ/');&nbsp; //https://link.fitstop.com/link/qbvQ&nbsp; &nbsp;is dynamic link&nbsp; Future<void>? _launched;&nbsp; &nbsp; ElevatedButton(&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; onPressed: () => setState(() {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; _launched = _launchInBrowser(toLaunch);&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }),&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; child: Text(&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 'url_launcher',&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ),&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; )&nbsp; Future<void> _launchInBrowser(Uri url) async {&nbsp; &nbsp; if (!await launchUrl(&nbsp; &nbsp; &nbsp; url,&nbsp; &nbsp; &nbsp; mode: LaunchMode.externalApplication,&nbsp; &nbsp; )) {&nbsp; &nbsp; &nbsp; throw 'Could not launch $url';&nbsp; &nbsp; }&nbsp; }
随时随地看视频慕课网APP

相关分类

Java
我要回答