Обзор
Моя компания просит меня выпустить приложение, которое может проверять местоположение устройства каждые два часа. Приложение будет отправлять эти данные о местоположении через сокет TCP/IP на мой сервер, а затем получать информацию, соответствующую этим самым данным (сразу и через тот же сокет TCP/IP). Поэтому я не пытаюсь заставить свое приложение постоянно работать в фоновом режиме (что, на самом деле, кажется горячей темой для iOS, а также не подходит для моего проекта).
Вопрос
Чтобы быть надежным, как лучше всего это сделать? Итак, я хотел бы знать:
- Поскольку мое приложение приостановлено (= неактивно), разрешает ли Apple открывать сокет для отправки местоположения, когда оно просыпается
didUpdateToLocation
? - Как долго мне нужно выполнять задачу отправки/получения через сокет?
- Должен ли я создать настоящую фоновую задачу с помощью
beginBackgroundTaskWithExpirationHandler
и использовать 10 минут, предоставленные Cocoa, для выполнения моей задачи отправки/получения? - Возможно (и разрешено Apple) запрашивать 10-минутную фоновую задачу каждые 2 часа без участия человека (т. Е. Пользователь должен повторно открыть приложение и т. д.)?
Чего я достиг/нашел на данный момент
- Я добавил ключ
location
в свойInfo.plist
, чтобы иметь возможность запускать обработчикdidUpdateToLocation
, когда мое приложение неактивно. - Я могу отправлять и получать данные через сокет, который я открыл, когда мое приложение было на переднем плане (= активно).
- Я пытался проверить
backgroundTimeRemaining
при вызовеdidUpdateToLocation
. Я получил очень большой результат, что кажется нормальным, потому что на данный моментapplicationState
находится не вUIApplicationStateBackground
, а вUIApplicationStateActive
.
Эти моменты не очень ясны в официальной документации, а тем, относящихся к моему конкретному случаю, я не нашел.
Спасибо за вашу помощь.
beginBackgroundTaskWithExpirationHandler
НЕ создает фоновую задачу, она помечает текущий поток как то, что хочет продолжить работу, если приложение находится в фоновом режиме. - person progrmr   schedule 31.07.2013