Согласно документации Apple, если приложение переходит в фоновый режим, платформа прекращает рекламу и просмотр и отключает все открытые сеансы. После возврата на передний план платформа автоматически возобновляет рекламу и просмотр, но разработчик должен восстановить все закрытые сеансы. Документ Apple
Один из способов расширения соединения заключается в следующем.
Отвечая на мой собственный вопрос, надеясь, что это поможет людям в такой же ситуации. Для людей, плохо знакомых с разработкой iOS, использование фоновой службы просто означает включение параметра «Фоновые режимы» на вкладке «Возможности» вашей цели. Это само по себе должно дать вашему приложению около 10 минут жизни в фоновом режиме, прежде чем его убьют.
Но когда приложение переходит в фоновый режим, я использую backgroundTimeRemaining, чтобы узнать, сколько времени у меня осталось, оно просто начинается со 180 (в секундах, то есть 3 минуты), тем не менее, цикл печати продолжал работать через три минуты, что означает, что необходимо вручную кодировать, что должно произойти, когда наступит время.
Для многорангового подключения этого достаточно, чтобы поддерживать соединение, когда приложение переходит в фоновый режим, и оно по-прежнему будет без проблем получать все сообщения/потоки.
Для стабильности я делаю некоторую очистку следующим образом:
В appDelegate.h
@property (nonatomic) UIBackgroundTaskIdentifier backgroundTask; //declaring a background task
В приложенииDelegate.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
}
person
Einho
schedule
16.09.2014