Android 9上的ERR_CLEARTEXT_NOT_PERMITTED,允许使用域明文

问题描述

在Android 10设备上,我在http服务器上的webview中收到ERR_CLEARTEXT_NOT_PERMITTED错误,但仅在某些页面上,即使我使用network_security_config来允许域。我只能通过使用打开所有域来解决错误。我该如何解决这个问题,以便只允许我的域,而不会收到错误,但是不使用?

Logcat:

def renameObject():
    a = cmds.ls(sl=True)
    txt = cmds.textField('txtName',q=True,tx=True)
    
    cmds.rename('a',txt)
    cmds.confirmDialog(icn='information',message='Done!')
    cmds.showWindow()
    return

cmds.window(title='Rename Object')
cmds.columnLayout(adj=1)
cmds.text(label= 'Insert Name',w=300,h=30)
cmds.separator()
cmds.textField('txtName')
cmds.button(label='Rename',width=300,c=lambda*args:'renameObject()')

cmds.showWindow()

网络安全配置xml:

07:54:09.004 com.myserver.myapp D/myapp: Webview.onPageStarted called on http://myserver.com/myapp/index.PHP?view=discrete
07:54:09.232 com.myserver.myapp I/myapp: onPageFinished called.
07:54:15.938 com.myserver.myapp D/myapp: Webview.onPageStarted called on http://myserver.com/myapp/index.PHP?view=about
07:54:15.958 com.myserver.myapp I/myapp: onReceivedError called.
07:54:15.958 com.myserver.myapp I/myapp: Web Load Error:net::ERR_CLEARTEXT_NOT_PERMITTED
07:54:16.012 com.myserver.myapp I/myapp: onPageFinished called.

解决方法

根本原因是投放第三方广告内容(Google Ads)的javascript不使用https。

在onReceivedError中添加了代码,以记录导致问题的URL ...

public void onReceivedError(WebView view,WebResourceRequest request,WebResourceError error) {
            super.onReceivedError(view,request,error);
            Log.i(TAG,"onReceivedError called for URL "+ request.getUrl().toString());
}