2016-09-29 161 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