Android WebView加載支付寶鏈接失敗,如何解決net::ERR_UNKNOWN_URL_SCHEME問題?

Android WebView加載支付寶鏈接失敗,如何解決net::ERR_UNKNOWN_URL_SCHEME問題?

android webview加載支付寶鏈接失敗:net::ERR_UNKNOWN_URL_SCHEME問題詳解及解決方案

在Android開發(fā)中,使用WebView加載包含自定義URL scheme的鏈接(例如支付寶的alipays://)時(shí),常常遇到net::ERR_UNKNOWN_URL_SCHEME錯(cuò)誤,導(dǎo)致頁(yè)面無(wú)法正常加載。即使重寫了shouldOverrideUrlLoading方法,仍然可能在onReceivedError回調(diào)中收到errorCode為-10的錯(cuò)誤。這是因?yàn)锳ndroid WebView默認(rèn)不支持自定義URL scheme,需要開發(fā)者手動(dòng)處理。

根本原因在于WebView無(wú)法識(shí)別和處理alipays://等自定義協(xié)議。僅僅重寫shouldOverrideUrlLoading方法不足以解決問題,關(guān)鍵在于正確攔截并處理該自定義協(xié)議鏈接。

解決方案:使用Intent攔截并處理自定義URL scheme

通過(guò)重寫WebViewClient的shouldOverrideUrlLoading方法,攔截包含alipays://的URL,并使用Intent將其交給相應(yīng)的應(yīng)用程序處理。

以下代碼片段演示了如何實(shí)現(xiàn):

webView.setWebViewClient(new WebViewClient() {     @Override     public boolean shouldOverrideUrlLoading(WebView view, String url) {         if (url.startsWith("alipays://")) {             // 處理自定義URL scheme             Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));             try {                 startActivity(intent);             } catch (ActivityNotFoundException e) {                 // 設(shè)備未安裝可處理該URL的應(yīng)用                 // 可在此處添加錯(cuò)誤處理邏輯,例如提示用戶安裝支付寶                 e.printStackTrace();             }             return true; // 已處理該URL,WebView不再加載         }         // 其他URL,使用WebView默認(rèn)行為         return super.shouldOverrideUrlLoading(view, url);     }      @Override     public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {         super.onReceivedError(view, errorCode, description, failingUrl);         // 可在此處添加更詳細(xì)的錯(cuò)誤處理邏輯     } });

代碼首先檢查URL是否以alipays://開頭。如果是,則創(chuàng)建Intent,使用ACTION_VIEW動(dòng)作和Uri.parse(url)生成的Uri對(duì)象,嘗試啟動(dòng)相應(yīng)的Activity處理支付寶鏈接。try-catch塊處理ActivityNotFoundException,即設(shè)備未安裝可處理該URL scheme的應(yīng)用的情況。return true表示已處理該URL,WebView不再加載。如果不是自定義scheme,則調(diào)用父類的shouldOverrideUrlLoading方法,使用WebView默認(rèn)行為。

通過(guò)此方法,即可正確攔截和處理支付寶支付鏈接,避免net::ERR_UNKNOWN_URL_SCHEME錯(cuò)誤。 onReceivedError方法中的錯(cuò)誤處理邏輯可根據(jù)實(shí)際需求調(diào)整。

? 版權(quán)聲明
THE END
喜歡就支持一下吧
點(diǎn)贊13 分享