Удалённая конфигурация

Меняйте баланс, цены и флаги функций без выпуска обновления. Каждый ответ подписан, проверяется на устройстве и кешируется для игры офлайн.

Комментарии в коде и имена API оставлены на английском, чтобы совпадать с SDK.

На этой странице

Типы значений#

Создавайте ключи на странице Удалённая конфигурация. Значения хранятся как текст с типом, который подсказывает SDK, как их читать:

ТипПримерОграничение
stringWelcome back!До 10 000 символов
number25Любое конечное число
booleanfalsetrue или false
json{"sale": 0.2}До 50 000 байт

Чтение значений#

Геттеры никогда не завершаются ошибкой: если ключа нет или его не удаётся преобразовать, они возвращают ваше значение по умолчанию.

C#
int damage = Majacloud.RemoteConfig.GetInt("enemy_damage", 25);
float speed = Majacloud.RemoteConfig.GetFloat("player_speed", 4.5f);
bool maintenance = Majacloud.RemoteConfig.GetBool("maintenance_mode", false);
string welcome = Majacloud.RemoteConfig.GetString("welcome_message", "Hi!");
ShopConfig shop = Majacloud.RemoteConfig.GetJson<ShopConfig>("shop");

Загрузка и обновления#

Unity и Godot загружают конфигурацию при запуске игры; в вебе вызывайте fetch() сами. Последующие загрузки отправляют ETag, поэтому неизменённая конфигурация обходится одним крошечным ответом 304.

C#
Majacloud.RemoteConfig.ConfigUpdated += config => ApplyBalance();

var fetch = await Majacloud.RemoteConfig.FetchAsync(); // 304 when nothing changed
if (fetch.Ok) Debug.Log("Config v" + fetch.Value.Version + (fetch.Value.Changed ? " (new)" : ""));

Офлайн и кеширование#

Последняя проверенная конфигурация кешируется на устройстве и загружается при запуске, поэтому геттеры работают офлайн и до завершения первой загрузки. Если загрузка не удалась из-за сети, остаётся кешированная копия; конфигурация старее кешированной отклоняется.

Проверка подписи#

data — полезная нагрузка в base64url, checksum — её SHA-256, а signature — подпись RSA-SHA256 над data, созданная закрытым ключом из storage/keys/. Перед использованием конфигурации SDK проверяют все три значения, а также ID проекта и версию.

SDKОткуда берётся публичный ключ
UnityTools ▸ Majacloud ▸ Setup ▸ Test connection
GodotProject ▸ Tools ▸ Majacloud: Test connection
WebПараметр configPublicKey (PEM со страницы «API-ключи»)
RESTGET /v1/project → config_public_key_pem
Если ключ не закреплён, SDK получают его при первом использовании. Закрепляйте его в продакшен-сборках и включайте storage/keys/ в резервные копии: игры закрепляют публичный ключ из этой папки.

Ответ можно проверить и самостоятельно с помощью OpenSSL:

bash
# Verify a config response yourself (what every SDK does before using it)
curl -s https://majacloud.majanite.com/v1/project -H "X-Project-ID: $PROJECT_ID" -H "X-Client-Key: $CLIENT_KEY" | jq -r .project.config_public_key_pem > public.pem
curl -s https://majacloud.majanite.com/v1/config -H "X-Project-ID: $PROJECT_ID" -H "X-Client-Key: $CLIENT_KEY" > response.json

jq -j .data response.json > data.txt
jq -r .signature response.json | base64 --decode > signature.bin
openssl dgst -sha256 -verify public.pem -signature signature.bin data.txt   # Verified OK
jq -r .data response.json | tr '_-' '/+' | base64 --decode 2>/dev/null | jq .     # the payload

История и восстановление#

Каждое изменение сохраняется как новая версия. Панель управления хранит историю от 7 до 365 дней в зависимости от тарифа и восстанавливает любое прежнее значение одним кликом.

Поиск по названиям страниц, заголовкам и тексту.

↑↓ навигация ↵ открыть Esc закрыть