Значительное изменение местоположения для геообработки

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

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

  • Ежедневно сохраняйте регионы сообщений и при каждом существенном изменении местоположения выполняйте проверку локальных хранимых данных. Если что-то соответствует THEN серверу контактов. Звучит лучше в теории.

Вопросы:

  • Может ли работать номер 2?
  • Какова преемственность значительного изменения местоположения? Я бы хотел, чтобы НЕ потерял сообщение в определенной области, не получив уведомление об изменении местоположения.
  • Является ли значительное изменение местоположения ДЕЙСТВИТЕЛЬНО основано на изменении ячейки? (я читаю по ряду случаев, что это не так)
  • Будет ли мониторинг региона более подходящим для этой задачи? Кто-нибудь использует его? Что такое отвод аккумулятора на нем, и имеет ли он улучшение или на правильной основе значительное изменение местоположения?
  • Если приложение прекращено, значительное изменение местоположения действительно пробудит мое приложение? вид в зависимости от этого.
  • любое предложение о том, как подойти к этому так, как я здесь не говорил?

Миллион благодаря тому, кто тратит время, чтобы очистить некоторые из этих вещей.

EDIT: дополнительный вопрос 7. Региональный мониторинг, имеющий большое количество добавленных регионов, оказывает какое-либо влияние на систему? Скажем, что 2 региона против 100 регионов?

Ответ 1

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

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

Основываясь на моем опыте, можно ожидать значительных изменений местоположения на расстоянии около 3-4 миль друг от друга. Это может сильно различаться, но я не могу вспомнить, увидев гораздо больше. Это делает очень редкую обработку вокруг города, довольно предсказуемой, когда пользователь попадает на шоссе. Я попробовал множество вариантов настройки размера региона, радиуса обновления и настроек чувствительности служб местоположения.

Имейте в виду, что количество регионов, которые вы можете зарегистрировать, ограничено. Нигде я не нашел то, что этот предел точно, но некоторые пользователи заявляют, что ни одно приложение не должно ожидать регистрации более 10 регионов. Я сам не нашел ссылки на обоснование этой цифры, и иногда я регистрирую более 10.

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

Мой опыт связан с вашими конкретными вопросами;

1- Для вашего случая это зависит от того, насколько близко к тому месту, которое вы намерены рассмотреть, чтобы триггер уведомлял. Если вы уведомляете, когда пользователь получает в течение нескольких миль или когда пользователь прибывает в город, это может быть действительно работоспособным. Если вы хотите вызвать, когда пользователь окажется в нескольких метрах от места, это не для вас. Прослушивание значительных изменений местоположения, по моему опыту, обычно не сильно ударило по времени автономной работы. Конечно, количество операций и сетевой активности, которые вы делаете при получении события, - еще один фактор. Я проверяю, насколько далеко перемещено устройство, сколько времени прошло с момента последнего местоположения. В моем случае нет необходимости обновлять все каждый раз, и я соответственно ограничиваю свою реакцию.

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

3. Из обширных поисковых запросов Google, проливающих документы и много информированных предположений, я пришел к выводу, что значительное изменение местоположения определяется магической комбинацией всех сигналов, доступных для устройства. Есть сигналы Wi-Fi, которые передают свои позиции с различной степенью точности, а вышки сотовой связи обычно знают, где они находятся. Службы местоположения используют все это вместе с соответствующими сильными сигналами, чтобы решить, когда устройство преодолело "значительное расстояние". Я думаю, что ясно, что расчет будет зависеть от условий и может измениться, поскольку они продолжают улучшать баланс между точностью и потреблением энергии, следовательно, смутные характеристики.

4 Как указано в вопросе 1, существуют факторы, которые могут повлиять на то, что вы можете использовать значительные изменения в местоположении, но я считаю, что мониторинг в регионе наиболее подходит для вашей цели в любом случае. Вероятно, комбинация обоих в порядке. Я использую его с большим удовлетворением для своего приложения.

5- Значительные изменения местоположения пробудят ваше приложение. Вы должны следовать некоторым рекомендациям в своих методах, предназначенным для работы в фоновом режиме, и знать ограничения. Оберните свои фоновые методы в вызовах beginBackgroundTaskWithExpirationHandler и UIBackgroundTaskInvalid. Следите за блокировкой потоков. Полностью ознакомьтесь с документацией и руководством по обработке местоположения.

6- Моя рекомендация выше. Другие соображения касаются использования вами служб определения местоположения в целом. Вам нужно будет создать собственный обработчик. Даже когда вы пользуетесь сервисом, вы не хотите реагировать на каждое полученное сообщение. Вы должны проверить изменения, точность, время и все, что джаз отвечает только так часто, как это необходимо. Я нашел эту серию публикаций неоценимой в получении основ: Часть 1 из 3 с сайта Long Weekend

7- Как уже упоминалось выше, я понимаю, что существует системное ограничение количества регистров, которые могут быть зарегистрированы. Я предполагаю, что, поскольку они не говорят вам точно, что это за номер, это может позволить вашему приложению более или менее в зависимости от того, сколько других было установлено другими приложениями. По моему опыту я регулярно регистрирую и удаляю от 10 до 15 регионов в пределах моего радиуса. Я установил их по порядку от ближайшего к дальнему, поскольку я предполагаю, что последний из них будет сначала удален или отклонен. Другие соображения - идентификаторы регионов являются глобальными, поэтому, если ваш не уникален, он заменит предыдущий регион тем же именем. Размер и поля области - это параметры, которые вам нужно поэкспериментировать, чтобы отточить лучшее для ваших конкретных потребностей.

Ответ 2

  • Не думай так. Ожидайте, что вы получите данные с сервера, но затем добавьте регион. Приложение не будет проверять этот регион, потому что ничего не существует (в старых данных). Он может работать, если вы собираете все возможные области, даже если сообщений для этой области нет. Очевидно, что это будет работать только для предопределенных областей.
  • Смотрите WWDC 2011 Videos для получения дополнительной информации Session 500 начиная с 17 минут.
  • Нет, он использует WiFi с iOS5 тоже (см. видео).
  • Абсолютно, если вы знаете области, которые уже используют их. Вы можете, например. предоставить приложение с массивом регионов (загружайте его каждые 5 минут или около того) и загружайте данные только в том случае, если пользователь попадает в этот регион. Помните, что регион, в котором вы сейчас находитесь, не будет уведомлен. Обязательно регулярно обновляйте данные для текущего региона (если его область, соответствующая сообщению)
  • Да, он запустит ваше приложение либо в фоновом режиме, либо полностью отключится.
  • вы также можете загрузить все сообщения, даже если они не находятся в этом регионе. И только показывать их/всплывать, если пользователь попадает в регион. Но это возможно только в том случае, если данные сообщений не так много. Например, если вы планируете использовать одни и те же сообщения для всех людей (например, "посмотрите на это красивое здание" ), было бы слишком сложно загрузить все данные со всего мира.
  • извините, не знаю. Я предполагаю, что это то же самое, что и создание событий календаря, но я не уверен.