アプリがバックグラウンドにある間にサーバーにデータを送信するアプリケーションがあります。データ送信を担当するコードは次のとおりです。
-(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 を介して機能し、アプリがバックグラウンドになり、数分後にカスタム Bluetooth デバイスがデータを送信し、アプリケーションを一時停止モードから復帰させます。デバイスが 3G 経由で接続されている場合、データが iOS アプリケーションによって受信された後、サーバーへの送信に失敗します。Bluetooth経由で送信されたデータは、ローカルデータベースに保存されているため、受信されると確信しています.
また、もう一つ重要な事実があります。アプリケーションが Xcode を介して実行される場合、デバイスが 3G 経由で接続されていても、アプリケーションはバックグラウンドからデータを送信します。これを行うには、アプリを実行し、ホーム ボタンをタップしてバックグラウンドにします。
何が違うのか、ケーブルで Mac に接続したときにアプリの動作が異なる理由、データが 3G (または 2G) 経由で送信されない理由がわかりませんか?
追加情報:
ファイルをアップロードしようとしているのではなく、JSON をサーバーに送信するだけです。