Android uuid version 1

Как я могу получить UUID моего Android телефона в приложении?

Я ищу помощь, чтобы получить UUID моего Android телефона. Я поискал в сети и нашел одно потенциальное решение, но оно не работает в эмуляторе.

Кто-нибудь знает, почему это не работает, или у вас есть лучшее решение?

7 ответов

Возможный Дубликат : Программно получить собственный номер телефона в iPhone OS Я новичок в технологии iPhone. В настоящее время я создаю приложение для набора номера, в котором требуется номер телефона моей iPhone формы моей SIM карты. Как я могу получить номер телефона моего устройства iPhone?

Я работаю над приложением Android. Как я могу получить обои для телефона в Android? Пожалуйста, помогите мне. Дайте мне пример кода.

Как упоминает Дэйв Уэбб, в блоге разработчика Android есть статья , в которой рассказывается об этом. Их предпочтительным решением является отслеживание установки приложений, а не устройств, и это будет хорошо работать в большинстве случаев использования. Сообщение в блоге покажет вам необходимый код, чтобы это сработало, и я рекомендую вам проверить его.

Однако далее в блоге обсуждаются решения, если вам нужен идентификатор устройства, а не идентификатор установки приложения. Я поговорил с кем-то в Google, чтобы получить дополнительные разъяснения по нескольким пунктам в случае, если вам это понадобится. Вот что я обнаружил об идентификаторах устройств, которые NOT упоминаются в вышеупомянутом сообщении в блоге:

  • ANDROID_ID-это предпочтительный идентификатор устройства. ANDROID_ID абсолютно надежен в версиях Android =2.3. Только 2.2 имеет проблемы, упомянутые в посте.
  • Несколько устройств нескольких производителей страдают от ошибки ANDROID_ID в 2.2.
  • Насколько мне удалось определить, все затронутые устройства имеют один и тот же ANDROID_ID , который равен 9774d56d682e549c . Который также является тем же идентификатором устройства, о котором сообщает эмулятор, кстати.
  • Google считает, что OEMs исправили проблему для многих или большинства своих устройств, но я смог убедиться, что по состоянию на начало апреля 2011 года, по крайней мере, по-прежнему довольно легко найти устройства со сломанным ANDROID_ID.
  • Когда устройство имеет несколько пользователей (доступно на некоторых устройствах под управлением Android 4.2 или выше) , каждый пользователь отображается как совершенно отдельное устройство, поэтому значение ANDROID_ID уникально для каждого пользователя.

Основываясь на рекомендациях Google, я реализовал класс, который будет генерировать уникальный UUID для каждого устройства, используя ANDROID_ID в качестве исходного кода, где это уместно, возвращаясь к TelephonyManager.getDeviceId() по мере необходимости, а если это не удастся, прибегая к случайно сгенерированному уникальному UUID, который сохраняется при перезапуске приложения (но не при повторной установке приложения).

Обратите внимание, что для устройств, которые должны откатиться на устройстве ID, уникальный идентификатор БУДЕТ сохраняться во всех заводских сбросах. Это то, о чем нужно знать. Если вам нужно убедиться, что сброс к заводским настройкам сбросит ваш уникальный ID, вы можете рассмотреть возможность возврата непосредственно к случайному UUID вместо устройства ID.

Опять же, этот код предназначен для устройства ID, а не для установки приложения ID. В большинстве ситуаций установка приложения ID-это, вероятно, то, что вы ищете. Но если вам действительно нужно устройство ID, то следующий код, вероятно, будет работать для вас.

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

Как я могу получить список контактов телефона в мобильном приложении FireMonkey?

Это работает для меня:

Вам также необходимо указать android.permission.READ_PHONE_STATE в манифесте. Начиная с Android M, вам необходимо запросить это разрешение во время выполнения.

Вместо того, чтобы получать IMEI из TelephonyManager, используйте ANDROID_ID.

Читайте также:  Папка с вирусами андроид

Это работает для каждого устройства android независимо от наличия телефонии.

Источник

How to retrieve an Unique ID to identify Android devices ?

Feb 9, 2017 · 4 min read

Some developers can need an Unique ID to identify Android devices. Use cases where developers need this Unique ID are multiples.

For example, when you want to :

  • identify an Android user to store games scores on a server
  • track apps installation
  • generate DRM for copy protection.

Several solutions exist but none is perfect. In this tutorial, we’re going to examine five solutions and presenting their disadvantages :

1. Unique Telephony Number (IMEI, MEID, ESN, IMSI)

If you only target smartphones, you can take profit of the fact that the device have telephony services.So, you can easily retrieve an unique ID identifying the device.

This unique ID c an be IMEI, MEID, ESN or IMSI. They can be defined as follows :

  • IMEI for International Mobile Equipment Identity : the Unique Number to identify GSM, WCDMA mobile phones as well as some satellite phones
  • MEID for Mobile Equipment IDentifier : the globally unique number identifying a physical piece of CDMA mobile station equipment, the MEID was created to replace ESNs (Electronic Serial Number)
  • ESN for Electronic Serial Number : the unique number to identify CDMA mobile phones
  • IMSI (International Mobile Subscriber Identity) : the unique identification associated with all GSM and UMTS network mobile phone users

To retrieve the unique ID associated to your device, you can use the following code :

This solution needs to request for android.permission.READ_PHONE_STATE to your user which can be hard to justify following the type of application you have made.

Furthermore, this solution is limited to smartphones because tablets don’t have telephony services. One advantage is that the value survives to factory resets on devices.

You can also try to get a MAC Address from a device having a Wi-Fi or Bluetooth hardware. But, this solution is not recommended because not all of the device have Wi-Fi connection. Even if the user have a Wi-Fi connection, it must be turned on to retrieve the data. Otherwise, the call doesn’t report the MAC Address.

3. Serial Number

Devices without telephony services like tablets must report a unique device ID that is available via android.os.Build.SERIAL since Android 2.3 Gingerbread. Some phones having telephony services can also define a serial number. Like not all Android devices have a Serial Number, this solution is not reliable.

4. Secure Android ID

On a device first boot, a randomly value is generated and stored. This value is available via Settings.Secure.ANDROID_ID . It’s a 64-bit number that should remain constant for the lifetime of a device. ANDROID_ID seems a good choice for a unique device identifier because it’s available for smartphones and tablets. To retrieve the value, you can use the following code :

However, the value may change if a factory reset is performed on the device. There is also a known bug with a popular handset from a manufacturer where every instance have the same ANDROID_ID. Clearly, the solution is not 100% reliable.

As the requirement for most of applications is to identify a particular installation and not a physical device, a good solution to get unique id for an user if to use UUID class. The following solution has been presented by Reto Meier from Google in a Google I/O presentation :

UUID.randomUUID() method generates an unique identifier for a specific installation. You have just to store that value and your user will be identified at the next launch of your application. You can also try to associate this solution with Android Backup service to keep the information available for the user even if he installs your application on an other device.

Identify a particular device on Android is not an easy thing. There are many good reasons to avoid that. Best solution is probably to identify a particular installation by using UUID solution. However, if you want absolutely identify a particular device physically, you can try to use the ANDROID_ID solution. Not 100% reliable but better than other solutions.

Читайте также:  Хот спот для андроида

Источник

Как правильно идентифицировать 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.

Читайте также:  Reboot system now андроид не включается планшет

Но это не самое плохое. Самый большой недостаток в том, что такие фреймворки, как 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, чтобы быть готовым к моменту, когда доступ к ним будет ограничен.

Если у вас есть вопросы или дополнения — делитесь ими в комментариях. А на этом все, спасибо за внимание!

Источник

Оцените статью