Облачные сохранения
Рассмотрим как добавить облачные сохранения в свою игру через GamePush.
Концепция
Вы можете в любой момент сохранить данные игрока в облако GamePush. Сохранение работает даже для не авторизованных игроков.
Как работают облачные сохранения:
- При открытии игры SDK запрашивает с сервера актуальные данные игрока:
- По авторизационным данным площадки - если игрок авторизован на площадке;
- Или по секретному коду, если игрок - гость;
- Если профиля нет на сервере - он будет создан.
- Прогресс будет автоматически связан с профилем площадки.
- Пустой прогресс будет создан на основе умолчательных значений полей в панели управления.
- Из SDK, после загрузки, доступны актуальные данные игрока, полученные из облака (локальные, если используются локальные сохранения);
- Данные игрока можно изменять через метод
gp.player.set
;- Можно изменять / сохранять данные только тех полей, которые явно заданы в панели управления;
- Любое изменение данных игрока нужно подтвердить, запустив синхронизацию (
gp.player.sync
); - Во время синхронизации / первичной загрузки на сервере выполняются следующие действия:
- Сравнение профилей игроков на сервере и из клиента;
- Сравнение может привести к конфликту, когда игрок был гостем, а теперь авторизовался и в аккаунте уже есть прогресс. В этом случае мы предлагаем игроку выбрать, какие данные оставить в аккаунте, либо профили разделяются, зависит от идеологии площадки.
- Обновление статистики времени, проведенного в игре;
- Начисление энергии;
- Проверка ссылки аватара, можно сохранять только разрешенные ссылки на аватары, если эта опция включена в панели управления;
- Запрещенные ссылки будут заменены на пустой аватар.
- Сохранение данных в базу данных;
- Обновление рекордов глобальных лидербордов;
- Проверка / активация триггеров;
- Проверка / распределение A/B экспериментов;
- Проверка / актуализация сегментов;
- Проверка / актуализация списков мероприятий;
- Проверка / актуализация ежедневных наград;
- Выдача наград / достижений / покупок;
- Получение списка неизрасходованных покупок;
- Каждый раз при первом запросе:
- Отправка "Уведомления о заходе" всем открытым вкладкам с игрой на этом профиле игрока. Так вы можете отследить, что игрок открыл вторую вкладку с игрой или открыл игру на другом устройстве.
- Сравнение профилей игроков на сервере и из клиента;
- По завершении синхронизации данные становятся актуальными как на сервере, так и в SDK.
- В среднем синхронизация занимает 7 мс.
- Зависит от объема сохраняемых данных.
- Допустимый объем данных всего профиля - не более 1 МБ.
- Рекомендуемый объем данных всего профиля - не более 10 КБ (gzip).
Введение
Для сохранения в облако вам понадобится:
- Создать в панели управления поля игрока для сохранения.
- Подробнее про работу полей игрока вы можете почитать здесь.
- Изменить в SDK значение нужных полей игрока.
- Подробнее работу с данными игрока вы можете почитать здесь.
- Подтвердить изменения, вызвав метод синхронизации.
- Подробнее работу с синхронизацией игрока вы можете почитать здесь.
Для примера создадим несколько полей:
- Уровень. Будем сохранять последний пройденный уровень в игре.
- Персонаж. Будем сохранять последнего выбранного персонажа в игре.
- Выключен звук. Будем сохранять значение включен / выключен звук в игре.
- Прогресс. Будем сохранять JSON данные прогресса игры.
Сохранить числовое поле
На примере поля "Уровень".
- Перейдите в раздел Игроки вашего проекта в панели управления.
- В разделе "Поля игрока" нажмите "Добавить поле".
- Заполните как показано на картинке:
Вы добавили поле "Уровень", доступное в SDK по ключу level
.
Код для использования поля:
- JavaScript
// Получить значение поля
const level = gp.player.get('level');
// Обновить значение поля
gp.player.set('level', level + 1);
// Подтвердить изменения - сохранить в облако
gp.player.sync();
Сохранить строковое поле
На примере поля "Персонаж".
- Перейдите в раздел Игроки вашего проекта в панели управления.
- В разделе "Поля игрока" нажмите "Добавить поле".
- Заполните как показано на картинке:
- Перечисляемые значения не обязательны. Они нужны, чтобы ограничить допустимые значения и показать игроку перевод этого значения на его языке.
Вы добавили поле "Персонаж", доступное в SDK по ключу character
.
Код для использования поля:
- JavaScript
// Получить значение поля
const character = gp.player.get('character');
// Обновить значение поля
gp.player.set('character', 'cat');
// Подтвердить изменения - сохранить в облако
gp.player.sync();
Сохранить булевое поле
На примере поля "Выключен звук".
- Перейдите в раздел Игроки вашего проекта в панели управления.
- В разделе "Поля игрока" нажмите "Добавить поле".
- Заполните как показано на картинке:
Вы добавили поле "Выключен звук", доступное в SDK по ключу sound-off
.
Код для использования поля:
- JavaScript
// Получить значение поля
const isSoundOff = gp.player.get('sound-off');
// Обновить значение поля
gp.player.set('sound-off', true);
// Инвертировать значение поля
gp.player.toggle('sound-off');
// То же самое, что и
gp.player.set('sound-off', !isSoundOff);
// Подтвердить изменения - сохранить в облако
gp.player.sync();
Сохранить JSON поле
На примере поля "Прогресс".
- Перейдите в раздел Игроки вашего проекта в панели управления.
- В разделе "Поля игрока" нажмите "Добавить поле".
- Заполните как показано на картинке:
Вы добавили поле "Прогресс", доступное в SDK по ключу progress
.
Код для использования поля:
- JavaScript
// Получить значение поля
let progress;
try {
// парсим прогресс из json строки
progress = JSON.parse(gp.player.get('progress'));
} catch (err) {
// не удалось распарсить прогресс (отсутствует, битый)
// создаеем значение по-умолчанию
progress = {
level: 1,
hp: 100,
maxHp: 100,
};
}
// Обновить значение поля
progress.level = 2;
progress.hp = 120;
progress.maxHp = 120;
gp.player.set('progress', JSON.stringify(progress));
// Подтвердить изменения - сохранить в облако
gp.player.sync();
Сохранение данных в облако
+0-1 RequestПосле изменений в игроке их можно отправить на сервер и сохранить локально на устройстве. Рекомендуется сохранять данные игрока после завершения уровня и получения наград, а также сразу после важного действия, например покупки предмета.
Избегайте сохранения при открытии меню игры / главного экрана. Лучше сохраняйте данные после завершения действия.
Алгоритм действий:
- Обновить данные игрока в SDK;
- Подтвердить изменения, вызвав метод синхронизации.
- JavaScript
// Обновить значение числового поля
gp.player.set('level', 2);
// Обновить значение строквого поля
gp.player.set('character', 'cat');
// Обновить значение булевого поля
gp.player.set('sound-off', true);
// Обновить значение JSON поля
gp.player.set(
'progress',
JSON.stringify({
level: 2,
hp: 120,
maxHp: 120,
})
);
// Синхронизовать, возвращает промис ожидания, дождитесь завершения
await gp.player.sync();
// Данные сохранены
Загрузка данных из облака
+0-1 RequestДанные загружаются автоматчески при запуске игры. Ничего делать не нужно. Как только SDK инициализировался - можно пользоваться всеми данными.
- JavaScript
// Получить значение числового поля
const level = gp.player.get('level');
// Получить значение строкового поля
const character = gp.player.get('character');
// Получить значение булевого поля
const isSoundOff = gp.player.get('sound-off');
Что дальше
- Узнайте как авторизовываться через SDK;
- Узнайте как авторизовываться через SDK используя анонимный вход;
- Узнайте больше о полях игрока;
- Узнайте больше о данных игрока;
- Научитесь пользоваться автоматически начисляемыми полями, например, Энергия, Жизни, сундуки по времени - подробнее про Энергию.
Оставайтесь на связи
С другими разделами документации вы можете ознакомиться здесь. Для начала работы вы можете ознакомиться с нашими туториалами.
Сообщество GamePush в Telegram
: @gs_community.
Для ваших обращений e-mail
: [email protected]
Желаем вам успехов!