Android WebView加載支付寶Scheme失???如何正確處理alipays://鏈接?

Android WebView加載支付寶Scheme失???如何正確處理alipays://鏈接?

android webview加載支付寶Scheme失敗解決方案

在Android開發中,WebView加載包含自定義URL Scheme(例如支付寶的alipays://)的鏈接時,常常遇到net::err_unknown_url_scheme錯誤,導致頁面無法正常加載,并在onReceivedError回調中返回錯誤碼-10。即使重寫了shouldOverrideUrlLoading方法,問題依然存在。這是因為WebView默認不支持處理自定義URL Scheme。

本文提供有效的解決方案。關鍵在于正確重寫WebViewClient的shouldOverrideUrlLoading方法,并使用Intent啟動相應應用處理自定義URL Scheme。

許多開發者嘗試重寫shouldOverrideUrlLoading方法卻未能解決問題,原因可能是方法實現存在缺陷。以下是一個經過驗證的正確實現:

首先,為WebView設置WebViewClient:

webView.setWebViewClient(new WebViewClient() {     @Override     public boolean shouldOverrideUrlLoading(WebView view, String url) {         if (url.startsWith("alipays://")) {             // 處理支付寶Scheme             Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));             try {                 startActivity(intent);             } catch (ActivityNotFoundException e) {                 // 處理支付寶客戶端未安裝的情況                 e.printStackTrace();                 // 可在此處提示用戶安裝支付寶客戶端             }             return true; // 攔截URL,阻止WebView加載         }         // 其他URL,使用WebView默認行為         return super.shouldOverrideUrlLoading(view, url);     }      @Override     public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {         super.onReceivedError(view, errorCode, description, failingUrl);         // 處理加載錯誤,例如顯示錯誤提示     } });

代碼首先檢查URL是否以”alipays://”開頭。如果是,則創建Intent,使用ACTION_VIEW動作和解析后的URI啟動支付寶應用。try-catch塊處理支付寶應用未安裝的情況,避免程序崩潰。return true表示已處理該URL,WebView無需加載。 如果不是支付寶Scheme,則調用父類的shouldOverrideUrlLoading方法,讓WebView處理其他URL。onReceivedError方法用于處理加載錯誤,開發者可在此添加錯誤處理邏輯。

通過此方法,即可正確攔截和處理支付寶自定義URL Scheme,解決net::err_unknown_url_scheme錯誤。

? 版權聲明
THE END
喜歡就支持一下吧
點贊13 分享