Ionic Framework:Android 模拟器无法访问主机上的服务

Ionic Framework : Android Emulator unable to access services on host machine

我正在尝试实施 Ionic 示例教程,网址为 http://ccoenraets.github.io/ionic-tutorial/install-ionic.html

我能够在 Android 虚拟设备上部署示例应用程序。但是,该应用无法访问笔记本电脑上托管的 REST 服务。我正在尝试通过将 "localhost" 更改为“10.0.2.2”来访问该服务。我还在 config.xml

中添加了以下内容

<access origin="*"/>

有人可以告诉我如何解决这个问题吗?

如果您使用的是最新版本的 cordova 之一,则必须安装 cordova plugin whitelist:

cordova plugin add cordova-plugin-whitelist

如果您使用选项 --save,它会在您的 config.xml 文件中添加一个部分:

cordova plugin add cordova-plugin-whitelist --save

您可以阅读一些有用的信息here,了解最近的 cordova 更新中的重要变化。

你需要有这个:

<access origin="*" />

在您的 config.xml 文件中设置。

如果您使用的是 android 模拟器,则必须在 10.0.2.2 中更改 localhost,当然,您必须如果端口与默认值不同,请添加端口:80。

参考here

如果您使用 Genymotion比 android 模拟器 好得多),IP 地址将是:10.0.3.2 + 端口号。

示例

Android 模拟器http://10.0.2.2:6050/api/checkstatus
Genymotion: http://10.0.3.2:6050/api/checkstatus

如果您想从命令行获得 android 模拟器 运行 的调试信息:

adb -s emulator-5554 logcat

如果您运行在 IIS Express 中连接 Web 服务器,您的请求很可能无法到达主机。 这里有几个选项。我最喜欢的解决方案是使用 iisexpress-proxy.
您可以将其安装为 npm 包:

npm install -g iisexpress-proxy

和运行它指定代理端口:

iisexpress-proxy 6050 to 3000

现在您可以更改模拟器的端口:

Android 模拟器http://10.0.2.2:3000/api/checkstatus
Genymotion: http://10.0.3.2:3000/api/checkstatus

最好的解决方案可能是使用真实的 android 设备并使用 chrome 检查调试您的应用程序。

你必须:

  • 在您的手机上启用 USB 调试
  • 在 chrome 浏览器中访问此 link (chrome://inspect/#devices)

一旦您的设备显示在列表中,您可以按 F12 并查看您在浏览器控制台中遇到的错误类型。

您甚至可以使用端口转发将请求转发到内部服务器;基本上,您可以通过要定义的虚拟端口访问笔记本电脑上的托管服务。