Согласно документации на яблоко «Если приложение перемещается в фоновом режиме, среда останавливает рекламу, просматривает и отключает любые открытые сеансы. После возврата на передний план фреймворк автоматически возобновляет рекламу и просмотр, но разработчик должен восстановить любые закрытые сессии»См: Apple doc
Один из способов расширения соединения заключается в следующем
Отвечая на мой собственный вопрос, надеясь, что это поможет людям в такой же ситуации. Для людей, не знакомых с разработкой iOS, «использование фоновой службы» просто означает включение опции «Фоновые режимы» на вкладке «Возможности» вашей цели. Это само по себе должно дать вашему приложению около 10 минут жизни на заднем плане, прежде чем оно будет убито.
Но, когда приложение переходит на задний план, я использую «backgroundTimeRemaining», чтобы узнать, сколько времени у меня осталось, оно начинается только с 180 (в секундах, так что 3 минуты), но цикл печати продолжал работа прошла три минуты, а это значит, что необходимо вручную закодировать, что должно произойти, когда время будет достигнуто.
Для взаимодействия с Multipeer этого достаточно, чтобы поддерживать соединение живым, когда приложение входит в фон, и оно все равно будет получать все сообщения/потоки без проблем.
Ради стабильности, я сделать некоторые очистки следующим образом:
В 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
}
Посмотрите на этот код , https://github.com/davidkaminsky/Unplugged/blob/master/Unplugged/UnpluggedAppDelegate.m У меня была эта проблема с TCP-соединениями, вы можете сохранить приложение в фоновом режиме на пару минут, но если дольше вы должны очистить чтобы ваши связи и остановить фоновые задачи. Используйте его исключительно для того, чтобы оставаться открытыми, пока пользователь не работает в вашем приложении на короткое время. – sbarow
Спасибо, я закончил делать что-то немного похожее, но не такое причудливое (т. Е. Не контролирующее время автономной работы). – Einho