Я разрабатываю Android 8 (26 API, Oreo) и использую android.webkit.WebView в своем приложении.
Я бы реализовал «безопасное сетевое соединение» при загрузке страниц с помощью моего WebView (другими словами, я бы избегал проблем с посредником и самозаверяющих сертификатов)
Для этого использовал настройку сетевой безопасности (на Android с версии 7.0 N, 24 API)
Так:
В res>xml>network_security_config.xml
<?xml version = "1.0" encoding = "utf-8"?>
<network-security-config>
<domain-config>
<domain includeSubdomains = "true">MY_DOMAIN.com</domain>
<pin-set>
<pin digest = "SHA-256">MY_PIN</pin>
</pin-set>
</domain-config>
</network-security-config>
Я нашел MY_PIN вставку MY_DOMAIN.com здесь: https://report-uri.com/home/pkp_hash
В manifest>AndoridManifest.xml
...
<application
android:networkSecurityConfig = "@xml/network_security_config"
...
</application>
В onCreate моего приложения я просто делаю:
WebView webView = new WebView(this);
webView.setWebViewClient(new WebViewClient() {
@Override
public void onReceivedSslError(..)..
@Override
public void onPageFinished()..
...});
webView.loadUrl(MY_DOMAIN.com);
Согласно документам Android, я делаю это правильно, но у меня есть проблема: это похоже на то, что network_security_config.xml никогда не проверяется, потому что я могу установить любое «случайное» и «неправильное» значение для вывода, и он работает нормально (URL MY_DOMAIN.com загружается нормально без блокировки поведение).
Таким образом, это означает, что если какой-то посредник вернет обратно один другой вывод из тех, которые я написал в res>xml>network_security_config.xml, приложение продолжит работать хорошо и без безопасного поведения.
Он также не выполняет один из переопределенных методов ошибок WebViewClient.
Пожалуйста, помогите, я не могу понять свою ошибку.
[РЕШЕНО]
В AndoridManifest.xml я объявил
<application
android:networkSecurityConfig = "@xml/network_security_config"
...
</application>
Редактор предупредил о проблеме, связанной с версией SDK, но я ее не увидел. Это предупреждение.
[РЕШЕНИЕ]
Добавьте этот tools:targetApi = "n" в манифест следующим образом:
<application
android:networkSecurityConfig = "@xml/network_security_config"
...
tools:targetApi = "n">
[РЕДАКТИРОВАТЬ]
Ошибка SSL обрабатывается в public void onReceivedSslError(...) из WebViewClient (см. следующий код)
webView.setWebViewClient(new WebViewClient() {
public void onReceivedSslError(WebView view,
final SslErrorHandler handler, SslError error) {
//HANDLE HERE THE ERROR!!!
...
}
...
});
Спасибо, для меня это работает только на реальном устройстве, не работает на эмуляторах