Как получить UUID Android-устройства в Kotlin Jetpack

В Jetpack-проекте на Kotlin чаще всего нужен не настоящий UUID устройства, а стабильный идентификатор для приложения. Для этого обычно используют Settings.Secure.ANDROID_ID. В Compose не стоит читать его прямо в каждом @Composable: лучше получить id в слое данных или ViewModel и передать в UI как состояние

Базовая функция выглядит так:

fun readAndroidId(context: Context): String {
    return Settings.Secure.getString(
        context.contentResolver,
        Settings.Secure.ANDROID_ID
    )
}

Вариант для Compose

Если нужен быстрый учебный пример, можно прочитать id через LocalContext, но важно помнить: это не лучший вариант для большой архитектуры

@Composable
fun DeviceIdScreen() {
    val context = LocalContext.current
    val deviceId = remember {
        Settings.Secure.getString(
            context.contentResolver,
            Settings.Secure.ANDROID_ID
        )
    }

    Text(text = "ID: $deviceId")
}

Такой пример помогает увидеть результат, но для реального приложения лучше вынести получение id из UI

Более чистый вариант

Создайте провайдер:

class DeviceIdProvider(
    private val context: Context
) {
    fun getDeviceId(): String {
        return Settings.Secure.getString(
            context.contentResolver,
            Settings.Secure.ANDROID_ID
        )
    }
}

Затем передайте его во ViewModel через вашу DI-схему, factory или репозиторий. Compose будет только отображать значение:

@Composable
fun DeviceIdScreen(viewModel: DeviceViewModel) {
    Text(text = viewModel.deviceId)
}

Когда лучше генерировать свой UUID

Если вам нужен идентификатор установки приложения, а не Android ID, сгенерируйте UUID один раз:

val appInstallId = UUID.randomUUID().toString()

После этого сохраните его в DataStore. Такой идентификатор будет понятнее по смыслу: он относится к установке приложения. Если пользователь удалит приложение и поставит заново, id можно создать заново

Для Jetpack-проекта это часто самый честный вариант: UI не знает, откуда пришел id, ViewModel получает готовое значение, а слой хранения решает, читать старый UUID или создавать новый

Как проверить

  1. Запустите экран на эмуляторе.
  2. Убедитесь, что Text показывает непустую строку.
  3. Перезапустите приложение.
  4. Проверьте, что значение не меняется между обычными запусками.

Не выводите идентификатор в публичный интерфейс без причины. В статье это удобно для проверки, но в продукте такие данные лучше скрывать

Частые ошибки

Называть ANDROID_ID серийным номером

Это не серийный номер устройства. Это Android ID, и его правила зависят от Android

Читать id в каждом recomposition

В Compose функция может вызываться много раз. Используйте remember для учебного примера или, лучше, передавайте готовое значение из ViewModel

Использовать id для логина

Не привязывайте аккаунт только к идентификатору устройства. Для авторизации нужен нормальный серверный механизм

Показывать id пользователю без смысла

Идентификатор полезен для диагностики, но в обычном интерфейсе он только пугает и занимает место. Если нужен экран поддержки, можно добавить кнопку «Скопировать диагностический ID», но не выводить его постоянно

Что почитать дальше по Kotlin

Если нужен общий маршрут по теме, откройте рубрику Kotlin. Для соседних задач пригодятся эти разборы:

Оцените статью
0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest

0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии
0
Оставьте комментарий! Напишите, что думаете по поводу статьи.x