Cấu hình từ xa
Thay đổi chỉ số cân bằng, giá và cờ tính năng mà không cần phát hành bản cập nhật. Mọi phản hồi đều được ký, xác minh trên thiết bị và lưu đệm để chơi offline.
Chú thích trong mã và tên API được giữ nguyên tiếng Anh để khớp với SDK.
Kiểu giá trị#
Tạo khóa trên trang Cấu hình từ xa. Giá trị được lưu dạng văn bản kèm một kiểu cho SDK biết cách đọc:
| Kiểu | Ví dụ | Giới hạn |
|---|---|---|
string | Welcome back! | Tối đa 10.000 ký tự |
number | 25 | Mọi số hữu hạn |
boolean | false | true hoặc false |
json | {"sale": 0.2} | Tối đa 50.000 byte |
Đọc giá trị#
Getter không bao giờ thất bại: chúng trả về giá trị dự phòng của bạn khi khóa không tồn tại hoặc không chuyển đổi đượ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");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', {});Tải và cập nhật#
Unity và Godot tải cấu hình khi game khởi động; trên web, bạn tự gọi fetch(). Các lần tải sau gửi kèm ETag, nên cấu hình không đổi chỉ tốn một phản hồi 304 rất nhỏ.
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>"'Offline và bộ nhớ đệm#
Cấu hình đã xác minh gần nhất được lưu đệm trên thiết bị và nạp khi khởi động, nên getter vẫn hoạt động khi offline và trước khi lần tải đầu tiên hoàn tất. Lần tải thất bại do mạng vẫn giữ bản đã lưu đệm; cấu hình cũ hơn bản đã lưu đệm sẽ bị từ chối.
Xác minh chữ ký#
data là payload base64url, checksum là SHA-256 của payload và signature là chữ ký RSA-SHA256 trên data, được tạo bằng khóa riêng tư trong storage/keys/. SDK kiểm tra cả ba, cùng với ID dự án và phiên bản, trước khi dùng một cấu hình.
| SDK | Nguồn của khóa công khai |
|---|---|
| Unity | Tools ▸ Majacloud ▸ Setup ▸ Test connection |
| Godot | Project ▸ Tools ▸ Majacloud: Test connection |
| Web | Tùy chọn configPublicKey (chuỗi PEM trên trang Khóa API) |
| REST | GET /v1/project → config_public_key_pem |
storage/keys/: game đã ghim khóa công khai tương ứng.Bạn có thể tự xác minh phản hồi bằng 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 payloadLịch sử và khôi phục#
Mọi thay đổi đều được lưu phiên bản. Bảng điều khiển giữ lịch sử từ 7 đến 365 ngày tùy theo gói và khôi phục bất kỳ giá trị cũ nào chỉ với một cú nhấp.