Как управлять одновременным доступом к приложению с одной учетной записи на разных устройствах

«Как управлять одновременным доступом к приложению с одной учетной записи на разных устройствах» — вопрос из категории Архитектура, который задают на 23% собеседований Android Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Для управления одновременным доступом можно использовать Firebase Realtime Database или токены сессии. Пример с Firebase:

// При входе генерируем уникальный токен и сохраняем его
val currentToken = UUID.randomUUID().toString()
Firebase.database.reference.child("users/$userId/currentToken").setValue(currentToken)

// При каждом действии проверяем актуальность токена
Firebase.database.reference.child("users/$userId/currentToken")
    .addValueEventListener(object : ValueEventListener {
        override fun onDataChange(snapshot: DataSnapshot) {
            if (currentToken != snapshot.value.toString()) {
                // Выход, если токен изменился (вошел другой пользователь)
                logout()
            }
        }
    })

Другие подходы:

  1. Использование FCM для уведомления о новом входе
  2. Хранение времени последней активности и принудительный выход при неактивности
  3. Ограничение по количеству устройств через серверную логику