Наличие двух устройств, которым необходимо сохранить передачу данных в фоновом режиме или в LockScreen.Передача файла фона gcdasyncsocket
Основной ресурс о фоновом доступене на https://developer.apple.com/library/ios/documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/BackgroundExecution/BackgroundExecution.html
До сих пор я с нетерпением жду, чтобы понять, как это предполагается реализовать такие вышеупомянутую поведение: в случае, когда передача находится в стадии разработки и один из приложения (или оба) входят в фон. Очевидно, что мы уже работаем с возобновляемым управлением передачей.
Я собирал окурки и ответы о, и я закончил с следующим:
Убедитесь каждый сокет backgroundable.
[socket performBlock:^{ [socket enableBackgroundingOnSocket]; }];
Чтобы сохранить фоновый режим, даже если в экране блокировки, я прочитал ответ о том, что мы должны иметь что-то вроде в конце didFinishLaunchingWithOptions но какой код находится в [себе] backgroundHandler метод?
BOOL backgroundAccepted = [[UIApplication sharedApplication] setKeepAliveTimeout:600 handler:^{ [self backgroundHandler]; }]; if (backgroundAccepted) NSLog(@"background handler accepted"); return YES;
метод делегата applicationDidEnterBackground из UIApplication показывает
- (void)applicationDidEnterBackground:(UIApplication *)application { NSLog(@"=== DID ENTER BACKGROUND ==="); if([[UIDevice currentDevice] respondsToSelector:@selector(isMultitaskingSupported)]) NSLog(@"Multitasking Supported"); else return; // Shall I remove my KVO observers when in background?? I guess NOT, right? :D //[[NSNotificationCenter defaultCenter] removeObserver:self]; UIBackgroundTaskIdentifier bgTask = [[UIApplication sharedApplication] beginBackgroundTaskWithExpirationHandler:^{ NSLog(@"End of tolerate time. Application should be suspended now if we do not ask more 'tolerance'"); // [self askToRunMoreBackgroundTask]; This code seems to be unnecessary. I'll verify it. }]; if (bgTask == UIBackgroundTaskInvalid) NSLog(@"This application does not support background mode"); else NSLog(@"Application will continue to run in background"); // Start the long-running task and return immediately. dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ });