รีโมตคอนฟิก
เปลี่ยนค่าบาลานซ์ ราคา และฟีเจอร์แฟล็กได้โดยไม่ต้องออกอัปเดต ทุกการตอบกลับมีลายเซ็น ตรวจสอบบนอุปกรณ์ และแคชไว้สำหรับเล่นออฟไลน์
คอมเมนต์ในโค้ดและชื่อ API ยังคงเป็นภาษาอังกฤษเพื่อให้ตรงกับ SDK
ประเภทค่า#
สร้างคีย์ในหน้า รีโมตคอนฟิก ค่าจะถูกเก็บเป็นข้อความพร้อมประเภทที่บอก SDK ว่าต้องอ่านค่าอย่างไร:
| ประเภท | ตัวอย่าง | ขีดจำกัด |
|---|---|---|
string | Welcome back! | สูงสุด 10,000 ตัวอักษร |
number | 25 | ตัวเลขใดก็ได้ที่ไม่ใช่ค่าอนันต์ |
boolean | false | true หรือ false |
json | {"sale": 0.2} | สูงสุด 50,000 ไบต์ |
อ่านค่า#
Getter ไม่มีวันล้มเหลว โดยจะคืนค่าสำรองของคุณเมื่อไม่มีคีย์หรือแปลงค่าไม่ได้
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', {});การดึงข้อมูลและการอัปเดต#
Unity และ Godot ดึงคอนฟิกเมื่อเกมเริ่มต้น ส่วนบนเว็บให้เรียก fetch() เอง การดึงครั้งต่อๆ ไปจะส่ง ETag ไปด้วย หากคอนฟิกไม่เปลี่ยนจะได้เพียงการตอบกลับ 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>"'ออฟไลน์และการแคช#
คอนฟิกที่ตรวจสอบแล้วล่าสุดจะถูกแคชไว้บนอุปกรณ์และโหลดตอนเริ่มเกม getter จึงใช้งานได้ทั้งตอนออฟไลน์และก่อนการดึงครั้งแรกจะเสร็จ หากการดึงล้มเหลวเพราะเครือข่าย จะยังใช้สำเนาในแคชต่อไป และคอนฟิกที่เก่ากว่าสำเนาในแคชจะถูกปฏิเสธ
การตรวจสอบลายเซ็น#
data คือเพย์โหลดแบบ base64url ส่วน checksum คือ SHA-256 ของเพย์โหลด และ signature คือลายเซ็น RSA-SHA256 ของ data ที่สร้างด้วย private key ใน storage/keys/ SDK จะตรวจสอบทั้งสามค่า รวมถึง Project ID และเวอร์ชัน ก่อนใช้คอนฟิก
| SDK | ที่มาของคีย์สาธารณะ |
|---|---|
| Unity | Tools ▸ Majacloud ▸ Setup ▸ Test connection |
| Godot | Project ▸ Tools ▸ Majacloud: Test connection |
| Web | ตัวเลือก configPublicKey (PEM ในหน้าคีย์ API) |
| REST | GET /v1/project → config_public_key_pem |
storage/keys/ ไว้เสมอ เพราะเกมจะปักหมุดคีย์สาธารณะที่มาจากคีย์ในโฟลเดอร์นี้คุณตรวจสอบการตอบกลับเองได้ด้วย 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 payloadประวัติและการกู้คืน#
ทุกการเปลี่ยนแปลงมีการเก็บเวอร์ชัน แดชบอร์ดเก็บประวัติไว้ 7 ถึง 365 วันตามแพ็กเกจ และกู้คืนค่าก่อนหน้าใดก็ได้ในคลิกเดียว