Intereting Posts
Что такое целое число, возвращаемое getInt (строковый ключ) в android.os.Bundle? Получение событий из календаря IllegalStateException: активность была уничтожена – когда приложение пытается показать DialogFragment еще раз Как разместить вертикально ViewPager в горизонтальном режиме ViewPager Robolectric 3.0: Mocking System.currentTimeMillis () Новая запись строки в файл Обнаружение активности запускается для результата Android: обнаружит, что пользователь открывает строку состояния Когда «ActionBarDrawerToggle» показывает строки «openDrawerContentDescRes» и «closeDrawerContentDescRes»? Запустить приложение Google Maps для проезда в андроид Удалить строку в файле (Android / java) Android эмулятор замораживания OS X v10.9 (Mavericks) с HAXM Android – Как сделать предварительный просмотр камеры с помощью TextureView Повторить предыдущий запрос, когда первый сбой 401 Несанкционированный Проблема с Marshmallow для Android 6.0 при загрузке приложения переднего плана

Android WebView SSL «Предупреждение о безопасности»

Я создаю тестовую версию приложения для клиента. Часть этого приложения использует WebView, который вызывается на сайт, основанный на SSL. В свою очередь, клиент предоставил тестовый домен, где имя сертификата не соответствует FQDN. Увы, они не в состоянии предоставить сертификат, который соответствует. 🙁

Я работаю над этой проблемой в сопутствующем приложении iOS ad hoc с одной строкой кода (опять же, не для использования в производстве – только для тестовых целей). Я искал аналогичную информацию об ОС Android, но решений, которые я видел здесь и в других местах, достаточно, чтобы сделать мою голову отличной для сравнения!

Есть ли простой способ обойти это? Даже где-то где-то устроились пользовательские настройки?

Ключи оценены!

Создайте WebViewClient и обработайте onReceivedSslError, который выглядит так:

public void onReceivedSslError (WebView view, SslErrorHandler handler, SslError error) 

Внутри этого обратного вызова вы можете просто вызвать handler.proceed() и страница продолжит загрузку. Если вы не обрабатываете этот обратный вызов и вызываете метод proceed() то поведение по умолчанию будет для загрузки страницы.

Обновленный ответ в соответствии с новым обновлением политики безопасности Google для обработчика ошибок SSL, см. В этой статье в Справочном центре разработчиков Android.

Чтобы предотвратить отклонение приложения в Google Play за нарушение нашей политики «Вредоносные действия».

Чтобы правильно обрабатывать SSL-сертификат, измените свой код, чтобы вызывать SslErrorHandler.proceed (), когда сертификат, представленный сервером, соответствует вашим ожиданиям, и вызовите SslErrorHandler.cancel () в противном случае.

Например, я добавляю диалоговое окно с предупреждением, чтобы пользователь подтвердил и, похоже, Google больше не показывает предупреждение.

 @Override public void onReceivedSslError(WebView view, final SslErrorHandler handler, SslError error) { final AlertDialog.Builder builder = new AlertDialog.Builder(this); String message = "SSL Certificate error."; switch (error.getPrimaryError()) { case SslError.SSL_UNTRUSTED: message = "The certificate authority is not trusted."; break; case SslError.SSL_EXPIRED: message = "The certificate has expired."; break; case SslError.SSL_IDMISMATCH: message = "The certificate Hostname mismatch."; break; case SslError.SSL_NOTYETVALID: message = "The certificate is not yet valid."; break; } message += " Do you want to continue anyway?"; builder.setTitle("SSL Certificate Error"); builder.setMessage(message); builder.setPositiveButton("continue", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { handler.proceed(); } }); builder.setNegativeButton("cancel", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { handler.cancel(); } }); final AlertDialog dialog = builder.create(); dialog.show(); 

}