我已经使用 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)”付款时,它仍然返回相同的错误
慕娘9325324
红颜莎娜
慕村225694
相关分类