- Как правильно идентифицировать Android-устройства
- Зачем нужна идентификация
- Основные способы идентификации
- Использование аппаратных идентификаторов
- Генерация UUID с первым запуском
- Использование идентификаторов, предоставляемых системой
- Создание цифрового отпечатка (fingerprint) устройства
- Какой метод выбрать
- 7 способов найти потерянный телефон на Android
- Google Find My Device
- Хронология от Google
- Samsung Find My Mobile
- Prey Anti Theft
- Family Locator
- Where My Droid
- Используйте Google Фото
- Часто задаваемые вопросы
Как правильно идентифицировать Android-устройства
Всем привет! Если вам нужно создать уникальный и стабильный идентификатор Android-устройства для использования внутри приложения, то вы наверняка заметили тот хаос, который присутствует в документации и в ответах на stackoverflow. Давайте рассмотрим, как решить эту задачу в 2020 году. О том, где взять идентификатор, стойкий к переустановкам вашего приложения, и какие могут быть сложности в будущем — в этом кратком обзоре. Поехали!
Зачем нужна идентификация
В последнее время обсуждения конфиденциальности пользовательских данных стремительно набирают популярность. Возможно, это спровоцировано ростом выручки рекламных гигантов. Возможно, под этими обсуждениями скрывается обеспокоенность монополиями, которые идентифицируют пользователей и их устройства. Так, Apple, борясь со слежкой и ограничивая всем разработчикам использование IDFA, в то же самое время нисколько не ограничивает его себе. Что можно сказать точно: процесс идентификации пользователя приложения для разработчиков усложнился.
В задачах, опирающихся на идентификацию, встречаются: аналитика возвратов, персонализация контента и рекламы, предотвращение мошенничества.
Среди последних можно выделить несколько актуальных проблем:
Общие аккаунты в сервисах с платной подпиской или уникальным платным контентом. Только представьте сколько теряют сервисы вроде Netflix или Coursera от того, что пользователи заводят один аккаунт на нескольких человек.
Обе проблемы ведут либо к потере выручки, либо к репутационным потерям. Надежность их решения напрямую зависит от надежности идентификации устройств.
Основные способы идентификации
Использование аппаратных идентификаторов
Устаревший и нежизнеспособный в настоящее время способ. Google хорошо поработала над тем, чтобы закрыть доступ к ним, поскольку они не меняются даже после сброса к заводским настройкам. Среди таких идентификаторов:
В настоящее время они недоступны без явного запроса разрешений. Более того, если приложению нужно ими пользоваться, оно может не попасть в Play Market. Оно должно основным функционалом опираться на эти разрешения, иначе будут трудности с прохождением ревью. Поэтому сейчас эта опция доступна приложениям для работы со звонками или голосовым ассистентам.
Такие идентификаторы не меняются после сброса к заводским настройкам, и здесь кроется неочевидный недостаток: люди могут продавать свои устройства, и в таком случае идентификатор будет указывать на другого человека.
Генерация UUID с первым запуском
Данный способ схож с использованием cookie: создаем файл со сгенерированной строкой, сохраняем его в песочнице нашего приложения (например с помощью SharedPreferences), и используем как идентификатор. Недостаток тот же, что и у cookie — вся песочница удаляется вместе с приложением. Еще она может быть очищена пользователем явно из настроек.
При наличии у приложения разрешений к хранилищу вне песочницы можно сохранить идентификатор где-то на устройстве и постараться поискать его после переустановки. Будет ли в тот момент нужное разрешение у приложения — неизвестно. Этот идентификатор можно использовать как идентификатор установки приложения (app instance ID).
Использование идентификаторов, предоставляемых системой
В документации для разработчиков представлен идентификатор ANDROID_ID. Он уникален для каждой комбинации устройства, пользователя, и ключа, которым подписано приложение. До Android 8.0 идентификатор был общим для всех приложений, после — уникален только в рамках ключа подписи. Этот вариант в целом годится для идентификации пользователей в своих приложениях (которые подписаны вашим сертификатом).
Существует и менее известный способ получить идентификатор общий для всех приложений, независимо от сертификата подписи. При первичной настройке устройства (или после сброса к заводским) сервисы Google генерируют идентификатор. Вы не найдете о нем никакой информации в документации, но тем не менее можете попробовать код ниже, он будет работать (по состоянию на конец 2020 года).
Добавляем строчку в файл манифеста нужного модуля:
И вот так достаем идентификатор:
В коде происходит следующее: мы делаем запрос к данным из определенного ContentProvider-a, что поставляется с сервисами Google. Вполне возможно, что Google закроет к нему доступ простым обновлением сервисов. И это даже не обновление самой операционки, а пакета внутри нее, т.е. доступ закроется с обычным обновлением приложений из Play Market.
Но это не самое плохое. Самый большой недостаток в том, что такие фреймворки, как Xposed, позволяют с помощью расширений в пару кликов подменить как ANDROID_ID, так и GSF_ID. Подменить локально сохраненный идентификатор из предыдущего способа сложнее, поскольку это предполагает как минимум базовое изучение работы приложения.
Приложение Device ID Changer в связке с Xposed позволяет подменять практически любой идентификатор. В бесплатной версии — только ANDROID_ID
Создание цифрового отпечатка (fingerprint) устройства
Идея device-fingerprinting не новая, и активно используется в вебе. У самой популярной библиотеки для создания отпечатка — FingerprintJS — 13 тысяч звезд на GitHub. Она позволяет идентифицировать пользователя без использования cookie.
Рассмотрим идею на примере (цифры взяты приблизительные для иллюстрации).
Возьмем ежедневную аудиторию какого-нибудь Android-приложения. Допустим она составляет 4 миллиона. Сколько среди них устройств марки Samsung? Гораздо меньше, примерно 600 тысяч. А сколько среди устройств Samsung таких, что находятся под управлением Android 9? Уже около 150 тысяч. Выделим среди последних такие, что используют сканер отпечатков пальцев? Это множество устройств еще меньше, ведь у многих планшетов нет сканера отпечатков пальцев, а современные модели опираются на распознавание лица. Получим 25000 устройств. Добавляя больше условий и получая больше информации, можно добиться множеств малых размеров. В идеальном случае — с единственным элементом внутри, что и позволит идентифицировать пользователя. Чем больше пользователей можно различить, тем выше энтропия этой информации.
Среди основных источников информации в Android, доступных без пользовательских разрешений, можно выделить аппаратное обеспечение, прошивку, некоторые настройки устройства, установленные приложения и другие.
Обычно всю добытую информацию хешируют, получая цифровой отпечаток. Его и можно использовать в качестве идентификатора.
Из достоинств метода — его независимость от приложения (в отличие от ANDROID_ID), поскольку при одинаковых показаниях с источников отпечатки будут одинаковыми. Отсюда же вытекает первый недостаток — разные устройства с некоторой вероятностью могут иметь одинаковый отпечаток.
Еще одна особенность отпечатка — не все источники информации стабильны. Например, установленные приложения дадут много энтропии. Возьмите устройство друга, и проверьте, одинаков ли у вас набор приложений. Скорее всего — нет, к тому же приложения могут устанавливаться и удаляться почти каждый день.
Таким образом, метод будет работать при правильном соотношении стабильности и уникальности источников энтропии.
Какой метод выбрать
Итак, мы рассмотрели доступные способы идентификации. Какой же выбрать? Как и в большинстве инженерных задач, единственного правильного решения не существует. Все зависит от ваших требований к идентификатору и от требований к безопасности приложения.
Разумный вариант — использовать сторонние решения с открытыми исходниками. В этом случае за изменениями в политике конфиденциальности будет следить сообщество, вовремя поставляя нужные изменения. За столько лет существования проблемы до сих пор нет популярной библиотеки для ее решения, как это есть для веба. Но среди того, что можно найти на android-arsenal, можно выделить две, обе с открытым исходным кодом.
Android-device-identification — библиотека для получения идентификатора. Судя по коду класса, ответственного за идентификацию, используются аппаратные идентификаторы, ANDROID_ID, и цифровой отпечаток полей из класса Build. Увы, проект уже 2 года как не поддерживается, и в настоящий момент скорее неактуален. Но, возможно, у него еще будет развитие.
Fingerprint-android — совсем новая библиотека. Предоставляет 2 метода: getDeviceId и getFingerprint. Первый опирается на GSF_ID и ANDROID_ID, а второй отдает отпечаток, основанный на информации с аппаратного обеспечения, прошивки и некоторых стабильных настроек устройства. Какая точность у метода getFingerprint — пока неясно. Несмотря на это библиотека начинает набирать популярность. Она проста в интеграции, написана на Kotlin, и не несет за собой никаких зависимостей.
В случае, когда импортирование сторонних зависимостей нежелательно, подойдет вариант с использованием ANDROID_ID и GSF_ID. Но стоит следить за изменениями в обновлениях Android, чтобы быть готовым к моменту, когда доступ к ним будет ограничен.
Если у вас есть вопросы или дополнения — делитесь ими в комментариях. А на этом все, спасибо за внимание!
Источник
7 способов найти потерянный телефон на Android
Вы беспокоитесь из-за того, что не можете найти свой телефон на Android. Может его его украли? Избавьтесь от своих страхов, установив систему слежения до того как произойдет самое худшее. Большинство смартфонов сейчас поставляются со встроенным сервисом Find My Device (ранее он назывался Android Device Manager). Этот сервис автоматически отслеживает местоположение телефона, поэтому если он потеряется, вы сможете сесть за компьютер и узнать последнее известное местоположение утерянного гаджета.
Хотя вариант встроенного сервиса от Google, безусловно лучше, чем ничего, но есть достойные альтернативы в виде сторонних приложений. Далее мы расскажем про лучшие из них. Если сомневаетесь в выборе — установите несколько. Это намного проще, чем искать утерянный телефон, на котором вообще не установлена система безопасности.
Google Find My Device
Find My Device — это официальный инструмент Google для отслеживания потерянного телефона или планшета на Android, его не нужно устанавливать. Все, что нужно сделать, — зайти на сайт Find My Device, используя свою учетную запись Google. Сайт автоматически попытается определить местоположение вашего телефона.
В недавнем обновлении Google внедрил новые функции на странице поиска: можно быстро найти любое зарегистрированное устройство на Android прямо в результатах поиска, как обычно вы ищите какую-нибудь информацию. Если ввести фразу «где мой телефон», Google отобразит небольшую карту над результатами поиска.
Отслеживать потерянное устройства можно с чужого телефон. Для этого используется приложение Find My Device. Туда входят, используя гостевой режим и аккаунт в Google. Теперь вы сможете отслеживать потерянное устройство, заставить его звонить или стереть данные.
Вы не можете найти свой Android таким способом? На это могут быть 2 причины: он не подключен к интернету или выключен.
Хронология от Google
Вот что вам нужно сделать. Перейдите в хронологию мест от Google (бывшая история местоположений Google Maps) и убедитесь, что в календаре выбран текущий день. На левой боковой панели вы можете увидеть полную временную шкалу этого дня, включая названия всех записанных местоположений. Справа вы можете увидеть все места, показанные на карте.
Помимо функции Find Your Device, которая использует спутниковую систему GPS для отслеживания, временная шкала использует идентификаторы вышек сотовой связи и определение местоположения Wi-Fi для сбора данных о месте нахождения устройства. Таким образом вы можете определить часто посещаемые места, где может жить или работать вор. Это поможет полиции поймать того, кто украл телефон.
Samsung Find My Mobile
Если у вас устройство Samsung, возможно, вы сможете найти свой телефон с помощью службы отслеживания Samsung — Find my mobile.
Приложение установлено? Прекрасно! Перейдите и войдите на сайт Find my mobile. Проверьте левую боковую панель и убедитесь, что устройство подключено к учетной записи. Теперь все, что вам нужно сделать, — выбрать «Найти мое устройство» на боковой панели и нажать кнопку «Найти».
Если устройство подключено к сети, включено удаленное управление, то вы увидите его приблизительное местоположение. Эта опция также позволяет выполнять другие действия: блокировать устройство, звонить на него, отправлять сообщения и стирать данные.
Prey Anti Theft
Prey Anti Theft — это приложение от разработчика с более чем 10-летним опытом поиска потерянных телефонов, ноутбуков и планшетов. Оно также доступно для iOS, Windows, Linux, Ubuntu или Mac. Используя бесплатный аккаунт вы можете отслеживать до трех устройств. Сервисом пользуется более 7 миллионов человек.
Prey открывает широкие возможности удаленного управления. Получение точных координат устройства на карте и доступ ко всем встроенным камерам позволит максимально точно выяснить местонахождение. В нем есть не только GPS, но и сканирование ближайших сетей Wi-Fi для лучшего определения местоположения.
Если телефон пропал в закрытом помещении, например, на конференции, то можно удаленно активировать очень громкий звуковой сигнал, даже если включен беззвучный режим. Демонстрация предупреждающего сообщения на экране поможет мотивировать злоумышленника на возврат устройства владельцу. При смене SIM-карты вы получите сообщение с информацией о новой карте. Отправив всего одну SMS-команду с любого телефона, вы начнете получать отчет о состоянии и местоположении гаджета.
Family Locator
Приложение The Family Locator от Life360 в первую очередь предназначено для того, чтобы друзья или члены семьи могли обмениваться своим местоположением друг с другом. Но его можно использовать и для поиска украденного телефона.
Наибольшую пользу оно принесет семьям, использующим одновременно несколько телефонов. Члены семьи объединяются в Circle — название закрытой группы людей в приложении, подтвердивших свое согласие на то, что местоположение их телефонов будет отслеживаться в реальном времени. Если телефон из этой группы потеряют или украдут, приложение тут же покажет его местоположение.
Where My Droid
Основные функции приложения Where My Droid позволят вам звонить на утерянный телефон, находить его с помощью GPS на картах Google и использовать код доступа для предотвращения несанкционированных изменений на устройстве. При смене SIM-карты тут же приходит уведомление, доступен режим невидимки.
Есть Stealth Mode (режим невидимки), который не позволит вору просматривать входящие текстовые сообщения. Для управления устройством можно использовать SMS-сообщения. Платная версия позволяет удаленно стирать данные, блокировать устройство и управлять фронтальной и задней камеры, чтобы сфотографировать злоумышленника.
Используйте Google Фото
С помощью функции резервного копирования и синхронизации в Google Фото все изображения, сделанные на вашем телефоне, будут загружены в ваш аккаунт. На изображении есть место, где оно было сделано. Поэтому если вор не вышел из учетной записи Google и использовал камеру, в Google Фото появятся новые изображения.
Итак, войдите в Google Фото под своей учетную записью. Проверьте, были ли сделаны фотографии после кражи устройства. Если да, то нажмите на изображение. Теперь нажмите на значок информации в правом верхнем углу. В появившейся боковой панели можно увидеть информацию об изображении, включая место, где оно было снято.
Пожалуйста, будьте осторожны, если вы определили местонахождение потерянного телефона — это вполне может быть домашний адрес вора. Не пытайтесь забрать его самостоятельно! Используйте эту информацию и позвоните в полицию, чтобы она приняла ваше заявление.
Часто задаваемые вопросы
Могу ли я найти телефон, если он выключен или аккумулятор разряжен?
Нет никакого способа это сделать, если, конечно, вы не работаете в ФСБ. При отсутствии доступа к интернету можно использовать историю местоположения, если эта функция активирована, чтобы увидеть, где он находился до того, как пропала связь.
Могу ли я отследить телефон, если кто-то сделал сброс к заводским настройкам?
Такой сброс настроек возвращает его к заводским настройкам, т. е. он не будет подключен к аккаунту Google. Если вы не установили приложение для отслеживания с root-доступом, например, Cerberus, вы больше не сможете его найти.
Могу ли я найти телефон по номеру IMEI?
Это невозможно. Единственный выход — заблокировать его. Для этого лучше всего обратиться к вашему мобильному оператору. Кстати, узнать IMEI можно, набрав *#06#. Этот код работает на большинстве устройств.
Мой телефон не отображается на Find My Device. Почему?
На это может быть много причин: он выключен, отключен от интернета или от вашего аккаунта Google. Имейте в виду, что изменение пароля аккаунта автоматически отключит его от Google и Find My Device не сможет его отследить.
Источник