Можно ли в iOS запустить геозону на основе региона в определенное время?

Мое приложение для iOS (ориентированное на iOS 8.1+) использует службы определения местоположения, чтобы определить, вошел ли пользователь в конкретный регион во время события. В идеале я хотел бы включить геозону незадолго до события и выключить его немного после его завершения. Проблема в том, что нет гарантии, что приложение будет запущено за час до события, поэтому я включаю геозону в момент, когда пользователь регистрируется для события. Это не лучший подход, поскольку он означает, что геозона будет работать намного дольше, чем нужно.

Насколько я могу судить, в iOS нет возможности «разбудить» приложение в фоновом режиме в запланированное время. Я мог бы использовать push-уведомление, предназначенное для обновления контента, но мне не ясно, откажется ли Apple от такого неправомерного использования этого уведомления.

Какие-либо предложения?


person Rob Petit    schedule 02.12.2015    source источник


Ответы (1)


Я сам разбирался в этом.

Если вы можете организовать push-уведомление из своего бэкэнда («Тихое push-уведомление», также известное как «контент-доступный»), это будет хорошим вариантом. В реальных ситуациях это, кажется, дает вам лучший контроль над временем. К сожалению, это не сработает, если у человека нет связи. Кроме того, к сожалению, вам нужен бэкэнд, который может ставить события в очередь за раз (а не только в ответ на ввод). Если у вас уже есть такой бэкэнд, и ваше приложение полезно для пользователя только тогда, когда они в любом случае имеют покрытие сети, это наверное лучший вариант. Кажется, это подходящее использование технологии, поэтому Apple должна одобрить.

Другой вариант, который я пытаюсь - использовать фоновую выборку. Вы указываете «минимальный интервал», чтобы избежать чрезмерной выборки. Попробуйте как минимум 50% оставшегося времени до мероприятия. Каждый раз, когда приложение просыпается (будь то на переднем плане, потому что пользователь открыл его, или в фоновом режиме, потому что его открывает background-fetch), вы можете рассчитать время до следующего события, обновить интервал выборки или запустить мониторинг региона. . Предполагается, что вы должны использовать «фоновую выборку» для получения информации с сервера, но, похоже, нет никаких требований для опроса сервера, вместо этого вы можете опросить свои внутренние данные. Я еще не тестировал это полностью, но это кажется многообещающим.

Вы можете использовать мониторинг значительных изменений местоположения, который, как я читал, будет активировать ваше приложение на короткое время каждые 15 минут или меньше, и вы можете использовать информацию о времени / местоположении, чтобы решить, включать ли геозону. Я думаю, что это будет хорошо работать в сочетании с вышеупомянутой «фоновой выборкой»: за много часов или дней до события вы полагаетесь на фоновую выборку, которую затем используете для включения мониторинга значительных изменений местоположения за несколько часов до события. (Есть предположение, что геозона на самом деле более экономична, чем мониторинг значительных изменений, но вы можете предположить, что другие приложения на устройстве пользователя уже будут следить за значительными изменениями, и в этом случае предельная стоимость вашего приложения добавляется в список должно быть минимальным.)

Собрав их все вместе, вы можете создать последовательность

background fetch -> significant location monitoring ->  geofencing

по мере приближения времени.

Существует также функция мониторинга CLVisit, она не очень хорошо изучена, но предположительно потребляет меньше энергии и вызывается реже, чем мониторинг значительного изменения местоположения. Если фоновая выборка или тихие удаленные уведомления не помогают разбудить ваше приложение, попробуйте и сообщите об этом!

Вы не можете (пока) сделать тихое локальное уведомление о доступном содержимом (AFAICT). Однако, возможно, вы можете запланировать локальное уведомление «Ваше мероприятие начнется завтра» или что-то, что убеждает пользователя выбрать параметр, запускающий геозону. Вот руководство по нему http://www.appcoda.com/local-notifications-ios8/, ответ действия может быть UIUserNotificationActivationMode.Background, чтобы ваша геозона могла активироваться (если пользователь отвечает на уведомление), не выводя приложение на передний план.

Прошло от 5 до 6 недель с тех пор, как вы спросили, у вас уже есть собственный ответ? Пожалуйста, дай мне знать.

person music_and_cities    schedule 18.01.2016
comment
Вы реализовали решение внутри приложения? - person Jacob Davis Cherussery; 28.07.2016
comment
Да, @Sulabh. Я в первую очередь полагаюсь на мониторинг CLVisit. Пока человек перемещается по вашему приложению, он будет регулярно просыпаться с помощью мониторинга CLVisit. Ваше приложение проснется, когда они покинут свое последнее местоположение, а затем, если событие близко по расстоянию или времени, вы можете включить геозону. (Включите также фоновую выборку для пользователей с большими iPad, которые не носят с собой свои устройства все время, но фоновая выборка может не часто вызываться, если пользователь мало использует ваше приложение, она предназначена для обновления в ожидание того, что они откроют ваше приложение.) - person music_and_cities; 29.07.2016