Проєкт на Unity: казуальний раннер на Android та iOS. Гравці проходять 30 рівнів, купують скіни за внутрішню валюту та реальні гроші. Після скидання телефону прогрес зникає, покупки не відновлюються — результат: негативні відгуки, chargeback'и, падіння доходу на 40%. Така ситуація — прямий сигнал: без серверної авторизації та cloud save монетизація працює вхолосту.
Ми проєктуємо та впроваджуємо систему авторизації та профілів для ігрових проєктів на Unity, Unreal Engine, Godot. Досвід — 5+ років, реалізовано 30+ проєктів з аудиторією від 10K до 1M+ користувачів. Гарантуємо безпеку, account merge та масштабування під навантаження.
Яку архітектуру авторизації обрати?
Guest account (Device ID) → Upgrade to Full Account. Патерн, який максимально знижує бар'єр входу. Гравець запускає гру без реєстрації — створюється гостьовий акаунт, прив'язаний до Device ID / Apple IDFA / Android GAID. Прогрес зберігається. За бажанням — конвертує в повний акаунт (email, Apple Sign In, Google Play Games).
Ключовий момент — account merge: у гравця може бути гостьовий акаунт на одному пристрої та повний акаунт на іншому. Потрібна логіка об'єднання: який прогрес «перемагає»? Зазвичай беремо той, що старший, або той, де вищий рівень. Це бізнес-рішення, яке потрібно прийняти заздалегідь — не в момент першого бага.
Federated Identity (Social Login). Sign In with Apple (обов'язковий для iOS, якщо є інші social logins), Google Play Games (Android), Facebook, Steam. Не потрібно зберігати паролі — провайдер бере аутентифікацію на себе. Отримуємо JWT-токен, перевіряємо його підпис на сервері, видаємо власний session token. У порівнянні з кастомною системою, інтеграція social login через PlayFab скорочує час розробки приблизно на 50% (з 4 тижнів до 2 тижнів). Використання готового backend прискорює впровадження вдвічі.
Sign In with Apple — особливий випадок. Apple вимагає підтримки цього методу, якщо в грі є хоча б один інший third-party login. Крім того, Apple може приховувати email користувача та видавати relay email. Це потрібно враховувати: не можна покладатися на email як унікальний ідентифікатор у Apple-користувачів. Apple Developer Documentation: Sign In with Apple
Email + Password. Класика, але вимагає: зберігання паролів через bcrypt (не MD5 і не SHA1), rate limiting на login endpoint (наприклад, 5 спроб за хвилину з одного IP), secure password reset flow через email з time-limited токенами. У managed backend (PlayFab, Nakama) це є з коробки. У кастомному — потрібно реалізувати самостійно.
Що входить до профілю гравця?
Профіль гравця — це не просто {username, email, level}. Правильна структура розділяє дані за типом та частотою оновлення:
Акаунтні дані (persistent, рідко змінюються):
-
playerId— внутрішній UUID, ніколи не змінюється -
email,username,avatarUrl -
linkedAccounts— масив прив'язаних провайдерів (google, apple, steam) -
createdAt,lastLoginAt
Ігровий прогрес (persistent, часто оновлюється):
-
level,experience -
completedQuests[],unlockedContent[] -
inventoryId→ посилання на окрему колекцію (інвентар може містити до 200 предметів) -
statistics— kills, deaths, playtime, wins/losses
Сесійні дані (ephemeral, не зберігаються):
- Поточна позиція в матчі, тимчасові баффи, сесійна статистика — це в пам'яті сервера, не в БД
Розділення важливе для продуктивності: при вході в гру завантажуємо тільки акаунтні дані та базовий прогрес. Інвентар на 200 предметів підвантажуємо ліниво при відкритті інвентарного екрану — це скорочує час завантаження на 40%. У проєкті з 500 000 MAU ми таким чином знизили пікове навантаження на базу даних на 60%.
Чому безпека критична?
JWT validation на кожному запиті. Session token — JWT із підписом RS256 або HS256. Сервер перевіряє підпис та expiry при кожному API-виклику. Термін дії — 24–48 годин, refresh token — 30–90 днів.
Server-side validation для економічних операцій. Додавання валюти, застосування промокодів, результат матчу — тільки через серверний код. Клієнт може показати результат оптимістично, але остаточний стан визначає сервер. Інакше — memory editor дають гравцеві мільйон монет за 5 хвилин.
Rate limiting. Login endpoint: максимум 5 спроб за хвилину з одного IP. Це захист від brute force. У PlayFab і Nakama вбудовано. У кастомному — через Redis + sliding window.
| Метод авторизації | Час інтеграції | Особливості |
|---|---|---|
| Guest (Device ID) | 1–2 дні | Низький бар'єр, немає відновлення |
| Social Login | 3–7 днів | Apple Sign In обов'язковий на iOS, relay email |
| Email + Password | 5–10 днів | Вимагає bcrypt, rate limiting, password reset |
| Federated Identity | 2–4 тижні | Залежить від кількості провайдерів |
Як ми вирішували проблему account merge на реальному проєкті?
Реальний кейс: казуальний раннер, Android+iOS. Спочатку — local save тільки. Після додавання монетизації (скіни за IAP) — терміново потрібен cloud save. Додали PlayFab auth (Guest + Google Play Games + Apple Sign In) за 2 тижні. Проблема, яку не передбачили: частина гравців мала прогрес на Android під google-акаунтом і намагалися зайти на iPad — account merge видавав конфлікт. Знадобився додатковий екран «виберіть, який прогрес зберегти» + 3 дні доопрацювання. Рішення: при конфлікті показуємо обидва профілі, гравець обирає. Автоматика — якщо різниця в рівні більше 5, бере старший. Цей підхід знизив кількість звернень до підтримки на 30% і зменшив відтік гравців після зміни пристрою на 15%.
Процес реалізації
- Вибір identity provider та проєктування Login Flow: Guest → Social → Email. Це UX-рішення з технічними наслідками.
- Проєктування схеми даних профілю з урахуванням майбутнього зростання (кількість предметів, кланова система).
- Реалізація server-side validation для всіх економічних операцій.
- Тестування edge cases: втрата з'єднання під час збереження, дублювання акаунтів при повторній установці, expiry токена в середині ігрової сесії.
- Деплой та підтримка протягом 30 днів.
Що входить до роботи?
- Архітектура auth flow та дизайн схеми даних
- Інтеграція guest auth, social logins, email/password
- Реалізація JWT-токенів, refresh logic
- Server-side validation всіх економічних операцій
- Написання документації та передача доступів
- Підтримка протягом 30 днів після деплою
| Масштаб задачі | Орієнтовні терміни |
|---|---|
| Guest auth + basic cloud save (PlayFab/Nakama) | 1–2 тижні |
| Full auth (Social logins + email) + profile | 2–4 тижні |
| Кастомна система авторизації + JWT + PostgreSQL | 3–6 тижнів |
| Account merge + migration з local save | 1–2 тижні |
Вартість розраховується після аналізу вимог. Щоб отримати оцінку під ваш проєкт, зв'яжіться з нами — ми підготуємо комерційну пропозицію з урахуванням стеку та обсягу робіт. Отримайте консультацію з архітектури авторизації — це безкоштовно.






