Разделите Kotlin SDK на публичный API, локальное состояние и синхронизацию с сервером. Начисление достижений делайте идемпотентным и привязанным к игроку.
Kotlin‑SDK для управления игровыми достижениями
Разделите Kotlin SDK на публичный API, локальное состояние и синхронизацию с сервером. Начисление достижений делайте идемпотентным и привязанным к игроку.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Представьте, что вы проходите интервью в компанию, разрабатывающую мобильные игры. Компания пришла к выводу, что внедрение системы достижений повышает удержание игроков и их вовлечённость. Требуется создать SDK, позволяющий отслеживать, изменять и запрашивать достижения игрока внутри игры. Игры построены на разных движках (например, Unity), но могут вызывать Kotlin‑классы. Нужно спроектировать архитектуру, которая будет вести учёт достижений пользователя и обновлять их в реальном времени.
Ответ
Разделите Kotlin SDK на публичный API, локальное состояние и синхронизацию с сервером. Начисление достижений делайте идемпотентным и привязанным к игроку.
Публичный контракт может включать recordEvent(eventId, type, value), getAchievements() и подписку на изменения. Игровые события преобразуются в прогресс правил: счётчик, достижение порога или выполнение набора условий. Состояния — закрыто, в процессе, открыто.
Локальное хранилище обеспечивает работу без сети, очередь событий повторяется после соединения. eventId защищает от двойного учёта; при входе другим аккаунтом локальные данные не смешиваются. Сервер подтверждает значимые награды и проверяет ограничения: клиентская отметка не должна позволять накрутить экономику игры.
Для Unity предоставьте простой Java-совместимый фасад и callbacks с документированным потоком вызова. Не заставляйте движок знать внутренние coroutine-типы. Версионируйте правила достижений, ограничивайте очередь и явно завершайте подписки при уничтожении SDK.