WebView显示err_cleartext_not_allowed尽管站点是HTTPS

我开始在Android上开发一个应用程序,所以我手头没有太多东西。到目前为止,我只有一个WebView。我在Android Studio中创建了这个项目,我的项目设置为Android InstantApp。我不确定为什么/如何,但我猜是我在创建项目时忽略了它的一个选项。

我从WebView得到一个错误说net:: err_cleartext_not_allowed。当我谷歌这个错误时,我看到当一个应用程序是一个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;
}
}
< p >我的问题: 我如何禁用我的应用程序作为一个InstantApp,或者我如何让这个WebView显示网站?< / p > 我觉得还有一些细节也很重要: 在应用程序中,它正在显示WebView,它还说“在http://darkorbit.com/的网页”无法加载,因为: net:: ERR_CLEARTEXT_NOT_PERMITTED < / p >

注意它说的是“…而不是http://darkorbit.com/…即使URL的字符串是硬编码的,并且说“https://darkorbit.com/”。此外,我正在运行Android 9的谷歌Pixel 2模拟器上测试该应用程序。

任何帮助都将不胜感激。谢谢你!

316397 次浏览

解决方案:

application标记中添加以下行:

android:usesCleartextTraffic="true"

如下图所示:

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

更新:如果你有网络安全配置,例如

不需要将明文流量设置为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

当你调用“https://darkorbit.com/”时,你的服务器认为它缺少“www”,所以它将调用重定向到“http://www.darkorbit.com/”,然后重定向到“https://www.darkorbit.com/”,你的WebView调用在第一次重定向时被阻塞,因为它是一个“http”调用。 你可以调用"https://www.darkorbit.com/"来代替,它将解决这个问题