2016-04-30 3 views
7

В моем приложении для Android мне нужно отобразить стороннюю регистрационную форму внутри WebView. К сожалению, мне также необходимо поддерживать версии Android < 4.3, где вы получаете ошибку установления связи SSL при подключении к веб-сайту. Тем не менее, я смог создавать прямые запросы на Android 4.1+ с помощью специального контекста SSL, который явно включен TLS 1.1, но я не могу передать этот контекст SSL в свой WebView. Я пытался сделать нестандартную WebViewClientTLS 1.1, 1.2 в WebView для android <= 4.3

private WebViewClient webViewClient = new WebViewClient() { 
    @Override 
    public void onPageFinished(WebView webView, String url) { 
     if (presenter != null) { 
      presenter.onLoadFinished(); 
     } 
    } 

    @Override 
    public void onReceivedError(WebView webView, 
           WebResourceRequest request, 
           WebResourceError error) { 
     if (presenter != null) { 
      presenter.onLoadError(); 
     } 
    } 

    @Override 
    public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error){ 
     handler.proceed(); 
    } 

    @Override 
    public boolean shouldOverrideUrlLoading(WebView webView, String url) { 
       Request request = new Request.Builder().url(url).build(); 
    final Handler handler = new Handler(mContext.getMainLooper()); 
    //mOkHttpClient is an OkHttpClient with my custom SSLContext which has TLS 1.1 and TLS 1.2 enabled 
    mOkHttpClient.newCall(request).enqueue(new Callback() { 
      @Override 
      public void onFailure(Call call, IOException e) { 

      } 

      @Override 
      public void onResponse(Call call, final okhttp3.Response response) throws IOException { 
       handler.post(new Runnable() { 
        @Override 
        public void run() { 
         try { 
          webView.loadDataWithBaseURL(
            null, response.body().string(), "text/html", "utf-8", null); 
         } catch (IOException e) { 
          e.printStackTrace(); 
         } 
        } 
       }); 
      } 
     }); 
    } 

}; 

Но это не сработало, так как shouldOverrideUrlLoading не вызывается запросов POST.

Есть ли способ сделать эту работу (возможно, некоторая альтернатива WebView)? Любая помощь приветствуется.

ответ

4

Я не уверен, что вы можете заставить его работать с текущим WebView, но Я бы порекомендовал вам взглянуть на: https://crosswalk-project.org/documentation/android.html, чтобы заменить WebView.

Это устройство основано на последней версии Chrome и . У вас не будет проблем с этой версией Android, на которой пользователь работает.

Я уверен, что есть и другие альтернативы, но это тот, который я использую для работы, и я знаю работу.

Удачи вам.

+0

Спасибо, он работает очень хорошо. – satorikomeiji

+0

https://crosswalk-project.org/documentation/android/embedding_crosswalk.html –

Смежные вопросы