ios - LocationManager.DidDetermineState 中的 HTTP 请求

标签 ios xamarin xamarin.ios ibeacon

我已经编写了 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/

相关文章:

android - Xamarin.Forms Android $(TargetFrameworkVersion) 错误

android - 它到底是什么 Xamarin.android.support.v7.appcompat

localization - MonoTouch 和上传的二进制文件中的本地化

c#-4.0 - 如何在 Xamarin Forms 中更改 Windows Phone 上工具栏的背景颜色?

php - 推送通知没有失败但没有被发送

iphone - 为 iPhone 应用程序制作一个计时器来稍微延迟几个音频 channel ?

ios - AudioUnitInitialize 失败,错误代码为 1852008051

iphone - iPhone monotuch 中带有可选项目的警报 View

c# - 无法在 Xamarin.Android 项目中保存布局

ios - Xamarin iOS : navigation bar not showing after pushing view