Getting Blank Screen in webview when bypassing SSL Error

256 views Asked by At

I know that SSL handler.proceed() is not allowed on the playstore. And they reject the app once their bots able to find the same in the uploaded app. For testing purpose I was asked to share the UAT APK with this SSL bypass only for UAT environment. When I am trying to use handler.proceed(), I get a blank screen with below error

Ignoring unexpected ssl error proceed callback

in the logcat. I have searched the whole internet and I found nothing useful yet. Below is my code.

override fun onReceivedSslError(view: WebView?, handler: SslErrorHandler, er: SslError?) {
        super.onReceivedSslError(view, handler, er)
        LogHelper.e("check error", "onReceivedError")
        showErrorDialog(handler, er)
}

private fun showErrorDialog(handler: SslErrorHandler, error: SslError?) {
        val builder = activity?.let { AlertDialog.Builder(it) }

        var message = "SSL Certificate error."
        when (error?.primaryError) {
            SslError.SSL_UNTRUSTED -> message = "The certificate authority is not trusted."
            SslError.SSL_EXPIRED -> message = "The certificate has expired."
            SslError.SSL_IDMISMATCH -> message = "The certificate Hostname mismatch."
            SslError.SSL_NOTYETVALID -> message = "The certificate is not yet valid."
        }

        message += " Do you want to continue anyway?"

        builder?.setTitle("SSL Certificate Error");
        builder?.setMessage(message)
        builder?.setPositiveButton(activity?.getString(R.string.button_continue)) { dialog, _ ->
            dialog.dismiss()
            handler.proceed()
        }

        builder?.setNegativeButton(activity?.getString(R.string.cancel)) { _, _ ->
            handler.cancel()
            activity?.onBackPressed()
        }
        builder?.create()?.show()
    }
1

There are 1 answers

0
Shahbaz Hashmi On

Below is the solution. No need to call the super.onReceivedSslError(view, handler, er) as we need handle this on our side only. Although this does not prevent your app from playstore rejection.

override fun onReceivedSslError(view: WebView?, handler: SslErrorHandler, er: SslError?) {
        //super.onReceivedSslError(view, handler, er)
        LogHelper.e("check error", "onReceivedError")
        showErrorDialog(handler, er)
}