2010-04-07 5 views
1

Я хотел бы сообщить серверу о недействительности текущего сеанса, когда пользователь покидает приложение iPhone.Завершение сеанса перед закрытием приложения iPhone

В делегате приложения я отправляю запрос на сервер в методе (void)applicationWillTerminate:(UIApplication *)application. Я не жду ответа сервера, я просто хочу отправить запрос и выйти.

Однако я не вижу, чтобы какой-либо пакет покидал приложение. Тот же код в другом месте отлично работает.

Сессия имеет ограниченную продолжительность в любом случае, и сервер будет ее аннулировать через некоторое время, но я бы предпочел сделать это красиво при выходе из приложения.

Нормально ли, что NSURLConnection не может быть установлено из метода applicationWillTerminate?

спасибо.

ответ

0

Если вы отправляете асинхронный запрос, очень вероятно, что приложение завершит работу до того, как будет выполнен запрос.

Попробуйте использовать синхронный запрос в качестве теста, хотя я бы не рекомендовал делать это на производстве, поскольку синхронные запросы могут занимать неопределенное количество времени. Если приложение принудительно завершает работу, оно будет отображаться как «тайм-аут при выходе» в разделе отчетов о сбоях в iTunes Connect.

+0

[NSURLConnection sendSynchronousRequest: myRequest returnResponse: NULL error: NULL] работал действительно. Но я не знаю, оставлю ли я его, согласно вашему предупреждению. Возможно, сервер должен обработать завершение сеанса. – user244129

+0

Если сервер может изящно обрабатывать случай, когда пользователь выходит из приложения и перезагружает его в течение очень короткого периода времени, сервер обязательно должен позаботиться об этом. В этом случае было бы идеально для сервера переназначить сеанс для клиента (для этого вы могли бы использовать UDID клиента) или просто создать новый сеанс при запуске и позволить старому перейти в эфир. – Jasarien