iOS: как поддерживать работу сокета TCP и NSNetService, когда приложение работает в фоновом режиме
Я делаю приложение P2P VoIP, используя GCDAsyncSocket, GCDAsyncUdpSocket и NSNetService, чтобы найти другие устройства с приложением в сети. У меня есть сокет TCP для передачи пользовательских данных и согласования соединения UDP.
Мне нужно, чтобы служба NSNetService публиковала Bonjour, пока приложение находилось в фоновом режиме, и оставляла открытый сокет для приема запросов от других устройств.
Нажав кнопку HOME на iPhone, розетка не отключается, но не отвечает, и данные отправляются приложению только при повторном открытии приложения. При блокировке экрана розетка закрывается.
NSNetService для публикации, когда приложение закрыто.
Я активировал опции фонового приложения VoIP, аудио и т. Д.
я использовал
[ asyncSocket performBlock : ^ {
[ asyncSocket enableBackgroundingOnSocket ];
}];
Кто-то знает, как поддерживать работу сокета и NSNetService, когда iPhone заблокирован?
1 ответ
Я выделил то, что считаю важным.
От Apple: https://developer.apple.com/library/ios/technotes/tn2277/_index.html
Ожидается, что VoIP-сокеты Приложение VoIP (Voice over IP) будет работать непрерывно, чтобы оно могло контролировать соединение управления VoIP; однако, чтобы минимизировать влияние памяти на систему, приложение приостанавливается, пока оно неактивно. Чтобы это работало, приложение должно зарегистрировать сокет данных для своего управляющего соединения как сокет VoIP. Сокет, зарегистрированный таким образом, имеет две особенности:
Пока приложение приостановлено, система контролирует сокет от имени приложения. Если какие-либо данные поступают в сокет, система возобновляет выполнение приложения (хотя и в фоновом режиме), которое затем может считывать данные из сокета и предпринимать соответствующие действия (например, уведомлять пользователя о входящем звонке). Ресурсы сокета никогда не возвращаются. Таким образом, приложение может быть безопасно приостановлено, не опасаясь, что его сокет пропадет. Для получения дополнительной информации о том, как создать приложение VoIP, см. Руководство по программированию Приложения iOS.
Также вы можете сослаться на это: Как сохранить VOIP-сокет в фоновом режиме?