WebView显示ERR_CLEARTEXT_NOT_PERMITTED,尽管站点是HTTPS [英] WebView showing ERR_CLEARTEXT_NOT_PERMITTED although site is HTTPS
问题描述
我开始在Android上的应用程序上工作,所以我没有太多.到目前为止,我所拥有的只是一个WebView.我在Android Studio中创建了项目,然后将我的项目设置为Android InstantApp.我不确定为什么/如何做,但是我猜是在创建项目时我忽略了它的一个选项.
I'm starting to work on an app on Android, so I don't have much. All I have is just a WebView so far. I created the project in Android Studio, and my project got set as an Android InstantApp. I'm not sure why/how, but my guess is that I overlooked an option for it when creating the project.
我从WebView收到一条错误消息,说net :: ERR_CLEARTEXT_NOT_PERMITTED.当我搜索错误时,我看到当一个应用程序是InstantApp时,WebViews只能加载HTTPS站点,而不能加载HTTP站点.
I was getting an error from the WebView saying net::ERR_CLEARTEXT_NOT_PERMITTED. When I googled the error, I saw that when an app is an InstantApp, WebViews can only load sites that are HTTPS, and cannot load an HTTP site.
此应用程序的目的是成为仅用于一个站点的极其简单的Flash播放器.这是为了在运行需要Flash的游戏时具有更好的性能.该游戏位于darkorbit.com,即HTTPS.
The purpose of this app is to be an extremely simple Flash player for only one site. This is to have better performance running a game that requires Flash. This game is at darkorbit.com, which is HTTPS.
MainActivity.java:
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
and 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显示网站?
My question: How can I disable my app as an InstantApp, or how can I get this WebView to display the site?
我觉得重要的是我还要提到其他一些细节: 在显示WebView的应用程序中,它还会显示该网页位于 http://darkorbit.com/无法加载,因为: 净:: ERR_CLEARTEXT_NOT_PERMITTED
I feel like it's important I mention a few other details too: In the app, where it is showing the WebView, it also says "The webpage at http://darkorbit.com/" could not be loaded because: net::ERR_CLEARTEXT_NOT_PERMITTED
提示为"...网站位于 http://darkorbit.com/ ...,而不是"...网站位于 https://darkorbit.com/ ...",即使URL是硬编码的,并显示为" https://darkorbit.com/".另外,我正在设置为运行Android 9的Google Pixel 2的模拟器上测试该应用.
Notice that is says "... site at http://darkorbit.com/ ...", and not "... site at https://darkorbit.com/ ..." even though the string for the URL is hardcoded, and says "https://darkorbit.com/". Also, I am testing the app on an emulator set up as a Google Pixel 2 running Android 9.
任何帮助将不胜感激.谢谢.
Any help would be appreciated. Thank you.
推荐答案
解决方案:
在application
标记中添加以下行:
android:usesCleartextTraffic="true"
如下所示:
<application
....
android:usesCleartextTraffic="true"
....>
更新:如果您具有网络安全性配置,例如:android:networkSecurityConfig="@xml/network_security_config"
UPDATE: If you have network security config such as: android:networkSecurityConfig="@xml/network_security_config"
不需要如上所示将纯文本流量设置为true,而是使用以下代码:
No Need to set clear text traffic to true as shown above, instead use the below code:
<?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显示ERR_CLEARTEXT_NOT_PERMITTED,尽管站点是HTTPS的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!