Цель:
Я ищу способ найти unique_id для Android-устройства.
История:
Я буду использовать идентификатор Id в логинном запросе и, поскольку мое приложение приложение для службы на основе лицензии, Id не должно меняться при обычных обстоятельствах.
Существующие подходы:
В iOS есть несколько уникальных решений для iOS, таких как CFUUID или идентификаторForVendor в сочетании с Keychain, рекламным идентификатором и т.д., которые могут выполнить это задание до ожидания.
Но в Android все варианты, которые, как мне кажется, имеют дыру в нем.
IMEI:
TelephonyManager TelephonyMgr = (TelephonyManager)getSystemService(TELEPHONY_SERVICE);
String m_deviceId = TelephonyMgr.getDeviceId();
Недостатки
Это зависит от SIM-карты, поэтому
-
Если нет сим-карты, мы обречены
-
Если есть двойной sim, то мы dommed
Android_ID:
String m_androidId = Secure.getString(getContentResolver(), Secure.ANDROID_ID);
Недостатки
- Если версия ОС обновлена, она может измениться
- Если устройство укоренено, оно изменяется.
- Нет гарантии, что device_id уникален, есть некоторые сообщения, которые некоторые производители имеют дубликат device_id
MAC-адрес WLAN
WifiManager m_wm = (WifiManager)getSystemService(Context.WIFI_SERVICE);
String m_wlanMacAdd = m_wm.getConnectionInfo().getMacAddress();
Недостатки
- Если нет wifi-оборудования, мы обречены
- В некоторых новых устройствах Если wifi выключен, мы обречены.
Адрес Bluetooth:
BluetoothAdapter m_BluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
String m_bluetoothAdd = m_BluetoothAdapter.getAddress();
Недостатки:
- Если нет оборудования Bluetooth, мы обречены.
- В будущем в некоторых новых устройствах мы не сможем прочитать его, если он выключен.
Возможные решения:
Есть два подхода, которые, как я думаю, для решения этой проблемы
-
Мы генерируем случайный идентификатор с помощью метки времени хеширования с уникальными идентификаторами, которые я упомянул, и сохраняем их в следующий раз во время проверки входа в систему, если хранимое значение ключа равно null, если оно так хорошо генерирует и сохраняет его иначе используйте значение ключа.
Если есть что-то, что эквивалентно keychain iOS, тогда было хорошо с этим подходом.
-
Найти глобальный идентификатор, например, advertisingIdentifier iOS, который одинаковый для всех приложений на устройстве.
Любая помощь приветствуется!