Интеграция Nakama для серверной части мобильной игры

TRUETECH занимается разработкой, поддержкой и обслуживанием мобильных приложений iOS, Android, PWA. Имеем большой опыт и экспертизу для публикации мобильных приложений в популярные маркеты Google Play, App Store, Amazon, AppGallery и другие.

Разработка и поддержка любых видов мобильных приложений:

Информационные и развлекательные мобильные приложения
Новостные приложения, игры, справочники, онлайн-каталоги, погодные, фитнес и здоровье, туристические, образовательные, социальные сети и мессенджеры, квиз, блоги и подкасты, форумы, агрегаторы
Мобильные приложения электронной коммерции
Интернет-магазины, B2B-приложения, маркетплейсы, онлайн-обменники, кэшбэк-сервисы, биржи, дропшиппинг-платформы, программы лояльности, доставка еды и товаров, платежные системы
Мобильные приложения для управления бизнес-процессами
CRM-системы, ERP-системы, управление проектами, инструменты для команды продаж, учет финансов, управление производством, логистика и доставка, управление персоналом, системы мониторинга данных
Мобильные приложения электронных услуг
Доски объявлений, онлайн-школы, онлайн-кинотеатры, платформы предоставления электронных услуг, платформы кешбека, видеохостинги, тематические порталы, платформы онлайн-бронирования и записи, платформы онлайн-торговли

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

Услуги, которые мы предлагаем
Показано 1 из 1Все 1735 услуг
Интеграция Nakama для серверной части мобильной игры
Средний
~1-2 недели
Часто задаваемые вопросы

Наши компетенции:

Этапы разработки

Последние работы

  • image_mobile-applications_feedme_467_0.webp
    Разработка мобильного приложения для компании FEEDME
    792
  • image_mobile-applications_xoomer_471_0.webp
    Разработка мобильного приложения для компании XOOMER
    671
  • image_mobile-applications_rhl_428_0.webp
    Разработка мобильного приложения для компании RHL
    1097
  • image_mobile-applications_zippy_411_0.webp
    Разработка мобильного приложения для компании ZIPPY
    969
  • image_mobile-applications_affhome_429_0.webp
    Разработка мобильного приложения для компании Affhome
    914
  • image_mobile-applications_flavors_409_0.webp
    Разработка мобильного приложения для компании FLAVORS
    495

Интеграция Nakama для серверной части мобильной игры

Nakama — open-source игровой бэкенд от Heroic Labs. Закрывает большую часть серверной инфраструктуры для мобильных игр: аккаунты, социальные функции, leaderboards, матчмейкинг, real-time матчи, хранилище данных. Альтернатива кастомному бэкенду на Go/Node.js для команд, которые хотят быстро запустить мобильную игру без написания серверного кода с нуля.

Подключение клиента

Nakama SDK доступен для Unity, Godot, Unreal, и как REST/WebSocket API для нативного мобильного (iOS Swift SDK, Android Kotlin SDK).

На Unity:

var client = new Client("http", "127.0.0.1", 7350, "defaultkey");
var socket = Socket.From(client);

// Аутентификация через device ID
var session = await client.AuthenticateDeviceAsync(
    SystemInfo.deviceUniqueIdentifier,
    username: null,
    create: true
);

await socket.ConnectAsync(session);

Session автоматически обновляется через client.SessionRefreshAsync при истечении токена. Refresh token хранить в PlayerPrefs или Keychain/Keystore — не в plain SharedPreferences без шифрования.

Хранилище и профиль игрока

Nakama Storage Engine — документное хранилище с управлением доступом:

var writeObject = new WriteStorageObject {
    Collection = "player_data",
    Key = "inventory",
    Value = JsonWriter.ToJson(inventory),
    PermissionRead = 1,  // Только владелец читает
    PermissionWrite = 1  // Только владелец пишет
};
await client.WriteStorageObjectsAsync(session, new[] { writeObject });

Leaderboard с еженедельным reset — одна строка создания через Nakama Console или API. Запись результата: client.WriteLeaderboardRecordAsync(session, "weekly_score", score: 1500). Список лидеров с пагинацией: client.ListLeaderboardRecordsAsync.

Real-time матчи

Nakama поддерживает два типа матчей: relayed (сервер пересылает сообщения между клиентами, логика на клиенте) и authoritative (серверная логика на Lua или TypeScript).

Authoritative матч — кастомный модуль на TypeScript:

const matchInit = (ctx: nkruntime.Context, logger: nkruntime.Logger,
    nk: nkruntime.Nakama, params: {[key: string]: string}): {
        state: nkruntime.MatchState, tickRate: number, label: string
    } => {
    return { state: { players: {} }, tickRate: 10, label: "game_room" };
};

const matchLoop = (ctx: nkruntime.Context, logger: nkruntime.Logger,
    nk: nkruntime.Nakama, dispatcher: nkruntime.MatchDispatcher,
    tick: number, state: nkruntime.MatchState,
    messages: nkruntime.MatchMessage[]): nkruntime.MatchState | null => {
    // Обработка входящих сообщений, обновление состояния
    for (const msg of messages) {
        // валидация хода, обновление state
    }
    dispatcher.broadcastMessage(1, JSON.stringify(state), null, null);
    return state;
};

tickRate: 10 — 10 тиков в секунду. Для пошаговых игр можно снизить до 1-2.

Матчмейкинг

var ticket = await client.AddMatchmakerAsync(
    session,
    query: "+properties.skill:>1200",
    minCount: 2,
    maxCount: 4,
    stringProperties: new Dictionary<string, string> { ["mode"] = "deathmatch" },
    numericProperties: new Dictionary<string, double> { ["skill"] = 1500 }
);

socket.ReceivedMatchmakerMatched += matched => {
    // Получили матч, подключаемся
    socket.JoinMatchAsync(matched.MatchId);
};

Матчмейкер Nakama использует запросы в стиле Bleve Search. +properties.skill:>1200 — найти игроков со скиллом выше 1200. Можно добавить географическую фильтрацию через +properties.region:eu.

Сроки

Базовая интеграция Nakama (аутентификация, хранилище, leaderboard): 3-5 дней. Полноценная система с authoritative матчами, матчмейкингом и социальными функциями: 2-4 недели. Стоимость рассчитывается индивидуально.