【发布时间】:2021-06-08 22:28:33
【问题描述】:
每当应用程序收到新的静默通知时,我都会配置一个本地网络调用,它会触发 setAction(),它是一个 POST 请求,将与刚刚收到的通知相关的信息发送到我们自己的服务器,在前台,网络调用的工作方式为预期,仅当应用程序处于后台时才会出现问题。我 100% 确定 setAction 正在被调用,但 它看起来像在它启动 dataTask 时网络调用超时,我尝试使用线程,但我不确定问题就在那里。
注意事项:
-
为了确保不是网络问题,我还尝试了其他 HTTP 请求调用配置
-
如果我快速发送 2 个静默通知,它会触发 1 个 setAction()
func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable: Any], fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void) { // Network call tellMe.setAction() completionHandler(UIBackgroundFetchResult.newData)}
我已经能够检索到的一些“日志”(真实的 https URL 被隐藏起来,例如)。
Error Domain=NSURLErrorDomain Code=-1001 "The request timed out." UserInfo={_kCFStreamErrorCodeKey=-2103, _NSURLErrorFailingURLSessionTaskErrorKey=LocalDataTask <92F80B2F-3D6A-4089-AC76-D160B584712C>.<1>, _NSURLErrorRelatedURLSessionTaskErrorKey=(
"LocalDataTask <92F80B2F-3D6A-4089-AC76-D160B584712C>.<1>"
), NSLocalizedDescription=The request timed out., NSErrorFailingURLStringKey=https://actualURL.com, NSErrorFailingURLKey=https://actualURL.com, _kCFStreamErrorDomainKey=4}
The request timed out.
提前谢谢大家,
【问题讨论】:
-
您在网络请求完成之前呼叫
completionHandler。这告诉操作系统可以再次暂停您的应用程序。推迟这个调用,直到你的网络请求完成(但一定要在 30 秒内调用它,否则会发生坏事)。
标签: swift multithreading networking usernotifications