Поддерживать сеанс связи Multipeer в фоновом режиме с помощью BackgroundTask?

Я пытаюсь поддерживать сеанс MultipeerConnectivity, когда приложение временно входит в фоновый режим, поэтому я подумал об использовании фоновой задачи, как я видел несколько раз здесь … Проблема в том, что я понятия не имею, как «поддерживать», сеанс с UIBackgroundTask, может кто-нибудь, пожалуйста, напишите подсказку

Я не забочусь о рекламодателях / браузерах, все в порядке, чтобы остановить их, но я бы хотел, чтобы сессия не отключалась, так как пересоединение на данный момент супер глючит.

Отвечая на мой собственный вопрос, надеясь, что это поможет людям в той же ситуации. Для людей, не знакомых с разработкой iOS, «использование фоновой службы» просто означает включение опции «Фоновые режимы» на вкладке «Возможности» вашей цели. Это само по себе должно дать вашему приложению около 10 минут жизни на заднем плане, прежде чем оно будет убито.

Но, когда приложение переходит на задний план, я использую «backgroundTimeRemaining», чтобы узнать, сколько времени у меня осталось, оно начинается всего с 180 (в секундах, так что 3 минуты), но цикл печати продолжал работать в течение трех минут , что означает необходимость ручного кодирования того, что должно произойти, когда время будет достигнуто.

Для Multipeer Connectivity этого достаточно, чтобы поддерживать соединение живым, когда приложение входит в фон, и оно все равно будет получать все сообщения / потоки без проблем.

Ради стабильности, я делаю некоторые очистки следующим образом:

В appDelegate.h

@property (nonatomic) UIBackgroundTaskIdentifier backgroundTask; //declaring a background task 

В appDelegate.m

 - (void)applicationDidEnterBackground:(UIApplication *)application { self.backgroundTask = [application beginBackgroundTaskWithExpirationHandler:^ { //This is called 3 seconds before the time expires //Here: Kill the session, advertisers, nil its delegates, // which should correctly send a disconnect signal to other peers // it's important if we want to be able to reconnect later, // as the MC framework is still buggy [application endBackgroundTask:self.backgroundTask]; self.backgroundTask = UIBackgroundTaskInvalid; //Invalidate the background task }]; } - (void)applicationDidBecomeActive:(UIApplication *)application { // Here: We should init back the session, start the advertising and set the delegates from scratch // This should allow the app to reconnect to the same session with more often than not self.backgroundTask = UIBackgroundTaskInvalid; //Here we invalidate the background task if the timer didn't end already } 

Я задал этот вопрос один раз на форумах разработчиков Apple. Один из сотрудников Apple сказал мне, что в основном все соединения Multipeer должны считаться офлайновыми, когда ваше приложение не находится на переднем плане.

Interesting Posts

Как вы показываете UIAlertView над Apple Pay PKPaymentAuthorizationViewController?

OpenGL ES 2D – z-порядок, буфер глубины и рисование по порядку

Как получить время прослушивания MPMediaItem (песни) (даты)

Текущее местоположение в пункт назначения с использованием карт или карт Google для iphone iOS Xcode 4

Добавить границу в UIImage внутри UITextView

Сколько urlRequests обрабатывается nsurlconnection

Как я могу изменить страницу при нажатии точек UIPageControl

Пользовательские методы взаимодействия со многими пользователями, не вызываемые при выполнении правила удаления

Увеличьте масштаб просмотра веб-страниц при появлении

Как получить фотографию из UITextView после добавления ее с помощью NSAttributedString?

Воспроизведение сири-кнопки

Как перемещаться по массиву <Словарь <String, String >> с помощью Swift

Чтение данных из Firebase и сохранение в массив (Swift)

Чтение трассировки стека iOS Webkit

В чем разница между NSNetService и GCDAsynSocket?

Давайте будем гением компьютера.