WebView показывает ERR_CLEARTEXT_NOT_PERMITTED, хотя сайт HTTPS

Я начинаю работать над приложением на Android, так что у меня мало. Все, что у меня есть, пока только WebView. Я создал проект в Android Studio, и мой проект был настроен как Android InstantApp. Я не уверен, почему и как, но предполагаю, что я упустил возможность для этого при создании проекта.

Я получал сообщение об ошибке от WebView: net :: ERR_CLEARTEXT_NOT_PERMITTED. Когда я погуглил об ошибке, я увидел, что, когда приложение является InstantApp, WebViews могут загружать только сайты с HTTPS и не могут загружать сайт HTTP.

Цель этого приложения - быть чрезвычайно простым проигрывателем Flash только для одного сайта. Это сделано для повышения производительности игры, требующей Flash. Эта игра находится на сайте darkorbit.com по протоколу HTTPS.

MainActivity.java:

package com.tylerr147.darkorbit;

import android.content.ComponentName;
import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.webkit.WebSettings;
import android.webkit.WebView;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        WebView wv = findViewById(R.id.webView1);
        wv.loadUrl("https://darkorbit.com/");
        wv.setWebViewClient(new CustomWebViewClient());
        WebSettings webSettings = wv.getSettings();
        webSettings.setJavaScriptEnabled(true);
        webSettings.setPluginState(WebSettings.PluginState.ON);

    }
}

и CustomWebViewClient.java

package com.tylerr147.darkorbit;

import android.webkit.WebView;
import android.webkit.WebViewClient;

public class CustomWebViewClient extends WebViewClient {
    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url) {
        view.loadUrl(url);
        return true;
    }
}

Мой вопрос: Как я могу отключить свое приложение как InstantApp или как заставить этот WebView отображать сайт?

Я считаю важным упомянуть еще несколько деталей: В приложении, где отображается WebView, также говорится, что «Веб-страница по адресу http://darkorbit.com/ не может быть загружена, потому что: net :: ERR_CLEARTEXT_NOT_PERMITTED

Обратите внимание, что здесь написано «... сайт в http://darkorbit.com/ ...», а не «... сайт в https://darkorbit.com/ ...», хотя строка для URL жестко закодирована и говорит «https://darkorbit.com/». Кроме того, я тестирую приложение на эмуляторе, настроенном как Google Pixel 2 под управлением Android 9.

Любая помощь будет оценена по достоинству. Спасибо.

удаление android: networkSecurityConfig = "@ xml / network_security_config" это сработало для меня.

Rajendra 08.08.2019 13:06

даже я удалил android: networkSecurityConfig = "@ xml / network_security_config" и добавил android: usesCleartextTraffic = "true", тогда это сработало для меня

kallayya Hiremath 31.03.2020 09:48
160
2
256 407
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Решение:

Добавьте следующую строку в свой тег application:

android:usesCleartextTraffic = "true"

Как показано ниже:

<application
    ....
    android:usesCleartextTraffic = "true"
    ....>

Обновлено: Если у вас есть конфигурация сетевой безопасности, например: android:networkSecurityConfig = "@xml/network_security_config"

Нет необходимости устанавливать для трафика открытого текста значение true, как показано выше, вместо этого используйте приведенный ниже код:

<?xml version = "1.0" encoding = "utf-8"?>
<network-security-config>
    <domain-config cleartextTrafficPermitted = "true">
        ....
        ....
    </domain-config>

    <base-config cleartextTrafficPermitted = "false"/>
</network-security-config>  

Установите cleartextTrafficPermitted на true

Надеюсь, это поможет.

Я также разработал шаблон Webview и получил ту же ошибку. И теперь это решено. Благодарность

Shani Deshwal 17.02.2019 09:50

это уже там и все еще показывает ту же ошибку !!! 1

Abraham Mathew 14.03.2019 08:31

@ABr, вы можете опубликовать свой манифест, пожалуйста?

Ümañg ßürmån 14.03.2019 09:30

Спасибо, все работает.

Ankit Saini 04.04.2019 13:53

Но почему возникает проблема? Это должно происходить с незащищенными веб-сайтами? Но на самом деле я нашел тот, который должен быть безопасным (например, one.co.il, у которого в начале есть https: //). Даже обычный веб-браузер на Android показывает мне значок замка. Как я могу узнать, безопасен ли веб-сайт?

android developer 05.06.2019 12:19

Не решить, все еще отображается ошибка в Android-пироге

kishan verma 07.06.2019 08:43

@ Ümañgßürmån Я использую телефонную связь, поэтому у меня нет AndroidManifest.xml. Где я могу добавить этот тег?

Zuzu JH 21.06.2019 14:37

не работает с android: networkSecurityConfig set

Maciej Beimcik 15.07.2019 10:31

Я сделал веб-просмотр, подключенный к сайту https, и получаю эту ошибку, вы знаете, почему? Я думал, это только для HTTP-запросов

Miguel 16.08.2019 12:10

@taurelas проверьте этот ответ, чтобы установить конфигурацию android:networkSecurityConfig, чтобы разрешить ваш URL: stackoverflow.com/a/50834600/7850685

Luzian 21.08.2019 20:50

@Miguel проверьте, есть ли у вас networkSecurityConfig в вашем AndroidManifest.xml под <application ...>. Если вы это сделаете, вы можете попробовать удалить его (если не требуется) или изменить его, чтобы разрешить использование вашего домена. Этот ответ может вам тоже помочь: stackoverflow.com/a/50834600/7850685

Luzian 21.08.2019 20:53

Также работал у меня в проекте в Кордове. Изменено значение в cordova/platforms/android/app/src/main/AndroidManifest.xml. Мой env: Кордова 9.0.0, Платформа: Android 8.1.0

Amil Waduwawara 01.10.2019 05:27

Спасибо! Работал для меня :) (Android webview с реактивным родным)

Jacob.B 26.02.2020 15:43

Спасибо, мужик! android webview с реагирующим собственным дескриптором над решением :)

Michał 27.02.2020 23:08

Это сработало. API 30. Спасибо

MindRoasterMir 10.09.2020 20:14

@AbrahamMathew: Вы добавили его в тег application?

testing 12.02.2021 09:58

Когда вы вызываете «https://darkorbit.com/», ваш сервер считает, что отсутствует «www», поэтому он перенаправляет вызов на «http://www.darkorbit.com/», а затем на «https://www.darkorbit.com/», ваш вызов WebView блокируется при первом перенаправлении, поскольку это вызов «http». Вместо этого вы можете вызвать «https://www.darkorbit.com/», и это решит проблему.

как насчет поддоменов?

0x78f1935 08.09.2020 21:32

Другие вопросы по теме