Это история о том, как я тестировал одно мобильное приложение для которого важным было то, что установка и работа приложения происходит за границей. Казалось бы, все должно быть просто, поменял регион в телефоне/эмуляторе или включил VPN и вот тебе счастье. Но это не всегда так, и настройка окружения может затянуться на сутки!
Это не туториал, но в общих чертах вы узнаете, как приложения могут вычислять местоположение, какие приложения часто помогают легко поменять геопозицию, и как все таки сделать эмуляцию региона, когда все способы провалились.
Кстати, если вы знаете еще способ, как можно было всего этого избежать, то напишите, пожалуйста.
Эмулятор не всесилен
В документации Android Studio в общих чертах говорится о том, что у эмулятора есть настройка location. Говорится как включить и какие варианты использования есть. В принципе для тестирования, например, простых гибридных приложений подойдет. Но в моем случае меня ждало разочарование: проставил нужный регион, установил приложение - приложение вычислило мое реальное местоположение.
Выглядит настройка интуитивно понятно. Выбираем точку на карте или поиском, или даже можно загрузить GPX файл.
GPX - это формат, который позволяет хранить и обрабатывать данные GPS, т.е. можно проложить маршрут и эмулятор будет по нему ходить
VPN тоже не спасает
Это была следующая попытка. Поставил бесплатный VPN и чудо не случилось, приложение все равно вычисляло мое реальное местоположение. А еще бесплатные VPN редко дают выбрать нужную локацию. Так что если вам нужно выбирать - выбирайте платный VPN.
Но если ваше приложение сложное, такое как у меня, делающие запросы к другим сервисам, то эти сервисы могут подсвечивать реальное местоположение. Это кстати и было одной из главных проблем, которые заставили повозиться.
Добавляем в связку "настройка эмулятора и VPN" спец. приложения
Есть такое приложение fake gps, которое позволяет задать свое местоположение просто поставив точку на карте! Очень крутая штука, если нужно тестировать что-то простое.
А еще стоит попробовать приложение morelocale 2. Оно в один клик меняет локаль (язык и страну) в ОС. Не нужно лазить в настройки, искать смену региона и языка.
Но и добавление этих приложений не решило мою задачу (сымитировать установку и работу приложения заграницей). И тут подходим к следующему источнику, откуда аппка узнает мою реальную геопозицию.
Мобильная сеть, как источник геопозиции
Не секрет, что сим-карта может подсказывать приложениям о геопозиции юзера. В случае с физическим устройство все просто - надо вытащить симку.
На счет авиа-режима не уверен, но по личному опыту не решает проблему
В эмуляторе это решается через выполнение пары команд в adb (если не знаешь что это, читай статью "ADB - лучшее начало для погружения в тестирование Android"):
adb shell
su
setprop gsm.operator.iso-country <код страны>
setprop gsm.sim.operator.iso-country <код страны>
Код страны можно взять в доке ВК для разработчиков: https://dev.vk.com/reference/country-codes. Команда setprop задает свойства эмулятора. Полный список свойств и значений можно посмотреть командой getprop.
Но даже задав эти свойства мне не удалось полностью подменить геопозицию, приложение в некоторых критичных частях функционала понимало где я нахожусь.
Идем к разработке
Рассказываем что хотели сделать, рассказываем и показываем скринкаст с тем, что делали выше и спрашиваем: "Как решить задачу?". Скорее всего тебе дадут какие-то подсказки, например, мне порекомендовали подменить ответы пары вызовов API. Сделал, но все равно решить полностью задачу не удалось, приложение все также понимало где я нахожусь.
Идем к менеджеру/лиду/etc, но...
Предварительно отписываемся в задаче, что не удалось подменить геопозицию полностью и честно проверить работу приложения.
Заводим задачу на доработку приложения, чтобы у тестирования был простой способ имитировать геопозицию в нужно стране. И вот это очень важный момент:
Если для успешного тестирования тебе нужен отладочный механизм - требуй его. Лучше всего просить еще на этапе начала разработки.
В моем случае так исторически сложилось, что приложение обросло кучей крутых механизмов вычисления геопозиции, и так как его проверяли в разное время разные люди и в разных контекстах, то никто не попросил сделать отладочный механизм.
И вот я дошел до заинтересованных лиц, чтобы задачу взяли скорее в работу, надеюсь что скоро у нас появится отладка и после меня другие тестировщики не будут тратить кучу времени (потратил сутки), чтобы сделать задачу на половину и понять, что нужна отладка.
Скромно приглашаю читать мой блог в телеграмме "Тестировщик" :)
Комментарии (7)
Hlad
20.05.2022 08:25+31. С симки можно считать ICCID, и расшифровать его, узнав страну и оператора. Так что симку придётся вытащить
2. После того, как симка вытащена, телефон всё равно может совершить экстренный звонок в службы спасения. То есть, ему доступна информация о вышках сотовой связи по соседству. По ним он может определить своё местонахождение с точностью до 400-500 метров. Так что после вытаскивания симки надо врубить авиарежим
3. Доступные сети WiFi и устройства Bluetooth тоже способны «спалить» местонахождение. Так что WiFi и BT тоже придётся вырубить.
4. IP-адрес и маршруты до сайтов тоже палят контору на раз. Так что придётся включить VPN.
5. Ну и модуль GPS, само собой надо вырубить…Blacklynx
20.05.2022 13:27С симки можно считать ICCID, и расшифровать его, узнав страну и оператора. Так что симку придётся вытащить
А как обычное приложение может получить доступ к этой информации?
Hlad
20.05.2022 13:41stackoverflow.com/questions/9751823/how-can-i-get-the-iccid-number-of-the-phone
У автора, как я понимаю, программа достаточно специфическая. Так что она может и напрямую запросить у пользователя все требуемые для этого разрешенияSovetkali Автор
20.05.2022 17:31Ого, сколько интересного в комментах! Чувствую какой я дилетант в этой теме.
Да, мне посчастливилось тестировать такое приложение, которое (по моему опыту), даже получая серверные конфиги начинает определять гео.
avelor
На физических девайсах можно сделать так
Берем штук 5 роутеров дешманских
На них настраиваем sid и mac точек доступа в нужном регионе (есть публичные данные, например тут https://www.wigle.net ) Выбираем сети похожие на домашние
Раздаём вайфай с впн/прокси в нужном регионе. Желательно резидентные/мобильные
Телефон, устройство которое раздаёт вайфай, и пяток роутеров суем в клетку фарадея (или ищем тихое место, важно чтоб телефон не видел местных сетей, а другие телефоны не видели наших фейковых. Это самая сложная часть:)
Ессно вырубаем симку и gps который спутниковый
Вместо 4-5 можно использовать/совместить с глушилкой маломощной (могут быть сложности с покупкой готовых).
В целом всё. Ну и у wigle есть апишка, настройку роутеров можно автоматизировать, делал PoC на микротиках.