我有一个应用程序在后台运行时将数据发送到服务器。下面是负责数据发送的代码:
-(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 发送到服务器。