问题描述
我正在使用macos Rider开发适用于Android和iO的Xamarin应用。我有一个本地api,我正在尝试通过该应用使用,但看来该应用无法访问该api。这种情况在Android和iOS上都会发生。
在Android上,我尝试将api更改为http://10.0.2.2:5000
。事实是,在使用模拟器浏览器时,我可以访问api端点,但是尝试通过该应用程序访问时,会在加载时卡住。
使用iPhone仿真器时,出现错误,我应该使用SSL才能通过仿真器访问api。
我尝试在Android上进行调试,以便确定api确实是这里的问题(我发现可以通过模拟器浏览器访问它很奇怪),但是我无法弄清楚,因为没有抛出异常。到达下面的代码时,它似乎只是在“停止”。
总而言之,一些事实:
- 该应用在iOS和Android上无法正常运行
- 该api正在运行,并且我尝试在Android上使用
http://10.0.2.2:5000
,在iPhone上使用http://localhost:5000
。我可以通过模拟器浏览器和Postman访问该应用程序。这也给了我结果,因此与此相关的数据库或api似乎没有什么问题。 - 我正在使用Mac(Jetbrains Rider)
- 当我使用服务器上运行的相同api时,它有效工作
解决方法
如果要访问到任何站点的HTTP连接,则需要在特定平台上添加以下代码
在iOS中
将以下行添加到 info.plist
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>
在Android中
将行android:usesCleartextTraffic="true"
添加到 AndroidManifest ,如下所示
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" android:versionCode="1" android:versionName="1.0" package="com.companyname.app32">
<uses-sdk android:minSdkVersion="21" android:targetSdkVersion="28" />
<application android:label="App32.Android" android:theme="@style/MainTheme" android:usesCleartextTraffic="true"></application>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
</manifest>