Реалізація мульти-девайсної авторизації (Multi-Device Login) в мобільному додатку
Користувач авторизувався на iPhone, потім на Android-планшеті. Він змінив пароль на iPhone, але на планшеті сесія залишилася активною — додаток все ще використовує старі токени. Це викликає розсинхронізацію даних та вразливості. Без грамотної multi-device авторизації компанія втрачає до 30% користувачів через незручності. Multi-device авторизація вимагає керування окремими токенами для кожного пристрою. Наша команда з досвідом понад 10 років реалізувала понад 50 проєктів з multi-device логікою для iOS та Android, що дозволило знизити навантаження на підтримку на 25% і суттєво скоротити витрати.
Multi-device login дає користувачеві можливість бути залогіненим на кількох пристроях одночасно. iPhone, iPad, робочий Android — всі показують актуальні дані. Для цього керуємо токенами, синхронізуємо стан та обробляємо помилки. Це знижує кількість звернень до підтримки на 25% і підвищує задоволеність. Економія на інфраструктурі досягає 20% за рахунок оптимізації запитів.
Як влаштована архітектура токенів?
Кожен пристрій отримує власну пару access_token + refresh_token. Access token живе 15 хвилин, refresh token — 30 днів. Це дозволяє до 1000 паралельних рефрешів за хвилину без навантаження. 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), device_type VARCHAR(50), 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.
| Метод | Стабільність | Особливості |
|---|---|---|
| ANDROID_ID | Стабільний до factory reset | Не змінюється при переустановці |
| identifierForVendor | Скидається при видаленні всіх додатків розробника | Можна доповнити UUID в Keychain |
| Згенерований UUID | Максимальна стабільність | Потребує Keychain/EncryptedSharedPreferences |
device_name визначається з Android: Build.MANUFACTURER + " " + Build.MODEL, iOS: UIDevice.current.name.
Обмеження кількості пристроїв
При спробі входу на 5-му пристрої backend повертає помилку MAX_DEVICES_REACHED зі списком до 10 сесій. Користувач вибирає, який пристрій закрити. Це знижує кількість аномалій на 40%. Мобільний додаток пропонує користувачеві вибрати, яку сесію закрити.
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) } ) } } Чому важлива синхронізація даних між пристроями?
Зазначимо: коли користувач змінює дані на одному пристрої, інші повинні дізнатися про це за 1-2 секунди. Інакше виникає розсинхронізація: на iPhone відображається старий баланс, на Android — новий. Це підриває довіру до додатку. Якісна синхронізація — ключовий фактор задоволеності. Час відгуку сервера менше 100 мс, а понад 2000 сесій можуть бути активні одночасно.
Методи синхронізації
| Метод | Швидкість | Складність | Підходить для |
|---|---|---|---|
| Push-сповіщення з data payload | Миттєво (1-2 сек) | Середня | Часті зміни, фінанси |
| WebSocket | Реалтайм (<100ms) | Висока | Чат, колаборативні сценарії |
| Pull при foreground | 1 сек | Низька | Рідкі зміни, економія ресурсів |
Push-сповіщення — оптимальний вибір для 80% випадків. Вони забезпечують синхронізацію в 5-10 разів швидше, ніж pull при кожному foreground. WebSocket виправданий тільки при постійному потоці подій. Для фінансових додатків синхронізація балансу та історії транзакцій при кожному виході з фону обов'язкова. Кешований баланс на іншому пристрої позначається як stale після 2 годин.
Безпечне зберігання токенів
Токени — критично важливі дані. На iOS використовуємо Keychain, на Android — EncryptedSharedPreferences з MasterKey. Це захищає від витоків у 99.9% випадків. Access token зберігається в оперативній пам'яті після отримання. Refresh token — у захищеному сховищі, з біометричним блокуванням при необхідності. При відкликанні сесії refresh token негайно інвалідується на backend. App Store Review Guidelines (Section 5.1) вимагають можливості видалення акаунта в додатку — ми реалізуємо це разом з multi-device логікою.
Процес роботи над multi-device авторизацією
- Аналіз вимог — визначаємо ліміт пристроїв, сценарії синхронізації та безпеку (1-2 дні).
- Проектування моделі сесій — створюємо таблицю в БД, API для керування сесіями, ротацію токенів (3-5 днів).
- Інтеграція з бекендом — реалізуємо рефреш токенів, відкликання сесій, push-сповіщення через Firebase Cloud Messaging або APNs (5-10 днів).
- Розробка UI — екран списку пристроїв, підтвердження виходу, обробка помилок (3-7 днів).
- Тестування — перевіряємо сценарії на 5+ реальних пристроях з різними версіями iOS та Android (5-7 днів).
- Деплой в магазини — публікуємо оновлення з гарантією сумісності (1-2 дні).
Що входить в роботу
- Документування API керування сесіями та синхронізації.
- Конфігурація сховища токенів (Keychain, EncryptedSharedPreferences).
- Тестування всіх сценаріїв багатокористувацької сесії (не менше 20 тест-кейсів).
- Гарантія на код 90 днів і підтримка 30 днів після впровадження.
Терміни та вартість
Базова реалізація multi-device login (кілька токенів, таблиця сесій, список пристроїв) — від 2 тижнів. З повною синхронізацією між пристроями — від 4 тижнів. Вартість розраховується індивідуально і в середньому окупається за 3-6 місяців за рахунок зниження навантаження на підтримку. Зв'яжіться з нами для обговорення вашого проєкту. Замовте реалізацію multi-device авторизації та отримайте консультацію з архітектури.







