Configuration à distance
Modifiez l'équilibrage, les prix et les feature flags sans publier de mise à jour. Chaque réponse est signée, vérifiée sur l'appareil et mise en cache pour le jeu hors ligne.
Les commentaires du code et les noms d'API restent en anglais pour correspondre aux SDK.
Types de valeurs#
Créez des clés sur la page Configuration à distance. Les valeurs sont stockées sous forme de texte, avec un type qui indique au SDK comment les lire :
| Type | Exemple | Limite |
|---|---|---|
string | Welcome back! | Jusqu'à 10 000 caractères |
number | 25 | N'importe quel nombre fini |
boolean | false | true ou false |
json | {"sale": 0.2} | Jusqu'à 50 000 octets |
Lire les valeurs#
Les getters n'échouent jamais : ils renvoient votre valeur de repli quand une clé est absente ou ne peut pas être convertie.
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");var damage := Majacloud.remote_config.get_int("enemy_damage", 25)
var speed := Majacloud.remote_config.get_float("player_speed", 4.5)
var maintenance := Majacloud.remote_config.get_bool("maintenance_mode", false)
var welcome := Majacloud.remote_config.get_string("welcome_message", "Hi!")
var shop = Majacloud.remote_config.get_json("shop", {})const damage = mc.remoteConfig.getInt('enemy_damage', 25);
const speed = mc.remoteConfig.getNumber('player_speed', 4.5);
const maintenance = mc.remoteConfig.getBool('maintenance_mode', false);
const welcome = mc.remoteConfig.getString('welcome_message', 'Hi!');
const shop = mc.remoteConfig.getJson('shop', {});Récupération et mises à jour#
Unity et Godot récupèrent la configuration au démarrage du jeu ; sur le web, appelez fetch() vous-même. Les récupérations suivantes envoient l'ETag : une configuration inchangée ne coûte qu'une minuscule réponse 304.
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)" : ""));Majacloud.remote_config.updated.connect(apply_balance)
var fetch := await Majacloud.remote_config.fetch() # 304 when nothing changed
if fetch.ok:
print("Config v", fetch.value.version, " changed: ", fetch.value.changed)mc.remoteConfig.on('updated', () => applyBalance());
const fetch = await mc.remoteConfig.fetch(); // 304 when nothing changed
if (fetch.ok) console.log('Config v' + fetch.value.version, fetch.value.changed);curl -i https://majacloud.majanite.com/v1/config -H "X-Project-ID: $PROJECT_ID" -H "X-Client-Key: $CLIENT_KEY"
# Next time, send the ETag: 304 Not Modified when nothing changed
curl -i https://majacloud.majanite.com/v1/config -H "X-Project-ID: $PROJECT_ID" -H "X-Client-Key: $CLIENT_KEY" \
-H 'If-None-Match: "<etag>"'Hors ligne et cache#
La dernière configuration vérifiée est mise en cache sur l'appareil et chargée au démarrage : les getters fonctionnent hors ligne et avant la fin de la première récupération. Une récupération qui échoue à cause du réseau conserve la copie en cache ; une configuration plus ancienne que celle en cache est refusée.
Vérification de signature#
data est la charge utile en base64url, checksum son SHA-256 et signature une signature RSA-SHA256 de data, réalisée avec la clé privée stockée dans storage/keys/. Les SDK vérifient ces trois éléments, ainsi que l'ID du projet et la version, avant d'utiliser une configuration.
| SDK | Provenance de la clé publique |
|---|---|
| Unity | Tools ▸ Majacloud ▸ Setup ▸ Test connection |
| Godot | Project ▸ Tools ▸ Majacloud: Test connection |
| Web | L'option configPublicKey (le PEM affiché sur la page Clés API) |
| REST | GET /v1/project → config_public_key_pem |
storage/keys/ dans les sauvegardes de votre serveur : les jeux épinglent sa clé publique.Vous pouvez vérifier une réponse vous-même avec OpenSSL :
# 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 payloadHistorique et restauration#
Chaque modification est versionnée. Le tableau de bord conserve l'historique de 7 à 365 jours selon l'offre et restaure n'importe quelle valeur antérieure en un clic.