Ips geofence сбой установки
Возможности применения геофенсинга в мобильном маркетинге могут приносить по-настоящему фантастические результаты.
Для чего используют геофенсинг
Геофенсинг используется во многих областях современной жизни – от маркетинга до защиты воздушного пространства вокруг стратегических объектов инфраструктуры. Ниже – перечень главных функций геофенсинга:
Как работает геофенсинг
Обычно для геофенсинга приложение использует данные GPS, RFID, Wi-Fi. С геозонами можно работать и без приложения, получая широту и долготу клиентов, их почтовые индексы из цифровых рекламных сетей, а также местоположение на основе сигналов сотовых вышек. Но тогда будет определяться только общая область, что довольно неточно.
Чтобы начать использовать технологию геозонирования, вам нужно:
- сделать свое мобильное приложение (если его еще нет),
- выбрать интересующие точки на карте,
- задать вокруг них радиус геозон,
- настроить интеграцию приложения с сервисом рассылки и передать данные.
После этого все мобильные устройства, на которые было скачано ваше приложение, будут подавать сигнал в сервис рассылки при входе и выходе из заданной зоны.
Границы геозоны могут быть активными или пассивными. Активные геозоны требуют, чтобы конечный пользователь разрешил определение местоположения и открыл мобильное приложение. Пассивные геозоны всегда включены. Они используют Wi-Fi и сотовые данные вместо GPS или RFID и работают в фоновом режиме.
Радиус геозоны обычно измеряют в минутах: идеальное расстояние – чтобы клиент за 4 минуты мог добраться до вашего магазина или ресторана. Если точка внутри торгового центра – это 4 минуты пешком, а если на трассе, можно установить расстояние в 4 минуты езды на автомобиле. Appropio рекомендуют указывать минимальный радиус в 10 м, максимальный – до 1 км для очень крупных городов, а оптимальным называют 50 метров (по данным своих экспериментов).
Людям, чье перемещение будет отслеживаться, не нужно устанавливать на свои мобильные никакие дополнительные приложения. Это касается как iOS, так и Android.
Обычно с помощью геофенсинга напоминают о том, что магазин находится поблизости, и при этом стимулируют посещение и покупку купонами и промокодами. Но можно придумать и более изобретательное применение геофенсинга.
Геофенсинг от Burger King
Маркетологи Бургер Кинга настроили геотаргетинг вокруг ресторанов конкурентов таким образом, что человеку нужно было попасть в геозону “Макдональдса”, чтобы оформить заказ на бургер Burger King за один цент. Получить заказ можно было в ближайшем “Бургер Кинге”.
Агрессивная маркетинговая кампания была усилена наружной рекламой: призыв скачать мобильное приложение за практически бесплатный бургер догонял тех любителей фастфуда, которые еще не сделали этого.
Некоторое время назад передо мной была поставлена задача по определению смены местоположения пользователя на карте. По результатам эксперимента в статье, для этих целей, по точности определения и энергоэффективности, прекрасно подходит Google Services Geofences.
Как работать с Geofences подробно рассмотрено в единственном русскоязычном примере по использованию Location APIs в статье на хабре, но с тех пор прошло уже 2 года, и информация сильно устарела.
Пример автора на github, к сожалению, даже не компилировался, поэтому я решил его завести под свежие версии библиотек. На мое удивление, изменений в API между com.google.android.gms:play-services:4.0.30 и com.google.android.gms:play-services:8.4.0 оказалось много! Собственно, о них дальше и пойдет речь в статье.
Обновленный пример на github (на момент написания статьи автор оригинального примера не принял pull request).
Для начала желательно ознакомиться с оригиналом.
В самой концепции ничего не поменялось, изменились только ответственные классы.
Так, вместо LocationClient имеем api.GoogleApiClient , callback'и из GooglePlayServicesClient также переехали в api.GoogleApiClient , вместо new LocationClient(this, this, this) появился удобный билдер:
Немаловажным отличием является то, что добавлением и удалением геозон mGoogleApiClient занимается не напрямую, а через LocationServices.GeofencingApi .
Также изменился первый параметр: вместо списка геозон передается GeofencingRequest , который можно получить через специальный билдер:
Одна из возможностей нового билдера — управление поведением геозон в момент добавления. Например, в комментариях к оригинальной статье спрашивали про возможность срабатывания триггера Exit geofence для случая, когда девайс находится снаружи зоны в момент ее установки. Теперь это можно сделать передав флаг GeofencingRequest.INITIAL_TRIGGER_EXIT через метод setInitialTrigger (int initialTrigger) , по умолчанию флаги GeofencingRequest.INITIAL_TRIGGER_ENTER и GeofencingRequest.INITIAL_TRIGGER_DWELL . Флаги можно комбинировать между собой.
Кроме этого был убран последний параметр-callback, теперь вместо него LocationServices.GeofencingApi.addGeofences возвращает PendingResult , с помощью которого можно, блокируя поток, ожидать результат или получить ответ асинхронно, с помощью callback метода setResultCallback(..) . В любом случае результатом будет статус операции добавления\удаления геозоны. Данный callback заменяет собой OnAddGeofencesResultListener или onRemoveGeofencesByRequestIdsResult из оригинальной статьи.
Удалить не нужные геозоны можно через методы:
Изменения в ReceiveTransitionsIntentService
Если раньше для обработки результатов срабатывания триггеров на геозоне использовались статические методы из класса LocationClient , которые требовали в качестве параметра пришедший Intent , то сейчас этим занимается GeofencingEvent , который имеет одноименные методы для выполнения той же работы. Получить его можно следующим образом:
Создания самих геозон осталось без изменений и происходит через Geofence.Builder .
Еще одним из новшеств является то, что после срабатывания триггера геозона удаляется автоматически, таким образом нам не нужно больше убирать их самостоятельно!
Так же в код примера я добавил еще одну кнопку, которая ставит геозону с триггером на выход из нее.
Несколько советов по работе с геозонами
Для тестирования я выбрал эмулятор Genymotion, но при попытке установить геозону LocationServices выдавал ошибку status code = 1000 (GEOFENCE_NOT_AVAILABLE). Решение этой проблемы нашлось на stackoverflow
Если выставить в качестве условия срабатывания триггеры GeofencingRequest.INITIAL_TRIGGER_EXIT и GeofencingRequest.INITIAL_TRIGGER_ENTER или Geofence.GEOFENCE_TRANSITION_ENTER и Geofence.GEOFENCE_TRANSITION_EXIT , то сработает только одно условие из каждой пары, после чего зона будет удалена
Для работы с Rx можно использовать эту библиотеку, тогда весь процесс по добавлению\удалению сводится к коду:
Что такое Location APIs?
- попытались показать все возможности Location APIs
- множество комментариев и обработок исключений, которые в примере можно было бы и упустить
- все действия выполняются из активити
Примечание: Google Play сервисы могут быть отключены на устройстве. Это может нарушить работу многих приложений и система честно предупреждает пользователя об этом перед их отключением. Но всё же хорошим тоном будет проверять это в своем приложении с помощью GooglePlayServicesUtil.isGooglePlayServicesAvailable и как-то предупреждать пользователя.
Задача
Итак, для примера напишем приложение, в котором можно явно указать координаты и радиус геозоны. При входе/выходе из неё в статус бар будет добавляться уведомление с id геозоны и типом перемещения. После выхода из геозоны мы её удалим.
Алгоритм
- Из активити создаем сервис, в который передаем данные о геозоне.
- Сервис инициализирует LocationClient.
- Когда LocationClient инициализировался, добавляем в него геозоны (Geofence) и соответствующие им PendingIntent.
- Когда геозоны добавлены, отключаемся от LocationClient и останавливаем сервис.
- Далее вся надежда на PendingIntent, который запустит IntentService при входе в зону или выходе из зоны. Сервис добавляет уведомления в статус бар и создает сервис для удаления отработанных геозон.
- Созданный сервис снова инициализирует LocationClient.
- Когда LocationClient инициализировался, удаляем отработанные геозоны.
- Когда геозоны удалены, отключаемся от LocationClient и останавливаем сервис.
- Profit!
К делу!
Для начала необходимо подключить Google Play сервисы. Как это сделать описано здесь.
Далее в активити инициализируем элементы отображения. Из этой области нас интересует вызов сервиса при обработке нажатия на кнопку:
Тут мы создаем Intent для нашего сервиса (GeofencingService) и передаем в него необходимые данные. Так как GeofencingService отвечает за добавление и удаление геозон (в примере я решил не разделять эти действия на разные сервисы), то нам надо передать тип операции, которая должна быть выполнена сервисом. В данном случае это добавление (GeofencingService.Action.ADD). Также сервису нужны данные о геозоне. Их мы передаем в виде объекта класса MyGeofence, который по сути является оберткой над Geofence.Builder (о нём мы поговорим позже).
Итак, мы передаем координаты центра и радиус зоны, а также тип перемещения. Последний может быть трех видов: GEOFENCE_TRANSITION_ENTER, GEOFENCE_TRANSITION_EXIT и GEOFENCE_TRANSITION_DWELL. Если с первыми двумя все понятно, то к третьему необходимы разъяснения. GEOFENCE_TRANSITION_DWELL указывает на то, что пользователь вошел в зону и пробыл в ней некоторое время. Чтобы использовать этот сигнал, вы должны установить setLoiteringDelay при построении геозоны. В данном примере GEOFENCE_TRANSITION_DWELL не используется.
Перейдем к сервису. Сервис имплементирует GooglePlayServicesClient.ConnectionCallbacks, GooglePlayServicesClient.OnConnectionFailedListener, LocationClient.OnAddGeofencesResultListener, LocationClient.OnRemoveGeofencesResultListener интерфейсы. Это позволяет ему полностью отвечать за работу с LocationClient.
В onStartCommand мы получаем тип операции (ADD или REMOVE) и вытягиваем необходимые для выполнения этого действия данные. После этого инициализируем и запускаем LocationClient:
Прежде чем добавить геозону mGeofenceListsToAdd, мы вызвали метод toGeofence() объекта класса MyGeofence. Я уже говорил, что MyGeofence является обёрткой над Geofence.Builder:
После того как LocationClient подключится, сработает onConnected колбэк интерфейса GooglePlayServicesClient.ConnectionCallbacks. В нем мы выполняем добавление либо удаление в зависимости от текущего типа действия:
Как мы видим, addGeofences одним из параметров требует PendingIntent, который сработает при перемещении. В нашем случае PendingIntent будет запускать IntentService:
После выполнения действия у нас срабатывают OnAddGeofencesResultListener или onRemoveGeofencesByRequestIdsResult , в которых мы отключаемся от LocationClient и останавливаем сервис:
Последняя часть приложения – это IntentService, который запускается при пересечении границы геозоны пользователем устройства. Все действия выполняются в onHandleIntent:
Здесь у нас фигурируют в основном статические методы LocationClient. Сначала мы делаем проверку на наличие ошибок с помощью hasError. Затем получаем тип перемещения и список сработавших геозон с помощью getGeofenceTransition и getTriggeringGeofences соответственно. Вызываем обработку каждой геозоны и сохраняем её id. Ну и напоследок, удаляем геозоны в случае, если данное перемещение было выходом из геозоны.
Для удаления геозон мы опять создаём сервис, в который передаём тип операции (REMOVE) и список id на удаление:
На этом всё!
Надеюсь пример получился понятным и интересным. Желаю всем хороших приложений!
UPDATE:
Статья и код сильно устарели за 2 года.
Спасибо Vilkaman за обновления кода в репозитории.
Подробнее о работе с обновленным Location API можно прочитать в его статье
Samsung встраивает в новые мобильные устройства китайское программное обеспечение, которое невозможно удалить. Оно может отсылать пользовательские данные на китайские серверы, а китайские власти могут получить доступ к этой информации в любой момент.
Слежка в пользу Китая
На всех современных смартфонах и планшетах компании Samsung было обнаружено шпионское программное обеспечение, имеющее связь с Китаем. Фирменный софт Samsung регулярно связывается с расположенными на территории КНР серверами и, возможно, отправляет на них пользовательские данные. Факт отправки данных в КНР на момент публикации материала подтвержден не был.
«Брешь» в прошивках гаджетов Samsung обнаружил пользователь ресурса Reddit под псевдонимом Kchaxcer. Его тема, описывающая возникшую угрозу безопасности пользовательской информации, всего за сутки с момента создания набрала около 3000 комментариев.
Kchaxcer сообщает, что в прошивках Samsung есть программное обеспечение китайской компании Qihoo 360, встроенное в Device Care – фирменную утилиту Samsung, встроенную в оболочку One UI, которую Samsung устанавливает на свои современные смартфоны. Приложение включает функции оптимизации устройства, удаления временных и мусорных файлов, а также сканирования на вирусы и другое вредоносное ПО.
Компания Qihoo 360 занимается вопросами информационной безопасности, однако она неоднократно вовлекалась в скандалы вокруг приватности и конфиденциальности. Помимо прочего, Qihoo 360 обвиняли в скрытом (несанкционированном) сборе информации с устройств пользователей, на которых установлен ее софт.
Реакция Samsung
Samsung практически моментально отреагировала на публикацию в Reddit. Ее представители подтвердили факт наличия программного обеспечения Qihoo 360 в составе Device Care.
В то же время Samsung никак не прокомментировала тот факт, что по причине наличия кода, принадлежащего Qihoo 360, в Device Care, приложение регулярно связывается с китайскими серверами.
На момент публикации материала не было известно, кому именно софт Qihoo 360 может отправлять информацию с пользовательских устройств. Тем не менее, в 2014 г. топ-менеджер компании заявлял, что Qihoo 360 будет передавать любые данные правительству Китая по первому же запросу. В 2017 г. компания объявила о своих планах о еще более тесном сотрудничестве с властями КНР в плане отправки ему накопленной информации.
Способ решения проблемы
Kchaxcer отметил, что удалить Device Care из смартфона или планшета Samsung базовыми средствами не получится – приложение системное и является частью прошивки. Он также предупредил, что открывать этому ПО доступ ко всем файлам на устройстве очень рискованно.
Защитить личную информацию от потенциального копирования на китайские серверы, тем не менее, можно. Для этого необходимо лишить Device Care доступа к интернету путем установки брандмауэра, работающего без получения root-прав. Подобные приложения, доказавшие свою эффективность, есть в свободном доступе в каталоге Google Play – они позволяют закрывать установленным на устройство программам, в том числе и системным, доступа в Сеть как через Wi-Fi, так и через сотовые сети.
Samsung и слежка за пользователями
Шпионское ПО достаточно давно входит в состав прошивок гаджетов южно-корейского вендора. К примеру, в марте 2017 г. антивирусная компания Check Point обнаружила почти в четырех десятках смартфонов различных производителей, среди которых была и Samsung. вредоносные компоненты, установленные еще до продажи. В них были выявлены приложенич, демонстрирующие нежелательную рекламу, и минимум в одном случае – мобильный шифровальщик. Все проанализированные устройства использовались сотрудниками двух крупных ИТ-корпораций. В числе 38 таинственно зараженных устройств есть два смартфона ASUS, 10 смартфонов Samsung, два Lenovo, LG, два Oppo, две модели Xiaomi, Vivo и ZTE.
Разделяй и зарабатывай: сегментация сети создает новые источники доходаМногие смартфоны с интегрированным шпионским софтом продаются и на территории России. Как сообщал CNews в ноябре 2019 г., в смартфонах 26 крупных и не очень производителей, в том числе российских BQ и Dexp, было выявлено 146 различных уязвимостей. В списке присутствовала и продукция Samsung – мобильники J5, J6, J7, J7 Neo, J7 Duo и J7 Pro.
Во всех случаях, как и с софтом Qihoo 360, вредоносы были встроены непосредственно в прошивку устройств. Самостоятельное их удаление пользователем не представляется возможным.
Шпионят все
ПО для слежки можно обнаружить и в составе обычных компьютеров, но даже тут не обошлось без Китая. В начале 2015 г. выяснилось, что все новые на тот момент компьютеры китайской компании Lenovo, предназначенные для потребительского рынка, были заражены разновидностью вредоносной программы под названием Superfish. Приложение внедряет рекламные объявления в результаты поиска Google без согласия пользователя. Причем объявления выглядят так, как будто их туда поместила сама Google. Вся серьезность ситуации заключается в том, что хакеры могут легко взломать Superfish и использовать это приложение для перехвата пользовательских данных – от логинов и паролей до номеров банковских карт, указываемых пользователем в веб-формах.
Опасность, таящаяся в некоторых ПК Lenovo, тем не менее, не помешала Министерству обороны США закупить в 2018 г. свыше 1500 таких компьютеров на $2,168 млрд. Вместе с ними американские военные закупили принтеры Lexmark, ПО которых содержало более чем 20 уязвимостей, эксплуатация которых позволяла злоумышленникам удаленно осуществлять DoS-атаки в сети ведомства или шпионить за его сотрудниками.
Помимо «шпионских» принтеров и компьютеров Пентагон для нужд сухопутных войск и ВВС приобрел 117 видеокамер Gopro, которые также были признаны непригодными для использования по соображениям безопасности.
Читайте также: