的Ionic 4 Http失败响应(未知url):0在真实的设备上调用API时发生未知错误

ie3xauqp  于 2023-02-20  发布在  Ionic
关注(0)|答案(8)|浏览(275)

我有一个离子4应用程序调用.NET核心后端API。它可以在Chrome浏览器上正常工作,但当我在Android设备上运行APK时,响应是:

{"headers":{"normalizedNames":{},"lazyUpdate":null,"headers":{}},"status":0,"statusText":"Unknown Error","url":null,"ok":false,"name":"HttpErrorResponse","message":"Http failure response for (unknown url): 0 Unknown Error","error":{"isTrusted":true}}

关于标题I,附加以下选项:

const httpOptions = {
    headers: new HttpHeaders({
        "Content-Type": "application/x-www-form-urlencoded; charset=utf-8" , 
        "Access-Control-Allow-Origin": "*", 
        "Access-Control-Allow-Headers": "Origin, Content-Type, X-Auth-Token, Accept, Authorization, X-Request-With",
        "Access-Control-Allow-Credentials" : "true",
        "Access-Control-Allow-Methods" : "GET, POST, DELETE, PUT, OPTIONS, TRACE, PATCH, CONNECT"  
       }) 
};

我已经安装了插件: cordova -插件-离子-网络视图
并使用“@angular/common/http”中的HttpClient

远程托管我的API,未使用ssl证书!

我在谷歌上搜索了所有的解决方案,但没有一个能解决我的问题

6ioyuze2

6ioyuze21#

我也面临同样的问题,我的条件如下:

  • 我的Ionic 4应用程序在Chrome上运行良好,但当我在模拟器上运行时,它给了我 “未知错误” 问题。
  • 我的后台是Laravel 6.
  • 我在Mac上使用Android Studio和Visual Studio代码。
  • 我试着调用服务器上的API。

我尝试了很多方法来解决这个问题。我确信这不是一个CORs的问题,因为我已经处理好了。
那么你怎么能修正这样的问题呢?你只需要加一行,比如。

android:usesCleartextTraffic="true"

在此标签中:

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

在你的清单文件中,

[yourProject]/android/app/src/main/AndroidManifest.xml

你就可以走了。

to94eoyn

to94eoyn2#

我建议你检查一下:
1)在服务器端启用CORS
2)如果您的API不是https,请确保android webview没有阻止流量。强制启用cleartextTraffic(默认情况下禁用)。在应用中添加安全配置,如下所示。安装参考here

<edit-config file="app/src/main/AndroidManifest.xml" mode="merge" target="/manifest/application" xmlns:android="http://schemas.android.com/apk/res/android">
            <application android:usesCleartextTraffic="true" />
</edit-config>
5cnsuln7

5cnsuln73#

经过两天的努力,我终于解决了这个问题!我将API调用从'@angular/common/http'迁移到原生http '@ionic-native/http/ngx',并使用以下头文件:

// create headers data
        const headers = {
          "Content-Type": "application/x-www-form-urlencoded; charset=utf-8", 
          'Accept': 'application/json, text/plain',
          "cache-control": "no-cache", 
          "Access-Control-Allow-Origin": "*", 
          "Access-Control-Allow-Headers": "Origin, Content-Type, X-Auth-Token, Accept, Authorization, X-Request-With, Access-Control-Request-Method, Access-Control-Request-Headers",
          "Access-Control-Allow-Credentials" : "true",
          "Access-Control-Allow-Methods" : "GET, POST, DELETE, PUT, OPTIONS, TRACE, PATCH, CONNECT",  
          };

对我来说的缺点,从现在开始我必须在一个真实的的设备上测试。

2hh7jdfx

2hh7jdfx4#

4 Possible Case 

1: Check your Internet connection 
2: Cors must be enabled from Backend
3:   android:usesCleartextTraffic="true" must be added in config.xml and android manifest file in the resource folder

4: Backend IP or domain should be configured in /resources/android/xml/network_security_config.xml
ifsvaxew

ifsvaxew5#

我遇到了这个问题,我在API中添加了cors条件并更改了WebViewer版本,但错误仍然存在。您可以通过修改运行API的服务器的ip来解决这个问题。
/resources/android/xml/network_security_config.xml

xbp102n0

xbp102n06#

localhost不支持任何android应用。如果您尝试使用localhost访问API,android会考虑localhost0.0.0.0:

yqkkidmi

yqkkidmi7#

我也面临同样的问题,我的条件如下:
我的Ionic 6和Capacitor应用程序在Chrome上运行良好,但当我在模拟器上运行时,它给了我"未知错误"的问题。
我的后台是AWS。
我在Mac上使用Android Studio和Visual Studio代码。我试图调用服务器上的API。我尝试了许多方法来解决这个问题。我确信这不是一个CORS问题,因为我已经解决了它。
那么你怎么能修正这样的问题呢?你只需要加一行,比如。

android:usesCleartextTraffic="true"

在此标签中:

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

enter image description here,即,

[yourProject]/android/app/src/main/AndroidManifest.xml

如果你正在使用ionic和cordova,最好在side config.xml中添加usecleartraffic,如果你正在使用cordova,下面是一个工作应用程序的示例。

<platform name="android">
        <preference name="android-targetSdkVersion" value="32" />
        <edit-config file="app/src/main/AndroidManifest.xml" mode="merge" target="/manifest/application">
            <application android:usesCleartextTraffic="true" />
        </edit-config>

你就可以走了。

oalqel3c

oalqel3c8#

以下更改是我将API端点从http://localhost:7071/data更改为http://192.168.1.11:7071/data的最终工作,其中192.168.1.11是主机的本地IP地址。

相关问题