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.

Sur cette page

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 :

TypeExempleLimite
stringWelcome back!Jusqu'à 10 000 caractères
number25N'importe quel nombre fini
booleanfalsetrue 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.

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");

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.

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)" : ""));

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.

SDKProvenance de la clé publique
UnityTools ▸ Majacloud ▸ Setup ▸ Test connection
GodotProject ▸ Tools ▸ Majacloud: Test connection
WebL'option configPublicKey (le PEM affiché sur la page Clés API)
RESTGET /v1/project → config_public_key_pem
Sans clé épinglée, les SDK la récupèrent à la première utilisation. Épinglez-la pour les builds de production et incluez 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 :

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

Historique 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.

Recherche dans les titres de page, les intertitres et le texte.

↑↓ pour naviguer ↵ pour ouvrir Esc pour fermer