我构建了一个移动应用程序。此应用程序在iOS模拟器、Android模拟器和Android真实设备上运行得非常好。但当我在TestFlight上发布并安装在真正的iOS设备上时,这个应用程序就不起作用了。我没有任何错误。我的微调器(激活器指示器(一直在运行,我无法从HttpResponse获得任何响应。我使用Web服务构建了此应用程序因此我使用http://46.221.....发布或获取请求的url。我认为iOS由于安全原因不支持http请求。但如果这是真的,那么为什么这个应用程序在模拟器上运行得很好?我找不到任何解决方案。这是我的代码部分:
public async Task<BSUser> ValidateUser(string userName, string password)
{
string url = Xamarin.Essentials.Preferences.Get(Constants.URL_KEY, "") + "/api/Validateuser";
HttpClient _Client = new HttpClient();
var data = new Dictionary<string, string>
{
{"userName", userName},
{"password", password}
};
string jsonData = JsonConvert.SerializeObject(data);
HttpContent content = new StringContent(jsonData, Encoding.UTF8, "application/json");
try
{
HttpResponseMessage httpResponse = await _Client.PostAsync(url, content);
if (httpResponse.IsSuccessStatusCode)
{
var responseData = await httpResponse.Content.ReadAsStringAsync().ConfigureAwait(false);
var result = JsonConvert.DeserializeObject(responseData).ToString();
UserInfo userInfo = JsonConvert.DeserializeObject<UserInfo>(result);
BSUser value = new BSUser();
value.UserName = userInfo.userCode;
return value;
}
else
{
return null;
}
}
catch (SystemException)
{
return null;
}
}
在此处输入图像描述
我发现了我的项目的问题。它与HTTPS-HTTP或安全状况无关。这太荒谬和不合逻辑了,但这才是真正的问题。我的应用程序在任何iOS模拟器上都能很好地工作,但模拟器的最低版本是Visual Studio中的iPhone-8。但是,当我在iPhone-6的真实设备上安装应用程序时,我收到了Newtonsoft.Json.JsonSerializationException错误。但是我的HttpResponse返回了200OK,并且我看到所有来自我的服务的值都是json。我认为旧版本和新版本的iPhone之间存在一些差异,以转换Json Serialization。
看起来你真的应该利用HTTPS而不是HTTP。您可以参考这些页面了解更多信息:
https://www.hackingwithswift.com/example-code/system/how-to-handle-the-https-requirements-in-ios-with-app-transport-security
https://developer.apple.com/documentation/security/preventing_insecure_network_connections?language=objc
这就是ios中ATS的问题,如果你想使用HTTP,你可以对其进行配置。https://learn.microsoft.com/en-us/xamarin/ios/app-fundamentals/ats#configuring-ats选项。
其他人遇到了和你一样的问题:Xamarin Forms,iOS不会在WebView 中打开链接