Tôi có một ứng dụng gửi dữ liệu đến máy chủ trong khi ứng dụng ở chế độ nền. Đây là mã chịu trách nhiệm gửi dữ liệu:Dữ liệu không được gửi từ nền thông qua 3G
-(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;
}
Vì vậy, inputData
là từ điển đơn giản có chuỗi.
Một phương pháp doRequest
được dựa trên một NSURLSession và về cơ bản trông như thế này:
-(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];
}
Như tôi đã nói, mọi thứ hoạt động thông qua Wi-Fi, ứng dụng đi vào nền, và sau vài phút, một thiết bị bluetooth tùy chỉnh gửi một số dữ liệu và đánh thức ứng dụng từ chế độ bị tạm ngưng. Sau khi ứng dụng iOS nhận được dữ liệu, nó không gửi được đến máy chủ nếu thiết bị được kết nối qua 3G. Tôi tích cực rằng dữ liệu được gửi qua bluetooth được nhận vì nó được lưu trữ trong cơ sở dữ liệu cục bộ.
Ngoài ra còn có một thực tế quan trọng khác. Nếu một ứng dụng được chạy qua Xcode, ngay cả khi thiết bị được kết nối qua 3G, ứng dụng sẽ gửi dữ liệu từ nền. Để thực hiện việc này, tôi chạy một ứng dụng, sau đó nhấn vào nút Trang chủ để đưa vào nền.
Không biết sự khác biệt là gì và tại sao ứng dụng hoạt động khác khi được gắn cáp với máy Mac và tại sao dữ liệu không được gửi qua 3G (hoặc thậm chí 2G)?
Thông tin bổ sung:
Tôi không cố gắng tải tệp lên, mà chỉ gửi JSON tới máy chủ.
sau bao nhiêu thời gian bạn có dữ liệu bluetooth trong thiết bị của mình ?? – CodeChanger
@CodeChanger Ứng dụng đang nhận dữ liệu từ bluetooth sau mỗi năm phút hoặc ít hơn. Tôi chắc chắn rằng dữ liệu từ một bluetooth được nhận bởi vì tôi lưu trữ nó trong một cơ sở dữ liệu sqlite địa phương. – Whirlwind
Ok như vậy theo kiến thức của tôi sau khi ứng dụng 3.0 Min bị tạm ngưng và bạn phải xử lý chế độ đó và gọi dịch vụ của bạn bằng 'bgTask'. – CodeChanger