gpt4 book ai didi

ios - 数据不是通过 3G 从后台发送的

转载 作者:可可西里 更新时间:2023-11-01 04:40:57 25 4
gpt4 key购买 nike

我有一个应用程序在后台运行时向服务器发送数据。下面是负责发送数据的代码:

-(bool) sendStats: (MCStatsSender*) val{

if(![self checkInternet]){ //Using Reachability here

return false;
}

NSDictionary *inputData = [NSDictionary dictionaryWithObjectsAndKeys:
self.propertyA.value, "key1",
val.data, "key2",
nil];


[myNetworkManager doRequest:[myRequestManager createWithStringAndDictionary:MY_URL Data:inputData handler:myHandler user:val]];
return true;
}

所以 inputData 是一个简单的字符串字典。

doRequest 方法基于 NSURLSession,基本上如下所示:

-(void) doRequest: (MCRequest*) request{

[tasks addObject:request];

if(m_session == nil){
NSURLSessionConfiguration* config = [NSURLSessionConfiguration backgroundSessionConfigurationWithIdentifier:[NSString stringWithFormat:@"key-%lu",reqid]];
m_session = [NSURLSession sessionWithConfiguration:config delegate:self delegateQueue:nil];
}

NSURLSessionDataTask* task = [m_session dataTaskWithRequest:request.generatedRequest];
request.reqId = task.taskIdentifier;
[task resume];
}

正如我所说,一切都通过 Wi-Fi 工作,应用程序进入后台,几分钟后,自定义蓝牙设备发送一些数据并将应用程序从挂起模式唤醒。 iOS 应用程序收到数据后,如果设备通过 3G 连接,则无法将其发送到服务器。我肯定收到了通过蓝牙发送的数据,因为它存储在本地数据库中。

还有一个重要的事实。如果应用程序通过 Xcode 运行,即使设备通过 3G 连接,应用程序也会从后台发送数据。为此,我运行了一个应用程序,然后点击主页按钮将其置于后台。

不知道有什么区别,为什么应用程序在通过电缆连接到 Mac 时表现不同,以及为什么数据不通过 3G(甚至 2G)发送?

附加信息:

我不是要上传文件,而是只是将 JSON 发送到服务器。

最佳答案

这似乎与电源使用有关。 URL session 提供的后台上传很方便,它是根据操作系统的要求提供给您的 - 它提供发送数据但可以选择何时发送。

影响数据何时发送的因素包括设备是否连接到电源、数据连接的质量(发送数据需要多长时间和多少电量)、设备还在做什么(它可以合并多个上传)...

因此,您不能猜测或依赖在后台的任何特定时间执行的任何任务。

这种测试真的应该只在设备上完成,而不是连接到 Xcode,因为它会影响测试。相反,使用诸如 Charles 代理之类的东西来记录网络请求并使用该设备,将其放置一段时间,然后可能打开并使用其他应用程序。您应该会看到数据最终被发送,但您将不得不等待。

关于ios - 数据不是通过 3G 从后台发送的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40487745/

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