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

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

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

Ответ 1

Решение:

Добавьте строку ниже в свой тег application:

android:usesCleartextTraffic="true"

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

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

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

Ответ 2

<?xml version='1.0' encoding='utf-8'?>
<manifest android:hardwareAccelerated="true" android:versionCode="1" android:versionName="0.0.1" package="com.abitech.ckr_abiwhiz" xmlns:android="http://schemas.android.com/apk/res/android">
    <supports-screens android:anyDensity="true" android:largeScreens="true" android:normalScreens="true" android:resizeable="true" android:smallScreens="true" android:xlargeScreens="true" />
    <uses-permission android:name="android.permission.INTERNET" />
    <application android:hardwareAccelerated="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:supportsRtl="true" android:usesCleartextTraffic="true">
        <activity android:configChanges="orientation|keyboardHidden|keyboard|screenSize|locale" android:label="@string/activity_name" android:launchMode="singleTop" android:name="MainActivity" android:theme="@android:style/Theme.DeviceDefault.NoActionBar" android:windowSoftInputMode="adjustResize">
            <intent-filter android:label="@string/launcher_name">
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <provider android:authorities="${applicationId}.provider" android:exported="false" android:grantUriPermissions="true" android:name="org.apache.cordova.camera.FileProvider">
            <meta-data android:name="android.support.FILE_PROVIDER_PATHS" android:resource="@xml/camera_provider_paths" />
        </provider>
        <provider android:authorities="${applicationId}.provider" android:exported="false" android:grantUriPermissions="true" android:name="de.appplant.cordova.emailcomposer.EmailComposerProvider">
            <meta-data android:name="android.support.FILE_PROVIDER_PATHS" android:resource="@xml/emailcomposer_provider_paths" />
        </provider>
        <provider android:authorities="${applicationId}.provider" android:exported="false" android:grantUriPermissions="true" android:name="de.appplant.cordova.plugin.notification.util.AssetProvider">
            <meta-data android:name="android.support.FILE_PROVIDER_PATHS" android:resource="@xml/localnotification_provider_paths" />
        </provider>
        <receiver android:exported="false" android:name="de.appplant.cordova.plugin.localnotification.TriggerReceiver" />
        <receiver android:exported="false" android:name="de.appplant.cordova.plugin.localnotification.ClearReceiver" />
        <activity android:exported="false" android:launchMode="singleInstance" android:name="de.appplant.cordova.plugin.localnotification.ClickReceiver" android:theme="@android:style/Theme.Translucent" />
    </application>
    <uses-sdk android:minSdkVersion="19" android:targetSdkVersion="28" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.GET_ACCOUNTS" />
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
    <uses-feature android:name="android.hardware.location.gps" />
    <uses-permission android:name="android.permission.WAKE_LOCK" />
</manifest>

это мой файл манифеста взглянуть на этот mamañg ßürmån

и эта линия уже там

  <application android:hardwareAccelerated="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:supportsRtl="true" android:usesCleartextTraffic="true">

извините за поздний пост это работает после того, как я перезагрузил компьютер

Ответ 3

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