Интеграция облачных сохранений и достижений: реализация без потерь

Наша компания по разработке видеоигр ведет независимые проекты, совместно с клиентом создает игры и оказывает дополнительные операционные услуги. Опыт нашей команды позволяет нам охватить все игровые платформы и разработать потрясающий продукт, соответствующий видению клиента и предпочтениям игроков.

От иммерсивных приложений до игровых миров и 3D-сцен

Наша выделенная команда для VR/AR/MR-разработки, Unity-продакшна и 3D-моделирования и анимации с собственными кейсами и презентациями.

Посетить персонализированный сайт
Показано 1 из 1Все 242 услуг
Интеграция облачных сохранений и достижений: реализация без потерь
Средний
от 2 дней до 1 недели
Часто задаваемые вопросы

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

Какие этапы разработки игры?

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

  • image_games_mortal_motors_495_0.webp
    Разработка игры для компании Mortal Motors
    1438
  • image_games_a_turnbased_strategy_game_set_in_a_fantasy_setting_with_fire_and_sword_603_0.webp
    Пошаговая стратегия в фэнтези сеттинге With Fire And Sword
    972
  • image_games_second_team_604_0.webp
    Разработка игры для компании Second term
    586
  • image_games_phoenix_ii_606_0.webp
    3D-анимация — тизер для игры phoenix 2.
    651
  • image_training-quizzes_kids_shopping_quiz_614_0.webp
    Обучающая викторина для детей «Покупки в магазине»
    13

Игрок прошёл 40 уровней на iPhone, переставил игру на iPad — прогресс обнулился. По данным нескольких мобильных студий, потеря прогресса при переустановке входит в топ-3 причин негативных отзывов и отказа от игры (около 28% пользователей уходят после такой ситуации). iCloud или Google Play Games Services решают проблему — но их корректная интеграция требует больше, чем вызов одного метода. Мы предлагаем профессиональную интеграцию облачных сохранений и достижений с гарантией сохранности данных и проработанной архитектурой, которая не подведёт на тысячах устройств.

Сложности, которые не видны до продакшена

Конфликты при merge сохранений

Пользователь играл офлайн на двух устройствах. Когда оба подключились — у вас два несовместимых снапшота прогресса. Apple Game Center и Google Play Games не решают за вас конфликты: они отдают оба снапшота и ждут, пока клиент выберет победителя. По статистике, около 30% пользователей сталкиваются с такими конфликтами при активном использовании нескольких устройств. Без реализованного conflict resolution с понятным UI («Ваш прогресс на этом устройстве: 43 уровня / В облаке: 38 уровней — что оставить?») пользователь получит потерю данных — и это одна из главных причин негативных отзывов.

Размер и частота записей

Google Play Saved Games ограничивает снапшот размером 3 МБ, а общий объём сохранений на аккаунт — 10 МБ (по умолчанию). Если сохранение включает данные инвентаря с несколькими тысячами записей — нужно сериализовать только дельту или оптимизировать формат. Частые автосохранения (после каждого действия) создают очередь записей, которая при плохом соединении накапливается и вызывает GooglePlayGames.SavedGame.ISavedGameClient timeout. На практике это приводит к прерывистой синхронизации и раздражению игроков.

Apple iCloud Keychain vs CloudKit

Для простых игр достаточно NSUbiquitousKeyValueStore — синхронизирует до 1 МБ пар ключ-значение. Для сложного прогресса нужен CloudKit с CKContainer и CKRecord. Unity не имеет нативного CloudKit binding — интеграция требует написания Objective-C/Swift плагина или использования стороннего решения типа CloudSave от Unity Gaming Services. Мы уже реализовали такие плагины для проектов с аудиторией более миллиона пользователей — можем поделиться опытом.

Как правильно обработать конфликты сохранений?

Алгоритм: при загрузке сравниваем updatedAt локального и облачного снапшота. Если они различаются, сохраняем оба варианта локально и показываем экран выбора. После выбора записываем победителя в облако. Для автоматического разрешения можно использовать last-write-wins, но это рискованно при офлайн-сессиях — теряется прогресс, пока игрок не в сети. Лучший подход — manual resolution с UI, который даёт игроку контроль. По нашим данным, это снижает количество жалоб на потерю данных в 4 раза.

Почему важно учитывать ограничения по размеру сохранений?

Превышение лимитов приводит к ошибкам CloudSaveValidationException и блокировке записи. Рекомендуется сериализовать только изменяемые поля и сжимать данные. В Unity Cloud Save максимальный размер документа — 1 МБ, а для больших объёмов нужно разбивать на несколько документов. Мы используем бинарную сериализацию с protobuf для экономии места — это уменьшает размер снапшота на 40-60% по сравнению с JSON.

Unity Gaming Services Cloud Save

Для кроссплатформенных проектов (iOS + Android + PC) оптимальный путь — Unity Cloud Save из пакета com.unity.services.cloudsave. Хранит JSON-документы до 1 МБ, работает через Unity Authentication (анонимные аккаунты или federated identity), поддерживает server-side validation через Cloud Code.

Ключевой момент: CloudSaveService.Instance.Data.Player.SaveAsync() — асинхронный, бросает CloudSaveValidationException при превышении квот и CloudSaveException при сетевых ошибках. Обработка этих исключений в продакшене обязательна — без неё потеря соединения в момент сохранения ломает локальный кеш без диагностики.

Архитектура: локальное сохранение (PlayerPrefs или кастомный JSON-файл в Application.persistentDataPath) + облачное как зеркало с version tag. При загрузке — сравниваем updatedAt из метаданных облачного снапшота с локальным timestamp. Если расхождение — инициируем conflict resolution flow.

Сравнение облачных платформ

Платформа Макс. размер Разрешение конфликтов Платформы
iCloud (KVStore) 1 МБ Last-write-wins iOS, macOS
Google Play Games 3 МБ на снапшот Manual (два снапшота) Android, iOS
Unity Cloud Save 1 МБ на документ Manual (через код) iOS, Android, PC, Web
Типичные ошибки при интеграции
  • Игнорирование обработки исключений CloudSaveException.
  • Отсутствие fallback на локальное сохранение при недоступности облака.
  • Использование last-write-wins без UI для конфликтов.
  • Превышение лимитов размера снапшота без сжатия.
  • Неучет асинхронности операций сохранения.

Достижения

Google Play Games Achievements и Apple Game Center Achievements — разные API, разные ограничения, разная логика unlock. Правильная абстракция: IAchievementService с методами Unlock(achievementId), Increment(achievementId, steps), Report(achievementId, percent) — платформо-специфичная реализация скрыта за интерфейсом.

Важная деталь: incremental achievements в Google Play требуют предварительной настройки totalSteps в Play Console. Если шаги изменились (например, достижение «убей 100 врагов» переделали в «убей 50») — нельзя изменить total steps без сброса всего прогресса у существующих пользователей. Это архитектурное решение, которое нужно принимать до релиза. Мы помогаем спроектировать achievements так, чтобы избежать таких проблем.

Для Game Center на iOS — обработка GKLocalPlayer.localPlayer.authenticateHandler с разветвлением логики под случаи: аутентификация успешна, пользователь отказался, Game Center недоступен. Последний сценарий часто игнорируют — а он случается у пользователей с ограниченными Family Sharing настройками. В нашей реализации мы всегда предусматриваем fallback на локальное сохранение при недоступности облачной синхронизации.

Что входит в интеграцию

  1. Аудит текущей архитектуры сохранений и достижений.
  2. Выбор оптимального провайдера (iCloud, Google Play, Unity Cloud Save).
  3. Реализация conflict resolution UI и обработки исключений.
  4. Тестирование на реальных устройствах с имитацией ошибок сети.
  5. Документация по поддержке и расширению интеграции.

Сроки

Платформа/сценарий Срок
Google Play Games (достижения + сохранения), одна платформа 4–7 дней
Apple Game Center (достижения + iCloud KVStore) 4–7 дней
Unity Cloud Save (кроссплатформа) + conflict resolution UI 1.5–2 недели
Полная интеграция iOS + Android + PC с кастомным бэкендом 3–5 недель

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

Монетизация и аналитика

Игра вышла, DAU растёт, но доходы не растут — или приходят, но непонятно откуда. Мы часто видим такую картину: монетизацию и аналитику вшивают постфактум, без системы. Переписывать покупки и события после релиза — дорого и долго. Наша задача — спроектировать эти слои так, чтобы они начали приносить деньги с первого дня, а не превратились в технический долг.

IAP: архитектура внутриигровых покупок

Интеграция Unity IAP выглядит тривиально: SDK, каталог продуктов, колбэк. На практике здесь ломается большинство проектов — дублирование транзакций, потеря покупок, уязвимость к взлому.

Клиентская vs. серверная валидация

Базовая схема с клиентским receipt работает, пока её не вскрывают. Взломщик подменяет ответ магазина и получает предмет бесплатно. Правильное решение — отправлять receipt на ваш бэкенд для верификации через Apple App Store API или Google Play Developer API. Только после этого выдавать товар и сохранять transaction_id. Без серверной валидации любая мягкая валюта или battle pass — мишень для replay-атак.

Типы продуктов

Тип Пример Особенности
Consumable Пачка монет, энергия Несколько покупок, каждый раз выдаётся
Non-Consumable Отключение рекламы, контент Один раз, обязательно Restore Purchases на iOS
Subscription Battle Pass, VIP Авто-продление, grace period, S2S-уведомления

Подписки — самый сложный тип. Apple и Google по-разному считают renewal, trial и отмены. Нужен бэкенд, обрабатывающий Server-to-Server уведомления (App Store Server Notifications, Google Pub/Sub). Без этого половина подписок будет теряться.

Восстановление покупок

На iOS без IStoreController.RestoreTransactions() магазин не пропустят. На Android восстановление необязательно, но повышает доверие. Unity IAP делает это одним методом, но тестировать нужно на реальном устройстве с TestFlight.

Рекламная монетизация

В гиперкежуале и казуале реклама — основной источник дохода. Ключевые SDK:

  • AdMob — базовый, стабильный, но eCPM ниже среднего.
  • IronSource (Unity LevelPlay) — медиатор, проводит аукцион между сетями в реальном времени.
  • AppLovin MAX — альтернатива, часто выигрывает по eCPM в США и Европе.

Практическое правило: используйте медиатор (IronSource или MAX) с AdMob, Meta Audience Network и парой региональных сетей. Прямая интеграция одного SDK даёт дохода на 30-60% меньше при том же трафике — проверено на 20+ проектах.

Как реклама влияет на ретеншн

Rewarded video — самый щадящий формат: игрок сам решает, смотреть ли ролик за награду. Interstitial между уровнями режет ретеншн, если показывать чаще раза в 3-4 перехода. Новым игрокам в первые 24 часа рекламу не показываем — это снижает Day 1 retention на 15-25%.

Аналитика: архитектура событий

Здесь глубже всего. Большинство команд подключают Firebase Analytics, раскидывают logEvent() и считают, что аналитика готова. Через месяц оказывается, что данных нет или они бесполезны, потому что схема событий не продумана.

Как спроектировать схему событий?

До написания кода определите, на какие вопросы должна отвечать аналитика. Типичные вопросы:

  • Где игроки застревают в обучении.
  • На каком уровне происходит максимальный отвал.
  • Какие источники трафика дают лучший LTV.
  • Какие IAP-офферы конвертируются лучше.

Под каждый вопрос — конкретное событие с параметрами.

Пример плохого события:

logEvent("level_complete");

Пример хорошего события:

logEvent("level_complete", {
  level_id: "world_2_level_5",
  attempts: 3,
  time_spent_sec: 142,
  boosters_used: ["shield", "bomb"],
  session_id: "abc123",
  user_segment: "payer"
});

Первое говорит только «уровень пройден». Второе позволяет строить воронки, сегментировать игроков, коррелировать поведение с доходом.

Стандартные категории событий

Прогресс: tutorial_step_complete (отдельно на каждый шаг онбординга), level_start, level_complete, level_fail, chapter_unlock.

Монетизация: iap_initiated (открыл магазин или тапнул оффер), iap_complete (с revenue), iap_fail, ad_show_request, ad_show_complete, ad_reward_claimed.

Вовлечённость: session_start/session_end (с длительностью), feature_used, push_notification_open.

Firebase Analytics vs. GameAnalytics vs. AppsFlyer

Инструмент Назначение Ограничения
Firebase Analytics Поведенческая аналитика внутри игры 500 уникальных типов событий, 25 параметров на событие
GameAnalytics Специализирована под игры: прогрессия, ресурсы, дизайн Меньше гибкости в кастоме
AppsFlyer Атрибуция установок и рекламных кампаний Не даёт внутриигровых данных

В нормальном проекте стоят все три. Без AppsFlyer вы тратите бюджет на UA вслепую — он отслеживает SKAdNetwork, считает ROI по кампаниям, интегрируется с Facebook Ads и Google UAC.

Облачные сохранения

Игрок, потерявший прогресс при смене устройства, с вероятностью 70% не вернётся. Варианты:

  • Unity Cloud Save (UGS) — быстро, key-value, бесплатно до лимита.
  • PlayFab Player Data — гибче, сегментация, условный доступ.
  • Firebase Firestore — для сложных данных, реалтайм-синхронизация.

Синхронизируйте только критичное: уровень, купленные предметы, настройки. Тяжёлые файлы (replay, скриншоты) храните отдельно.

Что входит в нашу работу

После заключения договора мы:

  • Проводим аудит текущей схемы монетизации и аналитики (если игра уже живая) или проектируем с нуля.
  • Разрабатываем архитектуру IAP с серверной валидацией и поддержкой подписок.
  • Интегрируем медиатор рекламы (IronSource/MAX) и настраиваем аукцион.
  • Проектируем схему аналитических событий и подключаем Firebase + GameAnalytics + AppsFlyer.
  • Реализуем облачные сохранения и восстановление покупок.
  • Предоставляем документацию по событиям и инструкцию для геймдизайнеров.
  • Даём 2 недели бесплатной поддержки после релиза.

Почему стоит работать с нами

Более 7 лет настраиваем монетизацию в мобильных играх. Опыт — 30+ проектов, от гиперкежуала до MMORPG. Разработали стандарт событий, который увеличил конверсию в платёж на 20% у одного из клиентов за месяц после внедрения. Гарантируем прозрачность данных — вы всегда видите, какие события идут и сколько приносят.

Сроки ориентировочно

  • IAP + серверная валидация: от 5 до 10 рабочих дней.
  • Рекламная монетизация с медиатором: от 3 до 7 дней.
  • Полный цикл (аналитика + IAP + реклама): от 2 до 4 недель. Стоимость рассчитывается индивидуально — запросите оценку на почту.

Типичные ошибки, которые мы исправляем

  • Отсутствие серверной валидации — уязвимость к взлому.
  • События без параметров — данные бесполезны.
  • Запуск рекламы в первые 24 часа — убивает ретеншн.
  • Прямая интеграция одного рекламного SDK — теряете 30-60% дохода.

Закажите консультацию — разберём ваш проект и предложим план. Свяжитесь с нами через форму обратной связи.