我已经编写了 IBeacon 应用程序,我的目标是在应用程序处于后台时发送 Http 请求。我使用 DidDetermineState 事件来确定区域的进入/离开。问题是,当事件被调用时,Http 请求意外地停止在某处。没有抛出异常,无法完成请求。
奇怪的是通话在不同的线路上随机停止。
[Export ("locationManager:didDetermineState:forRegion:")]
public void DidDetermineState (CLLocationManager manager, CLRegionState state, CLRegion region)
{
string message = "";
if (state == CLRegionState.Inside) {
message = "Inside";
var url = String.Format ("{0}About", "https://myAPIURl/");
try {
var _httpClient = new HttpClient ();
_httpClient.Timeout = TimeSpan.FromMilliseconds (30000);
lock (_httpClient) {
try {
var getResult = _httpClient.GetAsync (url).Result;
if (getResult.IsSuccessStatusCode) {
var contentString = getResult.Content.ReadAsStringAsync ().Result;
var contentObject = JsonConvert.DeserializeObject<AboutUsModel> (contentString);
message = "result ok";
}
}
//ncrunch: no coverage start
catch (Exception e) {
message = e.Message;
}
}
} catch (Exception ex) {
message = ex.Message;
}
}
if (state == CLRegionState.Outside) {
message = "Outside";
}
}
P.S当应用处于前台模式时,请求发送成功。
感谢任何帮助!
最佳答案
在后台获得信标回调后,Apple 只给你大约五秒的后台执行时间。 如果网络服务响应不够快,应用程序将直接挂起。
解决此问题的典型方法是请求额外的后台运行时间——您只需请求即可获得最多 3 分钟的运行时间。我写了一篇关于这个过程的博文 here.这篇博文专门针对延长背景测距时间,但同样的技术也适用于延长 Web 服务回调的时间。
关于ios - LocationManager.DidDetermineState 中的 HTTP 请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34136989/