rubezh-TWnlenfritplesuk

Проблемы и их решения при использовании Android WebView

В этой статье я опишу несколько нюансов использования WebView в Android приложениях.

1. Проблема ошибки SSL и ее решение (Правильный метод с точки зрения Google).

Бывают ситуации, когда на сайте установлен не "кошерный" сертификат. В этом случае генерируется ошибка и передается в обработчик onReceivedSslError. Если не обращать на это внимания и не переопределять этот метод, то WebView просто игнорирует открытие данного сайта. Если обработчик создан, то эту ситуацию необходимо обработать. На StackOverflow есть решение проблемы такого вида:

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

Но при попытке опубликовать приложение в Play Market, вы получите уведомление о потенциальной уязвимости в Вашем приложении и публикацию приостановят до исправления. В рекомендациях Google дано пояснение, что необходимо реализовать логику в обработчике ошибки SSL, и если проблема в рамках допустимого, то пропустить ошибку, выполнив handler.proceed(), иначе отклонить запрос.

Я применил иную тактику - я дал возможность пользователю решить доверять сайту или нет. Немножко расширим обработчик:

@Override
    public void onReceivedSslError(WebView view, final SslErrorHandler handler, SslError error) {
    final AlertDialog.Builder builder = new AlertDialog.Builder(this);
    String message = "Ошибка сертификата SSL.";
        switch (error.getPrimaryError()) {
            case SslError.SSL_UNTRUSTED:
                message = "Нет доверия органиу сертификации.";
                break;
            case SslError.SSL_EXPIRED:
                message = "Сертификат просрочен.";
                break;
            case SslError.SSL_IDMISMATCH:
                message = "Не верное имя хоста.";
                break;
            case SslError.SSL_NOTYETVALID:
                message = "Сертификат не действителен.";
                break;
        }
        message += " Вы желаете продолжить просмотр?";

        builder.setTitle("Ошибка сертификата SSL");
        builder.setMessage(message);
    builder.setPositiveButton("Продолжить", new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int which) {
            handler.proceed();
        }
    });
    builder.setNegativeButton("Отменить", new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int which) {
            handler.cancel();
        }
    });
    final AlertDialog dialog = builder.create();
    dialog.show();
}

Что тут происходит? При появлении ошибки SSL выводится сообщение пользователю и предлагается решить доверять данному сайту или нет, нажав кнопку Продолжить или Отменить.

После данного исправления публикация в Google Play продолжилась и вскоре приложение было доступно для загрузки.

2. Масштабирование содержимого

По умолчанию масштабирование в WebView отключено. Чтоб позволить пользователю изменять масштаб загруженного содержимого необходимо настроить WebView:

webView.setSupportZoom(true); 

Данная команда включает встроенные кнопки управления масштабом:

webView.setBuiltInZoomControls(true);

 

Это еще не все нюансы работы с WebView, так что продолжение следует...

onReceivedSslError
1 1 1 1 1 1 1 1 1 1 Рейтинг 0%

Метки: java, android

Печать E-mail

Добавить комментарий


Защитный код
Обновить