Определить, когда приложение убито пользователем в фоновом режиме iOS - PullRequest
0 голосов
/ 07 января 2020

Я работаю в приложении чата, где мне нужно показать статус пользователя (оффлайн / онлайн). Когда мое приложение находится на переднем плане и в фоновом режиме, мне нужно показать пользователя как онлайн (управление через VoIP). Но когда пользователь убивает приложение, оно должно go отключиться.

Мне нужно сохранить флаг, чтобы показать автономно, которым я управляю в функции делегата applicationWillTerminate, но эта функция вызывается только когда приложение находится в состояние переднего плана и пользователь убивает его, дважды нажав кнопку домой и проведите пальцем вверх. Эта функция не вызывается, когда приложение находится в фоновом режиме. Я имею в виду просто нажмите домой одним нажатием (приложение будет go в фоновом режиме), а затем снова дважды нажмите, чтобы провести вверх.

Есть ли функция, где я получаю 100% вызов, либо приложение в фоновом режиме / состояние переднего плана и пользователь убивают приложение?

Ответы [ 2 ]

5 голосов
/ 07 января 2020

Есть ли какая-нибудь функция, при которой я получаю 100% -ный вызов, либо приложение находится в фоновом / переднем плане, а пользователь убивает приложение?

Нет. Как раз наоборот. Если ваше приложение закрывается, когда оно уже находится в фоновом режиме, если оно приостановлено (ie не работает в фоновом режиме из-за особых прав), то вы на 100% уверены, что вы не получите никакого события. Тебе нельзя. Вы приостановлены и не работаете. Приложение умирает во сне.

0 голосов
/ 07 января 2020

Нет, согласно документу Apple

https://developer.apple.com/documentation/uikit/uiapplicationdelegate/1623111-applicationwillterminate?language=objc

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

Что вы можете сделать, чтобы выполнить метод (который запускает API для поддержания статуса в сети) через несколько секунд (в любое время, которое вы найдете), когда ваше приложение переходит в фоновый режим, если после этого метод успешно вызывается укажите c секунд, после чего пользователь останется в сети, если после указанной секунды он не будет звонить, сервер обновит свой статус до автономного. Так что это требует обработки как сервера, так и клиента.

...