Многих пользователей волнует вопрос о том, как через свое устройство можно быть отслеженным через какое-либо приложение. Разумеется, это связано с работой интернета и геолокации на Android. Чтобы обезопасить себя, нужно понять принцип работы геолокации, и даже взглянуть на это глазами программиста.
Прежде всего, давайте выясним, почему приложениям нужно знать наше местоположение должным образом. Их можно разделить на два типа: приложения, основанные на их основных функциональных возможностях, и приложения, использующие местоположение в качестве дополнения.
В первом случае дело довольно простое. Скорее всего, мы не слишком много думаем о том, почему у нас есть доступ к геолокации для таких приложений, как карты или навигаторы. Дело обстоит немного иначе в случае приложениями, которым не нужно место для стабильной работы. Некоторые из них используют наше местоположение для предоставления дополнительной функциональности. Например, Snapchat предоставляет нам соответствующие фильтры, в зависимости от того, в каком городе мы находимся.
Существует также последняя группа приложений, то есть наиболее противоречивые, для которых требуется местоположение, но так и неизвестно для чего. Как обосновать использование местоположения в приложении фонарик? Наиболее вероятным объяснением является желание адаптировать рекламу, и, следовательно, заработать на этом. Автор приложения пытается собрать как можно больше информации от нас (включая наше местоположение), а затем отправляет эти данные в различные рекламные службы. Такое действие явно не является чем-то полезным или даже легальным, поэтому мы должны остерегаться таких приложений.
Типы местоположения
В Android у нас есть два типа разрешений местоположения: общие (ACCESS_COARSE_LOCATION) и подробные (ACCESS_FINE_LOCATION). Разница заключается в точности полученных данных. Если приложение запрашивает только общее местоположение, оно не сможет использовать данные GPS. Единственными данными, к которым она будет иметь доступ, является местоположение, полученное на основе подключения к Интернету. Как следует из названия, такие данные не очень точны. Обычно мы получаем только информацию о городе, в котором находится данный пользователь. Все становится немного сложнее, если пользователь использует прокси или VPN.
В случае точного местоположения приложение получает доступ к данным GPS — в этом случае точность достигает нескольких метров. В настоящее время приложение редко использует только общее местоположение. Все потому, что оба типа требуют согласия пользователя. Итак, если приложение запрашивает разрешение, оно может получить более точные данные прямо сейчас.
Старые добрые времена
Давайте вернемся, возможно, не к хорошим временам, но, конечно, к старым. Конкретно до 2014 года, когда вышел Android 5.1. Последняя система, которая предоставляет программистам практически неограниченный доступ к ресурсам устройства. Если вы хотите узнать местоположение пользователя, как программист вы можете реализовать это практически без усилий. Во-первых, у нас не было лицензионной системы в том виде, в каком мы ее знаем сейчас, поэтому все, что нам нужно было сделать, это объявить об использовании местоположения в файле конфигурации приложения. Если пользователь решил установить вашу программу, вы сразу получили доступ к его местоположению, если, конечно, он не отключил ее в настройках.
Также не было никаких ограничений на выполнение фоновых действий. Можно было написать приложение, которое каждые 5 минут загружало бы местоположение пользователя, а затем отправляло его на внешний сервер. Любое другое приложение может сделать практически то же самое. К счастью, эти времена позади, сейчас ситуация гораздо лучше.
Традиционный подход
Мы выяснили, как это выглядело в прошлом. В начальных версиях Android мы использовали классы в пакете android.location для определения местоположения. Мы все еще можем их использовать, но мы должны учитывать множество ограничений. Даже когда вы открываете документацию для этих классов, вас встречает с предупреждением о том, что это не рекомендуемый способ загрузки местоположений.
Давайте предположим, что мы игнорируем все предупреждения и хотим загрузить местоположение устаревшим способом. Сама реализация довольно проста. Мы просто сообщаем системе, что нам нужно загрузить местоположение, и на этом наша роль заканчивается. Мы можем выбрать, должно ли это быть одноразовым действием или мы хотим получать обновления местоположения каждый раз в определенное время. Однако мы должны учитывать определенные последствия. Прежде всего, этот метод довольно серьезен. Мы должны реализовать все действия, основанные на местоположении (например, геозоны) самостоятельно. Более того, если мы выбираем частые обновления местоположения, мы подвергнем пользователя падению заряда батареи. Последний важный вопрос — загрузка местоположения. Когда программа работает в фоновом режиме, таким образом, мы получаем меньше обновлений, чем в случае современного подхода.
Современный подход
Современный подход требует, к сожалению, Google Play Services, но у него много преимуществ. Прежде всего, мы имеем дело с немного другим подходом. Потому что это не приложение, которое подключается напрямую к системному модулю, ответственному за местоположение, ведь библиотеки Google Play делают это самостоятельно. Местоположение обновляется время от времени и сохраняется в кеше. В результате приложения получают мгновенный доступ к местоположению последнего пользователя, не ожидая подключения к спутникам GPS. Этот подход, несомненно, влияет на снижение потребления батареи пользователем.
С точки зрения программиста, этот метод намного проще, и мы также имеем более простой доступ к функциям на основе определения местоположения, таким как геозона. Еще одним преимуществом является местоположение загрузки в фоновом режиме. Как уже было упомянуто, в случае такого подхода мы получаем более частые обновления, чем в случае традиционного метода.
Использование фоновых локаций
Для начала давайте поясним, как Google считает, что приложение работает в фоновом режиме. Прежде всего, это программа, которая в настоящее время не отображена на экран на переднем плане. За исключением того, что здесь есть некоторые исключения — наиболее важным из них является так называемый приоритетный сервис. Это услуга, которая выполняется в фоновом режиме, но о ее работе сообщается пользователю посредством уведомления, которое мы не можем очистить. Так работают все виды трекеров активности. Таким образом, приложение, которое в настоящее время не имеет видимого экрана и не указывает, что оно работает через уведомление, рассматривается как приложение, работающее в фоновом режиме.
В Android 8.0 Oreo Google ввел довольно радикальные ограничения на загрузку местоположений приложениями, которые не отображены прямо на экране. Мы все еще можем загрузить наше местоположение, но частота таких запросов ограничена примерно несколькими запросами в час. Это ограничение предназначалось для ограничения чрезмерного отслеживания пользователей другими приложениями и для снижения потребления батареи.
Теперь вы знаете примерную схему работы геолокации в устройствах Андроид, эти знания помогут при выборе приложений и сохранении приватности в дальнейшем.