gpt4 book ai didi

ios - swift 3+,URLsession,在后台明显随机失败

转载 作者:行者123 更新时间:2023-11-30 12:20:15 26 4
gpt4 key购买 nike

我对 swift(1 周)和 iOS 编程相当陌生,我的问题是我似乎错过了一些基本的理解。下面您会看到一个由后台通知触发的函数。我可以并且已经验证我是否可靠地收到后台通知并且应用程序处于事件状态(在控制台上打印原始数据值)只要应用程序位于前台,一切都按预期工作,它就会被触发并发送单个 https 请求。后台触发器每分钟都会出现一个计时器。

现在,当应用程序进入后台时,整个事情都会发生变化。在这种情况下,我仍然通过通知(控制台打印输出)获取触发器,并且我可以在调试器中看到相同的功能,该功能就像前台的魅力一样。它仍然有效,仍然会被触发,但数据包的发送频率仅为 2 到 30 分钟之间的随机发送。

let config = URLSessionConfiguration.background(withIdentifier: "org.x.Reporter")
class queryService {
let defaultSession = URLSession(configuration: config)
var dataTask: URLSessionDataTask?


var errorMessage = ""


func getSearchResults(baseURL: String, searchTerm: String) {
dataTask?.cancel()
config.requestCachePolicy = .reloadIgnoringLocalAndRemoteCacheData;
config.timeoutIntervalForRequest = 10

if var urlComponents = URLComponents(string: "https://host.com/reportPosition.php") {
urlComponents.query = "\(searchTerm)"
guard let url = urlComponents.url else { return }

dataTask = defaultSession.dataTask(with: url)
}
// 7
dataTask?.resume()
}
}

最佳答案

尝试使用dataTaskWithCompletion,这样您就可以看到错误中出了什么问题。

    URLSession.shared.dataTask(with: URL.init(string: "")!) { (data, response, error) in
if error != nil {
// Error
}
}.resume()

https://developer.apple.com/documentation/foundation/urlsession/1410330-datatask

编辑

您想要做的是,对于后台,您可以通过delegate回调获得完成,因此当您init时,您的URLSession code> 使用以下 func

执行此操作
URLSession.init(configuration: URLSessionConfiguration.init(), delegate: self, delegateQueue: OperationQueue.init())

https://developer.apple.com/documentation/foundation/urlsession/1411597-init

然后让你的类符合 URLSessionDelegate 像这样

class queryService, URLSessionDelegate {

然后实现此处列出的委托(delegate)方法以进行回调

https://developer.apple.com/documentation/foundation/urlsessiondelegate

编辑2

这是关于它的很好的教程 https://www.raywenderlich.com/158106/urlsession-tutorial-getting-started

关于ios - swift 3+,URLsession,在后台明显随机失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44874409/

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