我最近开发了一个cordova应用,该应用已上传到Google Play商店。我在手机和模拟器上测试了这个应用程序数周,一切正常。但是,当我从Playstore下载相同的应用程序时,它无法调用任何Web服务,因此不会显示任何内容。
科尔多瓦:9.0.1
npm:6.10.1
cordova-android:7.0.0
我遍历了每一行代码,但似乎找不到问题,我将对window.localStorage
的每次调用都替换为全局变量,以便能够解决我认为的问题
<?xml version='1.0' encoding='utf-8'?></code>
<widget defaultlocale="en-US" id="com.test.fr" version="1.0.6" android-versionCode="100050" xmlns="http://www.w3.org/ns/widgets" xmlns:cdv="http://cordova.apache.org/ns/1.0" xmlns:vs="http://schemas.microsoft.com/appx/2014/htmlapps">
<content src="index.html" />
<access origin="*" />
<preference name="SplashScreen" value="screen" />
<preference name="windows-target-version" value="8.1" />
<allow-intent href="http://*/*" />
<allow-intent href="https://*/*" />
<allow-intent href="tel:*" />
<allow-intent href="sms:*" />
<allow-intent href="mailto:*" />
<allow-intent href="geo:*" />
<platform name="android">
<allow-intent href="market:*" />
</platform>
<platform name="ios">
<allow-intent href="itms:*" />
<allow-intent href="itms-apps:*" />
</platform>
<platform name="android">
<icon src="www/res/icon/android/fr_mobile_icon.png" density="ldpi" />
<icon src="www/res/icon/android/fr_mobile_icon.png" density="mdpi" />
<icon src="www/res/icon/android/fr_mobile_icon.png" density="hdpi" />
<icon src="www/res/icon/android/fr_mobile_icon.png" density="xhdpi" />
</platform>
<plugin name="cordova-plugin-device" version="2.0.2" />
<plugin name="cordova-plugin-websql" version="0.0.10" />
<plugin name="cordova-plugin-dialogs" version="2.0.1" />
<plugin name="cordova-plugin-file" version="4.3.3" />
<preference name="target-device" value="handset" />
<preference name="BackupWebStorage" value="local" />
<preference name="android-targetSdkVersion" value="28" />
<preference name="android-minSdkVersion" value="17" />
<preference name="android-maxSdkVersion" value="29" />
<preference name="AndroidPersistentFileLocation" value="Compatibility" />
<plugin name="cordova-custom-config" spec="5.1.0" />
</widget>
最糟糕的部分。...设备上没有显示错误,只是无法正常工作。
答案 0 :(得分:1)
尝试使用android:usesCleartextTraffic="true"
将<application>
添加到AndroidManifest.xml
中的config.xml
或如下所示中
<platform name="android">
<edit-config file="app/src/main/AndroidManifest.xml" mode="merge" target="/manifest/application">
<application android:usesCleartextTraffic="true" />
</edit-config>
</platform>
android:usesCleartextTraffic 指示应用程序是否打算使用明文网络流量,例如明文HTTP。默认值 面向API级别27或更低的应用的值是“ true”。的应用 目标API级别28或更高级别默认为“ false”。 More info
明文是任何传输或存储的非 加密或打算加密。当应用与之通信时 使用明文网络流量(例如HTTP)的服务器, 会存在窃听和篡改内容的风险,这就是为什么在最新的Android设备中,默认情况下将其设置为
false
。
答案 1 :(得分:0)
首先,您需要弄清楚此错误的输出是什么。要允许在发布版本上进行调试,请在android:debuggable
(https://developer.android.com/guide/topics/manifest/application-element)的application
标签上使用AndroiManifest.xml
。
然后,将设备插入计算机,并在开发设置中(在设备上)启用usb debugging
。然后,导航至chrome://inspect/#devices
-您的设备应该会出现,并将成为您的Web视图的链接。
在检查器打开的情况下,执行请求并在“控制台”选项卡上查找错误。
我认为该错误很有可能是CORS错误,可能是您的生产服务器启用了CORS,然后您需要正确使用cordova-plugin-whitelist
来向服务器发送origin
,请阅读更多信息大约cordova-plugin-whitelist
此处:https://cordova.apache.org/docs/en/latest/reference/cordova-plugin-whitelist/