TGViewer
SpellSinger - разработчик игр на Unity SpellSinger - разработчик игр на Unity @spellsingergames · 548 subscribers
Post #224 711
Про сейвы в Играх ВКонтакте

Как-то мы получили жалобу от игрока в ВК
добрый вечер. Все обновилось. Игра началась с самого начала. У меня были покупки и прокачка на макс. обидно как то.


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

Потом мы получиили ещё одну аналогичную жалобу. И ещё. В какой-то момент, мы реализовали возможность восстановить сейв через промокод (загружаем сейв на сервер, игрок вводит промокод и игра затирает локальный сейв тем, что получила с сервера). Стало легче восстанавливать прогресс, но причину не удавалось обнаружить.

Чтобы найти причину, мы добавляли подробные дебаг логи работы системы сохранений, и в какой-то момент удалось поймать ошибку. Суть ошибки была, что сохранение «испорчено». Надо сказать, что сохранения у нас шифруются (спасибо автору видео), и было непонятно, как именно оно испорчено. Добавили логирование сохранения до шифрования, и спустя какое-то время и ещё одного несчастного игрока в ВК выяснилось, что:

В VKWebAppStorageSet
Сохраняются только первые 4096 символов, для сериализованной строки — 2236 символов.

Что я естественно не заметил при интеграции с ВК. Или может заметил, но не подумал на тот момент, что наши сейвы станут такими большими. Причем, страдали именно игроки с большим прогрессом, так как сейв разрастается по мере получения игроком новых портретов, скинов и апгрейдов.

Технически проблема решается не очень сложно, при сейве надо просто делить строку на части по 4096 символов, и отдельным ключом сохранять количество частей. При чтении сейва сначала запрашиваешь количество частей, потом все нужные части. Плюс можно сделать оптимизацию, и первым запросом к VKWebAppStorageGet сразу запрашивать количество частей и первую часть - с высокой вероятностью, весь сейв поместится в первую часть.

Но у меня есть ряд риторических вопросов к ВК:
1) Почему вообще есть такое ограничение? Яндекс разрешает 200 КБ, и это выглядит разумной экономией места, но 4096 символов, серьезно?
2) Почему длина сериализованной строки должна быть ещё меньше, всего 2236 символов? В чем для вас разница?
3) Что вообще такое сериализованная строка? В документации про это ни слова. Как я должен понять, чем они отличаются?
4) Пока искал, что такое сериализованная строка, наткнулся на этот пост. Серьезно? До 2023 года данные хранились всего год?

#игры_вконтакте
  • 🤯 11
  • 😁 3
  • 👍 2
More from @spellsingergames
  1. Oct 1, 2026Автор
  2. Aug 31, 2026Post #235
  3. Aug 25, 2026Прошли модерацию на Crazy Games. Basic Launch продлится до 15 сентября или пока не наберет…
  4. Aug 24, 2026А мы, тем временем, идём покорять #crazy_games Вчера ночью отправили билд на модерацию. Мо…
  5. Aug 24, 20262 недели нужно рекоммендеру Яндекс игр, чтобы как-то отреагировать на изменения метрик. AR…
  6. Aug 14, 2026Шестой эпизод подкаста ГЕЙМДЕВ ПОД ПИВОМ уже во вторник, в 22:30МСК! Хорошенечко отоспитес…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →