Извините, что поднял старый поток, но эта проблема вызывает у меня головную боль, я нашел хорошую статью для кого-то, чтобы прочитать, и это действительно мне очень помогает.
Иногда при разработке приложения для Android требуется получить уникальный идентификатор смартфона на базе Android. Это необходимо в тех случаях, когда пользователь хочет отслеживать уникальные установки устройства приложения.
Это также полезно в тех случаях, когда разработчик Android хочет отправлять Push-сообщения только нескольким конкретным устройствам. Поэтому здесь становится необходимым иметь UDID для каждого устройства.
В Android существует множество альтернатив UDID устройства. Некоторые методы получения UDID в приложении для Android перечислены ниже с его преимуществами и недостатками и всеми необходимыми разрешениями для получения идентификатора устройства.
- IMEI: (международный идентификатор мобильного оборудования)
- Идентификатор Android
- Строка MAC-адреса WLAN
- Строка адреса Bluetooth
1) IMEI: (международный идентификатор мобильного оборудования)
Номер IMEI является очень хорошим и основным источником для получения идентификатора устройства. Он уникален для каждого устройства и зависит от аппаратного обеспечения устройства. Таким образом, он также уникален для каждого устройства и является постоянным в течение всего срока службы устройства.
Фрагмент кода для получения IMEI устройства, как показано ниже,
TelephonyManager TelephonyMgr = (TelephonyManager)getSystemService(TELEPHONY_SERVICE);
String m_deviceId = TelephonyMgr.getDeviceId();
Для этого вашему приложению потребуется разрешение «android.permission.READ_PHONE_STATE», указанное в файле манифеста.
Преимущества использования IMEI в качестве идентификатора устройства:
IMEI уникален для каждого устройства.
Он остается уникальным для устройства, даже если приложение переустанавливается или устройство имеет root-права или заводские настройки.
Недостатки использования IMEI в качестве идентификатора устройства:
IMEI зависит от слота Simcard устройства, поэтому получить IMEI для устройств, которые не используют Simcard, невозможно.
В устройствах Dual sim мы получаем 2 разных IMEI для одного и того же устройства, поскольку у него есть 2 слота для симкарты.
2) Идентификатор Android
Android_ID - это уникальный 64-битный номер, который генерируется и сохраняется при первой загрузке устройства. Идентификатор Android_ID стирается, когда устройство сбрасывается до заводских настроек и генерируется новое.
Код для получения Android_ID показан ниже,
String m_androidId = Secure.getString(getContentResolver(), Secure.ANDROID_ID);
Преимущества использования Android_ID в качестве идентификатора устройства:
Это уникальный идентификатор для всех типов устройств (смартфонов и планшетов).
Не нужно никакого разрешения.
Он останется уникальным на всех устройствах и работает на телефонах без слота Simcard.
Недостатки использования Android_ID в качестве идентификатора устройства:
Если версия ОС Android была обновлена пользователем, это может измениться.
Идентификатор изменяется, если устройство имеет root-права или на устройстве выполнен сброс к заводским настройкам.
Также существует известная проблема с китайским производителем устройств Android, что некоторые устройства имеют одинаковый Android_ID.
3) Строка MAC-адреса WLAN
Мы также можем получить уникальный идентификатор для телефонов Android, используя MAC-адрес WLAN. MAC-адрес уникален для всех устройств и работает для всех типов устройств.
Фрагмент кода для получения MAC-адреса WLAN для устройства, как показано ниже,
WifiManager m_wm = (WifiManager)getSystemService(Context.WIFI_SERVICE);
String m_wlanMacAdd = m_wm.getConnectionInfo().getMacAddress();
Вашему приложению потребуется разрешение «android.permission.ACCESS_WIFI_STATE», указанное в файле манифеста.
Преимущества использования MAC-адреса WLAN в качестве идентификатора устройства:
Это уникальный идентификатор для всех типов устройств (смартфонов и планшетов).
Он остается уникальным, если приложение переустанавливается.
Недостатки использования MAC-адреса WLAN в качестве идентификатора устройства:
Если устройство не имеет оборудования Wi-Fi, тогда вы получаете нулевой MAC-адрес, но обычно видно, что большинство устройств Android имеют оборудование Wi-Fi, и на рынке практически нет устройств без оборудования Wi-Fi.
4) Строка адреса Bluetooth
Мы также можем получить уникальный идентификатор для телефонов Android, используя устройство Bluetooth.Адрес устройства Bluetooth уникален для каждого устройства, имеющего аппаратное обеспечение Bluetooth.
Фрагмент кода для получения адреса устройства Bluetooth приведен ниже,
BluetoothAdapter m_BluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
String m_bluetoothAdd = m_BluetoothAdapter.getAddress();
Чтобы получить вышеуказанный код, ваше приложениетребуется разрешение «android.permission.BLUETOOTH», указанное в файле манифеста.
Преимущества использования адреса устройства Bluetooth в качестве идентификатора устройства: это уникальный идентификатор для всех типов устройств (смартфонов и планшетов).Как правило, на всех устройствах установлено одно устройство Bluetooth, и оно не изменяется.
Недостатки использования адреса устройства Bluetooth в качестве идентификатора устройства: если устройство не имеет оборудования Bluetooth, вы получаете ноль.
На мой взгляд, это несколько из лучших способов получить уникальный идентификатор устройства для смартфона Android, а также их плюсы и минусы его использования.Теперь вам решать, какой метод использовать, основываясь на требованиях разработки приложений для Android.
Если есть какие-либо другие методы для получения UDID и которые покрывают недостатки вышеуказанных методов, то я хотел бы изучитьте, в моем приложении Android.Pl.поделиться ими в поле для комментариев, а также, если какие-либо предложения или вопросы.
Вот статья