亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

“net::ERR_UNKNOWN_URL_SCHEME”錯誤,當 url 是

“net::ERR_UNKNOWN_URL_SCHEME”錯誤,當 url 是

子衿沉夜 2023-05-10 13:15:00
我已經使用 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 importimport android.net.Uri; //added importimport 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)”付款時,它仍然返回相同的錯誤
查看完整描述

3 回答

?
慕娘9325324

TA貢獻1783條經驗 獲得超4個贊

之前,當 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) 已經發布,我建議檢查它是否適合你的用例。



查看完整回答
反對 回復 2023-05-10
?
紅顏莎娜

TA貢獻1842條經驗 獲得超13個贊

這樣做了:


_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;

},

希望這對你有用。這個對我有用...


查看完整回答
反對 回復 2023-05-10
?
慕村225694

TA貢獻1880條經驗 獲得超4個贊

1.使用你的APP在flutter中使用參數打開其他應用程序(在你的動態鏈接中);2.使用:url_launcher:^6.1.6;


首先,他們的應用程序必須支持動態鏈接;其次,他們為您提供交易的動態鏈接;這樣我們就可以點擊你APP中的動態鏈接,跳轉到他們APP的指定頁面了。


代碼:


 final Uri toLaunch = Uri(scheme: 'https', host: 'link.fitstop.com', path: 'link/qbvQ/');

  //https://link.fitstop.com/link/qbvQ   is dynamic link


  Future<void>? _launched;


    ElevatedButton(

              onPressed: () => setState(() {

                _launched = _launchInBrowser(toLaunch);

              }),

              child: Text(

                'url_launcher',

              ),

            )


  Future<void> _launchInBrowser(Uri url) async {

    if (!await launchUrl(

      url,

      mode: LaunchMode.externalApplication,

    )) {

      throw 'Could not launch $url';

    }

  }


查看完整回答
反對 回復 2023-05-10
  • 3 回答
  • 0 關注
  • 1518 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號