Предотвращение мошенников: действительно ли это мобильное устройство или эмулятор?

1

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

Есть ли какое-то значение, которое я могу извлечь из устройства (ов), чтобы определить, является ли его эмулятор? Я не хочу, чтобы пользователи обманывали систему, просто устанавливая свои собственные значения для своих полных/длинных координат. Я знаю, что ничего не доказывает дурака, но я бы по крайней мере хотел устранить как можно больше мошенничества.

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

Это применимо как к Android, так и к iOS. Ответы для любого телефона будут в порядке.

Теги:
cocoa-touch

2 ответа

3
Лучший ответ

Вы можете использовать [UIDevice currentDevice].model, чтобы получить текущую модель устройства для iOS. Ссылка ссылка на UIDevice даст вам возможные постоянные строки, с которыми вы можете сравнить. Прокрутите страницу до свойства модели для получения дополнительной информации.

У вас нет большого опыта работы с Android, однако этот должен работать.

0

В Android, как оказалось, это немного сложнее, чем просто определить, действительно ли вы используете эмулятор (что может быть сделано с использованием ссылки Peter выше), учитывая возможность в разделе "Настройки разработки", чтобы разрешить Mock Locations (см., Например, это приложение, которое позволяет пользователю устанавливать макет местоположения, которое затем станет доступным для других приложений).

В зависимости от метода, который вы используете для извлечения провайдера местоположения (например, при вызове LocationManager.getProvider() с использованием возвращаемого значения из LocationManager.getBestProvider()), вы могли бы в конечном итоге использовать Mock Provider. Мне не удалось найти какой-либо окончательный метод определения того, является ли поставщик макетом или нет (например, нет свойства LocationProvider, указывающего, что это Mock, никакого свойства местоположения, которое указывает на его подделку и т.д.). Однако вы могли бы прочитать "Безопасные настройки" , чтобы определить, включено ли ALLOW_MOCK_LOCATION и не позволяет вашему приложению функционировать в этом случае; поскольку этот параметр является одним из параметров Secure Settings, нет возможности его программным образом изменить.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню