Ответ 1
Я экспериментировал с подобным процессом и наилучшим образом использовал его, используя как значительные изменения местоположения, так и мониторинг региона. После многих итераций я в настоящее время испытываю очень малое влияние на срок службы батареи и довольно надежную обработку.
Я использую значительные изменения местоположения, чтобы вызвать метод, который фильтрует уведомления, настраивает регионы только для тех, которые находятся в ограниченном радиусе от текущей позиции.
Основываясь на моем опыте, можно ожидать значительных изменений местоположения на расстоянии около 3-4 миль друг от друга. Это может сильно различаться, но я не могу вспомнить, увидев гораздо больше. Это делает очень редкую обработку вокруг города, довольно предсказуемой, когда пользователь попадает на шоссе. Я попробовал множество вариантов настройки размера региона, радиуса обновления и настроек чувствительности служб местоположения.
Имейте в виду, что количество регионов, которые вы можете зарегистрировать, ограничено. Нигде я не нашел то, что этот предел точно, но некоторые пользователи заявляют, что ни одно приложение не должно ожидать регистрации более 10 регионов. Я сам не нашел ссылки на обоснование этой цифры, и иногда я регистрирую более 10.
Я играл с увеличением радиуса и минимальных расстояний для обновления, когда видно, что устройство движется со скоростью шоссе в течение значительных продолжительностей. Это то обстоятельство, что я чувствую, что могу тратить батарею на ненужные циклы обработки. На самом деле это не казалось проблемой, но я стараюсь максимизировать эффективность в любом случае.
Мой опыт связан с вашими конкретными вопросами;
1- Для вашего случая это зависит от того, насколько близко к тому месту, которое вы намерены рассмотреть, чтобы триггер уведомлял. Если вы уведомляете, когда пользователь получает в течение нескольких миль или когда пользователь прибывает в город, это может быть действительно работоспособным. Если вы хотите вызвать, когда пользователь окажется в нескольких метрах от места, это не для вас. Прослушивание значительных изменений местоположения, по моему опыту, обычно не сильно ударило по времени автономной работы. Конечно, количество операций и сетевой активности, которые вы делаете при получении события, - еще один фактор. Я проверяю, насколько далеко перемещено устройство, сколько времени прошло с момента последнего местоположения. В моем случае нет необходимости обновлять все каждый раз, и я соответственно ограничиваю свою реакцию.
2. Мой опыт относительно значительных изменений местоположения, как указано выше, но все документы ясно показывают, что это не вопрос заданного расстояния, насколько условия и доступность различных используемых сигналов. Я бы предположил, что в городской среде он более предсказуем и меньше в широких открытых пространствах. Большинство моих опытов было в первом.
3. Из обширных поисковых запросов Google, проливающих документы и много информированных предположений, я пришел к выводу, что значительное изменение местоположения определяется магической комбинацией всех сигналов, доступных для устройства. Есть сигналы Wi-Fi, которые передают свои позиции с различной степенью точности, а вышки сотовой связи обычно знают, где они находятся. Службы местоположения используют все это вместе с соответствующими сильными сигналами, чтобы решить, когда устройство преодолело "значительное расстояние". Я думаю, что ясно, что расчет будет зависеть от условий и может измениться, поскольку они продолжают улучшать баланс между точностью и потреблением энергии, следовательно, смутные характеристики.
4 Как указано в вопросе 1, существуют факторы, которые могут повлиять на то, что вы можете использовать значительные изменения в местоположении, но я считаю, что мониторинг в регионе наиболее подходит для вашей цели в любом случае. Вероятно, комбинация обоих в порядке. Я использую его с большим удовлетворением для своего приложения.
5- Значительные изменения местоположения пробудят ваше приложение. Вы должны следовать некоторым рекомендациям в своих методах, предназначенным для работы в фоновом режиме, и знать ограничения. Оберните свои фоновые методы в вызовах beginBackgroundTaskWithExpirationHandler и UIBackgroundTaskInvalid. Следите за блокировкой потоков. Полностью ознакомьтесь с документацией и руководством по обработке местоположения.
6- Моя рекомендация выше. Другие соображения касаются использования вами служб определения местоположения в целом. Вам нужно будет создать собственный обработчик. Даже когда вы пользуетесь сервисом, вы не хотите реагировать на каждое полученное сообщение. Вы должны проверить изменения, точность, время и все, что джаз отвечает только так часто, как это необходимо. Я нашел эту серию публикаций неоценимой в получении основ: Часть 1 из 3 с сайта Long Weekend
7- Как уже упоминалось выше, я понимаю, что существует системное ограничение количества регистров, которые могут быть зарегистрированы. Я предполагаю, что, поскольку они не говорят вам точно, что это за номер, это может позволить вашему приложению более или менее в зависимости от того, сколько других было установлено другими приложениями. По моему опыту я регулярно регистрирую и удаляю от 10 до 15 регионов в пределах моего радиуса. Я установил их по порядку от ближайшего к дальнему, поскольку я предполагаю, что последний из них будет сначала удален или отклонен. Другие соображения - идентификаторы регионов являются глобальными, поэтому, если ваш не уникален, он заменит предыдущий регион тем же именем. Размер и поля области - это параметры, которые вам нужно поэкспериментировать, чтобы отточить лучшее для ваших конкретных потребностей.