从Playstore下载的我的应用无法调用网络服务

时间:2019-08-20 08:29:55

标签: web-services cordova

我最近开发了一个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>

最糟糕的部分。...设备上没有显示错误,只是无法正常工作。

2 个答案:

答案 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:debuggablehttps://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/