gpt4 book ai didi

ios - iOS 后台模式下调试网络通信

转载 作者:行者123 更新时间:2023-11-30 14:05:57 26 4
gpt4 key购买 nike

我正在开发一个 iOS 应用程序,它利用 location 后台模式来跟踪 user visits然后将一些数据发送到我的服务器。然而,我遇到了一些奇怪的网络通信问题。 唯一的症状是并非所有收集的数据都会发送到服务器。

以下是有关该问题的更多信息:

  1. 我的服务器会记录收到的所有内容。没有服务器端错误,并且每个客户端请求都已成功记录。
  2. 当调用 locationManager:didVisit: 方法时,客户端应用会创建本地通知。当您到达和离开某个地点时,此通知会按预期显示。然后,它通过 HTTPS 调用服务器并发布另一个通知,该通知并非每次都会出现。整个设置如下所示:

    // This code is executed from locationManager:didVisit: when the app is in background.
    let myVisit: CLVisit! = ... // the received visit
    self.postLocalNotification("Visit received!", visit: myVisit)

    let task = UIApplication.sharedApplication().beginBackgroundTaskWithExpirationHandler(nil)
    Alamofire.request(.POST, apiMethod("visit"), parameters: params, encoding: .JSON)
    .responseJSON { (request, response, JSON, error) in
    // This gets executed only some time, wtf?
    self.postLocalNotification("Visit reported!", visit: myVisit)
    UIApplication.sharedApplication().endBackgroundTask(task)
    }

因此,我断定我做错了什么,但我不明白是什么。我查过the article on background app execution我的应用程序似乎符合它。我还能错过什么?

最佳答案

您的应用程序是否已注册以支持后台模式?

由于您收到位置更新,您的应用应该有资格设置为在后台模式下运行。在 plist 文件中设置“必需的背景模式”。

这将让它在后台完全运行,并且您可以摆脱 beginBackgroundTask 行。

beginBackgroundTaskWithExpirationHandler 方法通常用于请求一些额外的时间来完成当前任务,前提是您的应用程序位于前台并且在任务中间移动到后台。对我来说,听起来您想在全后台模式下运行。

话虽如此,您仍然应该检测到您的程序处于后台,并避免运行不需要的 CPU 密集型任务以节省电池生命周期。

关于ios - iOS 后台模式下调试网络通信,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32414238/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com