【问题标题】:Connect a Nativescript mobile app with a local api server将 Nativescript 移动应用程序与本地 api 服务器连接
【发布时间】:2019-12-29 15:57:28
【问题描述】:

所以我遇到了可能是一个典型问题,虽然似乎有几个相关的问题和答案herehere,但它们并不完全适用于我的问题。

我有一个本地 django 服务器 (localhost:8000) 正在开发中运行。 我想通过使用 Nativescript/Vue 和 Axios 来轻松开发一个连接到我的 django 服务器的 Nativescript 移动应用程序来进行 http 调用。我更喜欢在 ios 中开始开发/测试。我有两种使用 Nativescript 进行开发的选择 - 使用“tns run ios”在我的 mac 上调出 ios 模拟器,或者使用“tns preview”让我可以通过我的实际 iphone 进行测试。

当我通过 axios 对 http://localhost:8000/myapi 进行基本调用时,该调用产生的 http 状态结果为 null。

  • 我尝试使用环回地址(例如 10.0.2.2 - 我相信它可能适用于 Android 模拟器)但产生了相同的结果。
  • 我尝试使用我的 mac 的本地 IP 地址 - 即,而不是 localhost,使用我的本地 192.168.xx.xx 地址进行呼叫,但这不起作用

  • 我终于能够使用 ./ngrok 将我的本地服务器通过隧道连接到外部 IP 地址。现在可以了,但它并不理想,因为该 IP 地址可能会不时更改。

使用 Nativescript 预览或运行 ios 模拟器轻松连接到我的本地 api 服务器的建议解决方案是什么?

【问题讨论】:

  • 你的iOS模拟器/安卓模拟器是独立的虚拟设备,所以点击localhost是不行的,你必须使用机器的本地IP地址。默认情况下,iOSAndroid (v9 and above) 禁用 Http / 明文通信,您必须启用它们。
  • 是的,谢谢 - 我确实知道这一点,并且在我的 Info.plist 中进行了更改,并且如我的第二个项目符号中所述,我一直在尝试连接到我的本地 IP 地址。我终于弄清楚了我的问题。它不是在 Nativescript 方面,而是在 django 方面。对于任何来到此页面寻找答案的人,您的服务器(在本例中为 django 服务器)必须以本地 IP 地址而不是 localhost 启动 - 例如,python manage.py runserver 192.168.14.10:8000(或任何您的本地 IP 地址是)否则无论http/https如何,您都无法连接到服务器。
  • 还要注意,此解决方案确实适用于模拟器和我的物理 iphone 上的预览。
  • 我有一个类似的问题,并且能够让它在 Rails 应用程序中工作并在 iphone 上进行测试。 ngrok 绝对有效。但是我也可以通过指定 IP 地址来启动我的本地 Rails 应用程序:rails s -b [MY_MAC_IP_ADDRESS] -p 3000,然后相应地修改应用程序中的请求。

标签: mobile nativescript emulation nativescript-vue


【解决方案1】:

模拟器 API 路径:- http://10.0.2.2:5000。就像您的 API 本地路径是 http://198.168.1:5000/apihttp://localhost:5000/api 然后替换为 http://10.0.2.2:5000/api 并且端口地址与您的本地 API 端口相同。

路径- App_resources/Android/src/main/AndroidManifest.xml :-

android:usesCleartextTraffic="true" 添加应用标签

iOS 文件路径- App_Resources/iOS/Info.plist

<key>NSAppTransportSecurity</key>
 <dict>
  <key>NSExceptionDomains</key>
   <dict>
    <key>10.0.2.2:5000</key>
    <dict>
        <key>NSExceptionAllowsInsecureHTTPLoads</key>
        <true/>
    </dict>
  </dict>
</dict>

【讨论】:

    【解决方案2】:

    正如@Manoj 所述,您需要在为 ios 定义 here 的模拟器设置中允许 http。

    此外,如果您使用 django,您还必须执行以下操作:

    • 确定您的本地 IP 地址(通过 ifconfig for mac)

    • settings.py 中允许的主机包含此 IP 地址 - 例如,ALLOWED_HOSTS = ['192.168.14.14','localhost','127.0.0.1'] - 其中 192.168.14.14 是您的本地 IP 地址

    • 您将服务器作为这个 IP 地址而不是您的本地主机启动 - 例如,python manage.py runserver 192.168.14.14:8000

    这适用于模拟器(tns 运行 ios)和手机上的游乐场(tns 预览)

    【讨论】:

      猜你喜欢
      • 2017-04-18
      • 2021-07-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多