Реализация мульти-девайсной авторизации (Multi-Device Login) в мобильном приложении

TRUETECH занимается разработкой, поддержкой и обслуживанием мобильных приложений iOS, Android, PWA. Имеем большой опыт и экспертизу для публикации мобильных приложений в популярные маркеты Google Play, App Store, Amazon, AppGallery и другие.
Разработка и поддержка любых видов мобильных приложений:
Информационные и развлекательные мобильные приложения
Новостные приложения, игры, справочники, онлайн-каталоги, погодные, фитнес и здоровье, туристические, образовательные, социальные сети и мессенджеры, квиз, блоги и подкасты, форумы, агрегаторы
Мобильные приложения электронной коммерции
Интернет-магазины, B2B-приложения, маркетплейсы, онлайн-обменники, кэшбэк-сервисы, биржи, дропшиппинг-платформы, программы лояльности, доставка еды и товаров, платежные системы
Мобильные приложения для управления бизнес-процессами
CRM-системы, ERP-системы, управление проектами, инструменты для команды продаж, учет финансов, управление производством, логистика и доставка, управление персоналом, системы мониторинга данных
Мобильные приложения электронных услуг
Доски объявлений, онлайн-школы, онлайн-кинотеатры, платформы предоставления электронных услуг, платформы кешбека, видеохостинги, тематические порталы, платформы онлайн-бронирования и записи, платформы онлайн-торговли

Это лишь некоторые из типы мобильных приложений, с которыми мы работаем, и каждый из них может иметь свои специфические особенности и функциональность, а также быть адаптированным под конкретные потребности и цели клиента.

Предлагаемые услуги
Показано 1 из 1 услугВсе 1735 услуг
Реализация мульти-девайсной авторизации (Multi-Device Login) в мобильном приложении
Средняя
~3-5 рабочих дней
Часто задаваемые вопросы
Наши компетенции:
Этапы разработки
Последние работы
  • image_mobile-applications_feedme_467_0.webp
    Разработка мобильного приложения для компании FEEDME
    756
  • image_mobile-applications_xoomer_471_0.webp
    Разработка мобильного приложения для компании XOOMER
    624
  • image_mobile-applications_rhl_428_0.webp
    Разработка мобильного приложения для компании RHL
    1054
  • image_mobile-applications_zippy_411_0.webp
    Разработка мобильного приложения для компании ZIPPY
    947
  • image_mobile-applications_affhome_429_0.webp
    Разработка мобильного приложения для компании Affhome
    874
  • image_mobile-applications_flavors_409_0.webp
    Разработка мобильного приложения для компании FLAVORS
    445

Реализация мульти-девайсной авторизации (Multi-Device Login) в мобильном приложении

Multi-device login — возможность пользователя быть залогиненным на нескольких устройствах одновременно. iPhone, iPad, рабочий Android — все показывают актуальные данные. Технически это история про правильное управление токенами и синхронизацию состояния между устройствами.

Архитектура токенов

Каждое устройство получает собственную пару access_token + refresh_token. Backend хранит таблицу сессий:

CREATE TABLE user_sessions (
    id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
    user_id UUID NOT NULL REFERENCES users(id),
    device_id VARCHAR(255) NOT NULL,  -- уникальный идентификатор устройства
    device_name VARCHAR(255),          -- "iPhone 15 Pro", "Samsung Galaxy S24"
    device_type VARCHAR(50),           -- ios, android, web
    refresh_token_hash VARCHAR(255) NOT NULL,
    created_at TIMESTAMPTZ DEFAULT now(),
    last_active_at TIMESTAMPTZ DEFAULT now(),
    expires_at TIMESTAMPTZ NOT NULL,
    UNIQUE(user_id, device_id)
);

device_id на Android — Settings.Secure.ANDROID_ID (не меняется при переустановке, сбрасывается при factory reset). На iOS — identifierForVendor (сбрасывается при удалении всех приложений разработчика). Для более стабильного ID на iOS можно генерировать UUID при первом запуске и хранить в Keychain.

device_name определяется из: Android — Build.MANUFACTURER + " " + Build.MODEL, iOS — UIDevice.current.name.

Ограничение количества устройств

Некоторые приложения ограничивают количество активных сессий (стриминговые сервисы, финансовые приложения). При превышении лимита backend возвращает ошибку MAX_DEVICES_REACHED с списком активных сессий — мобильный предлагает пользователю выбрать, какую сессию закрыть.

sealed class LoginResult {
    data class Success(val tokens: AuthTokens) : LoginResult()
    data class MaxDevicesReached(val activeSessions: List<DeviceSession>) : LoginResult()
    data class Error(val message: String) : LoginResult()
}

@Composable
fun MaxDevicesScreen(sessions: List<DeviceSession>, onRevoke: (String) -> Unit) {
    Text("Достигнут лимит устройств. Выйдите с одного из них:")
    sessions.forEach { session ->
        DeviceSessionCard(
            deviceName = session.deviceName,
            lastActive = session.lastActiveAt,
            onRevoke = { onRevoke(session.id) }
        )
    }
}

Синхронизация данных между устройствами

Когда пользователь меняет данные на одном устройстве — другие должны узнать об этом. Механизмы:

Push-уведомления с data payload — при изменении профиля на устройстве A, backend отправляет silent push на все другие устройства пользователя. Устройство B просыпается, выполняет синхронизацию в фоне.

WebSocket — если приложение использует реалтайм, события синхронизации идут по тому же каналу.

Pull при foreground — при выходе из фона (onResume / applicationWillEnterForeground) запрашиваем свежие данные. Дёшево реализовать, подходит для нечастых изменений.

Для финансовых приложений — синхронизация баланса и истории транзакций при каждом выходе из фона обязательна. Кэшированный баланс на другом устройстве должен помечаться как stale после определённого времени.

Реализация multi-device login (multiple токены, таблица сессий, список устройств) — 2-3 недели. С синхронизацией данных между устройствами — 3-5 недель. Стоимость рассчитывается индивидуально.