2016-09-29 190 views
0

我試圖從付款門戶中確定成功的付款事件。 您可能知道這個過程:您將「回叫網址」作爲其他參數之一發送到付款網站。付款後,網站將瀏覽器重定向到您的「回撥URL」。Android WebView - 攔截URL加載

由於這是Android應用程序,因此我使用自定義方案('myapp:// order/123')指定了一個'回調URL' 然後我使用以下技術截獲重定向到我的'回調網址'來執行一些自定義操作。

mWebView.setWebViewClient(new WebViewClient() { 
     @Override 
     public boolean shouldOverrideUrlLoading(WebView view, String url) { 
      LOG.info("Inside shouldOverrideUrlLoading(), url: {}", url); 

      if (url.startsWith("myapp://")) { 
       onPaymentPerformed(); 
       return true; 
      } else { 
       return false; 
      } 
     } 
} 

它工作了很多個月,但最近它開始失敗。我不知道爲什麼,但可能是由於設備更新。此方法已停止被稱爲'myapp://'網址。我已經檢查日誌,發現以下消息

I/chromium: [INFO:CONSOLE(2174)] "Mixed Content: The page at 'https://www.liqpay.com/en/checkout/success/xxxx' was loaded over a secure connection, but contains a form which targets an insecure endpoint 'myapp://order/7'. This endpoint should be made available over a secure connection.", source: https://static.liqpay.com/checkout/160922113118/js/index.js (2174)

然後我試圖改變「的myapp://爲了/ 123」到「https://order/123」,但該方法shouldOverrideUrlLoading()也不會調用此網址,而不是我在web視圖看到一個標準的錯誤信息:

The webpage at https://order/123 could not be loaded because: net::ERR_NAME_NOT_RESOLVED 

我沒有發現任何與此類似互聯網,請幫助

回答

0

你可以繼承的Web客戶端和覆蓋onReceiveSslError方法。

private class SSLTolerentWebViewClient extends WebViewClient { 
    public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) { 
     handler.proceed(); // proceed ignoring ssl error. 
    } 
} 

看看是否有效。

+0

遺憾的是它並沒有,不過我已經成功地使其通過覆蓋另一種方法工作: @覆蓋 公共WebResourceResponse shouldInterceptRequest(的WebView視圖,字符串URL) 該方法總是觸發或者這是一個「MYAPP: // order /'或'https:// order /'scheme。然後,我簡單地從這個方法返回200 OK響應並開始做我需要的任何事情 – ievgen