Я пробовал использовать такие методы, как IMEI, MEID, MAC-адрес, android_id, но все не в порядке.
Как получить уникальный номер устройства в Android?
Возможный дубликат Есть ли уникальный идентификатор устройства Android?
Вы искали это перед публикацией?
Для устройств Android доступно несколько уникальных идентификаторов.
IMEI
TelephonyManager TelephonyMgr = (TelephonyManager)getSystemService(TELEPHONY_SERVICE);
String imei = TelephonyMgr.getDeviceId();
разрешение
android.permission.READ_PHONE_STATE
MAC-адрес WLAN
WifiManager wifi = (WifiManager)getSystemService(Context.WIFI_SERVICE);
String wanMAC = wifi .getConnectionInfo().getMacAddress();
разрешение
android.permission.ACCESS_WIFI_STATE
MAC-адрес Bluetooth
BluetoothAdapter bluetoothAdapter =BluetoothAdapter.getDefaultAdapter();
String bluetoothMAC = bluetoothAdapter .getAddress();
разрешение
android.permission.BLUETOOTH
Android ID
String androidID = Secure.getString(getContentResolver(), Secure.ANDROID_ID);
Обратите внимание: не все устройства будут иметь IMEI, не все сотовые технологии используют его, а устройства без сотового подключения - нет. Вы можете получить MAC-адрес только в том случае, если соответствующее оборудование включено, а с Android 6.0 API-интерфейсы будут возвращать значение мусора.
IMEI и Android ID не будут работать в Android 10, так как они ограничены
MAC-адрес не может быть найден в Android версии 11. проверьте stackoverflow.com/questions/66257004/…
Да, согласно документации developer.android.com/training/articles/user-data-ids#java добавлены ограничения для идентификаторов оборудования Android.
Чтобы получить уникальный идентификатор, связанный с вашим устройством, вы можете использовать следующий код:
import android.telephony.TelephonyManager;
import android.content.Context;
// ...
TelephonyManager telephonyManager;
telephonyManager = (TelephonyManager) getSystemService(Context.
TELEPHONY_SERVICE);
/*
* getDeviceId() returns the unique device ID.
* For example,the IMEI for GSM and the MEID or ESN for CDMA phones.
*/
String deviceId = telephonyManager.getDeviceId();
/*
* getSubscriberId() returns the unique subscriber ID,
* For example, the IMSI for a GSM phone.
*/
String subscriberId = telephonyManager.getSubscriberId();
Безопасный Android ID
String androidId = Settings.Secure.getString(getContentResolver(),
Settings.Secure.ANDROID_ID);
IMEI и Android ID не будут работать в Android 10, так как они ограничены
Поскольку требование для большинства приложений - идентифицировать конкретную установку, а не физическое устройство, хорошее решение для получения уникального идентификатора для пользователя, если использовать класс UUID. Следующее решение было представлено Рето Мейером из Google в презентации Google I / O:
private static String uniqueID = null;
private static final String PREF_UNIQUE_ID = "PREF_UNIQUE_ID";
public synchronized static String id(Context context) {
if (uniqueID == null) {
SharedPreferences sharedPrefs = context.getSharedPreferences(
PREF_UNIQUE_ID, Context.MODE_PRIVATE);
uniqueID = sharedPrefs.getString(PREF_UNIQUE_ID, null);
if (uniqueID == null) {
uniqueID = UUID.randomUUID().toString();
Editor editor = sharedPrefs.edit();
editor.putString(PREF_UNIQUE_ID, uniqueID);
editor.commit();
}
}
return uniqueID;
}
Метод UUID.randomUUID () генерирует уникальный идентификатор для конкретной установки. Вам просто нужно сохранить это значение, и ваш пользователь будет идентифицирован при следующем запуске вашего приложения. Вы также можете попробовать связать это решение со службой Android Backup, чтобы информация оставалась доступной для пользователя, даже если он установит ваше приложение на другое устройство.
Вы можете узнать больше на https://medium.com/@ssaurel/how-to-retrieve-an-unique-id-to-identify-android-devices-6f99fd5369eb
Ниже приведен код, который я использовал в своем проекте.
Чтобы получить Уникальный Идентификатор Android
static String androidID = Settings.Secure.getString(MyApplication.getContext().getContentResolver(), Settings.Secure.ANDROID_ID);
Я использовал это как глобальное, поэтому могу использовать в любом месте своего проекта
В Android 10 у вас не может быть доступа к идентификаторам устройств, которые не могут быть сброшены, таким как IMEI, MEID и т. д.
Поэтому я думаю, что ваш лучший шанс - создать UUID. Вы можете сделать это, используя приведенный ниже код и сохранив этот UUID в базе данных или файле настроек.
String uniqueID = UUID.randomUUID().toString();
Как случайное число, каждый раз, когда вы вызываете этот метод, он будет возвращать другой код, и я думаю, что это не вы ищете.
Чтобы получить «уникальный идентификатор» из UUID, лучше всего использовать приведенный ниже код. Он будет работать нормально, но в документации также предлагается избегать использования Android_ID.
String androidId = Settings.Secure.getString(context.getContentResolver(),
Settings.Secure.ANDROID_ID);
UUID androidId_UUID = UUID
.nameUUIDFromBytes(androidId.getBytes("utf8"));
Этот код даст вам почти уникальный код, потому что, если пользователь выполнит сброс настроек до заводских, этот номер будет изменен.
Я ищу другой способ получить уникальный идентификатор, но до сих пор не нашел.
Вот некоторая документация для разработчиков Android, которая должна быть полезна. Хорошие практики для определения уникального идентификатора https://developer.android.com/training/articles/user-data-ids
Как определить уникальный идентификатор на основе вашего варианта использования:
https://developer.android.com/training/articles/user-data-ids#common-use-cases
Надеюсь, это может кому-то помочь.
Прочтите вопрос это SO.