Android получает уникальный идентификатор для устройства - PullRequest
1 голос
/ 19 мая 2019

Мне нужно ограничить подписку приложения определенным количеством устройств на пользователя. Для этого я пытался получить уникальный идентификатор для телефона Android (Hardware). Я нашел ниже варианты, но у всех них есть определенные проблемы. Есть ли какие-либо решения, которые не имеют этих проблем?

  • Номера Imei / Mei с использованием API-интерфейсов TelephonyManager ( getDeviceId ) - это будет проблематично, если у двух симов могут быть активные и неактивные слоты для симов.
  • AndroidId - будет сброшен при сбросе к заводским настройкам
  • Номер Wi-Fi Mac - чтобы получить этот номер, необходимо подключить Wi-Fi, и этого не будет для устройств без Wi-Fi.
  • Идентификатор рекламы - Может быть сброшен пользователем
  • Идентификатор экземпляра - можно сбросить до заводских настроек
  • Серийный номер сима - Не привязываться к устройству, а для сима

1 Ответ

0 голосов
/ 25 мая 2019

После поиска и обдумывания я придумаю следующее решение.

MacID может использоваться как уникальный идентификатор. MacID можно получить с помощью разрешения android.permission.READ_PHONE_STATE даже при отключенном состоянии Wi-Fi. Я успешно проверил их на нескольких устройствах, и он работает нормально. Мое тестирование в процессе будет обновлено здесь скоро.

public static String getDeviceMacId(){
        try {
            List<NetworkInterface> all = Collections.list(NetworkInterface.getNetworkInterfaces());
            for (NetworkInterface nif : all) {
                if (!nif.getName().equalsIgnoreCase("wlan0")) continue;

                byte[] macBytes = nif.getHardwareAddress();
                if (macBytes == null) {
                    return "";
                }

                StringBuilder res1 = new StringBuilder();
                for (byte b : macBytes) {
                    res1.append(String.format("%02X:",b));
                }

                if (res1.length() > 0) {
                    res1.deleteCharAt(res1.length() - 1);
                }
                return res1.toString();
            }
        } catch (Exception ex) {
            //handle exception
        }
        return "";
    }



Ссылка: https://stackoverflow.com/a/35830358/2788009

...