2016-04-30 61 views
7

Trong ứng dụng Android của tôi, tôi cần hiển thị biểu mẫu đăng ký bên thứ ba bên trong WebView. Thật không may, tôi cũng cần hỗ trợ các phiên bản Android < 4.3, nơi bạn gặp lỗi bắt tay SSL khi bạn kết nối với trang web. Tuy nhiên, tôi có thể tạo yêu cầu trực tiếp trên Android 4.1 trở lên với ngữ cảnh SSL tùy chỉnh đã bật TLS 1.1 một cách rõ ràng, nhưng tôi không thể chuyển ngữ cảnh SSL này vào số WebView của mình. Tôi cố gắng để làm cho tùy chỉnh WebViewClientTLS 1.1, 1.2 trong WebView cho 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(); 
         } 
        } 
       }); 
      } 
     }); 
    } 

}; 

Nhưng điều đó không làm việc kể từ shouldOverrideUrlLoading không được gọi vào yêu cầu POST.

Có cách nào để thực hiện công việc này (có thể là một số thay thế cho WebView)? Bất kỳ trợ giúp được đánh giá cao.

Trả lời

4

Tôi không chắc liệu bạn có thể làm cho nó hoạt động với WebView hiện tại hay không Tôi khuyên bạn nên xem: https://crosswalk-project.org/documentation/android.html để thay thế WebView.

Điều này được xây dựng dựa trên phiên bản Chrome mới nhất và bạn sẽ không gặp sự cố với phiên bản Android mà người dùng đang chạy.

Tôi chắc chắn cũng có các lựa chọn thay thế khác, nhưng đây là phương án tôi đang sử dụng cho công việc và tôi biết công việc.

Chúc bạn may mắn nhất.

+0

Cảm ơn, Nó hoạt động khá tốt. – satorikomeiji

+0

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

Các vấn đề liên quan