Я занимаюсь этой проблемой в течение нескольких недель и не уверен, является ли это ошибкой моего кода, событием appPaused forge недостаточно быстро, или документация Trigger.io недостаточно ясно показывает, как мало времени iOS дает нам для выполнения очистки. код.
Согласно документации по событию appPaused:
- iOS: на выполнение дается короткий промежуток времени, обычно лучше предположить, что обратные вызовы и таймеры могут не срабатывать, пока приложение не будет возобновлено.
Мое приложение имеет дело с веб-сокетами, и в идеале я могу отправить событие закрытия на свой сервер, когда пользователь сворачивает мое приложение или телефон заблокирован. В настоящее время весь мой код очистки отлично работает на Android, но на iOS мой код очистки не запускается, пока приложение не будет возобновлено. Странная часть заключается в том, что иногда (возможно, в 1 из 20 раз) очистка iOS запускается правильно сразу после запуска события appPaused.
Чтобы проверить это, я сделал две вещи:
Я делаю самое первое, что нужно запустить после запуска события appPaused, - это сообщение на мой веб-сервер, в котором говорится, что «приложение приостановлено». В 95% случаев это сообщение на самом деле не отправляется до тех пор, пока приложение не будет возобновлено, но остальные 5% времени мой веб-сервер получает его сразу после того, как я приостанавливаю приложение.
Затем я сделал так, чтобы первое, что запускалось после запуска события appPaused, — это строка, которая хранит Date.now() в глобальной переменной. Затем я сохраняю Date.now() в другой глобальной переменной, когда приложение возобновляется, и нахожу разницу между ними. Это становится интересным, потому что примерно в 50% случаев строка Date.now() правильно запускается сразу после вызова события appPaused, но в другой половине случаев 2 вызова Date.now() составляют всего миллисекунды, что доказывает что код очистки не запускался до возобновления работы приложения.
Итак, могу ли я действительно ожидать, что у иногда будет достаточно времени после запуска appPaused, чтобы даже сохранить Date.now() в переменной? Это то, что испытывают все остальные при запуске своих приложений Trigger.io на iOS? Дайте мне знать, если кто-то может использовать дополнительную информацию.