Web SDK

ไฟล์ JavaScript ไฟล์เดียวที่ไม่มี dependency สำหรับเกม HTML5 เว็บไซต์ และเซิร์ฟเวอร์ Node.js

คอมเมนต์ในโค้ดและชื่อ API ยังคงเป็นภาษาอังกฤษเพื่อให้ตรงกับ SDK

ในหน้านี้

ความต้องการของระบบ#

  • Chrome, Edge, Firefox และ Safari เวอร์ชันปัจจุบัน (เดสก์ท็อปและมือถือ) หรือ Node.js 18+
  • หน้าเว็บต้องให้บริการผ่าน HTTPS (หรือ localhost) เพราะ API กำหนดให้ใช้ HTTPS และ Web Crypto ที่ใช้ตรวจสอบรีโมตคอนฟิกมีให้ใช้เฉพาะบนหน้าที่ปลอดภัยเท่านั้น

การติดตั้ง#

โหลดจากเซิร์ฟเวอร์ MAJACLOUD ของคุณ ซึ่งให้บริการไฟล์พร้อมเฮดเดอร์ CORS:

HTML
<script src="https://majacloud.majanite.com/downloads/majacloud-web-1.0.0.js"></script>
<script type="module">
  const mc = Majacloud.createClient({ baseUrl: 'https://majacloud.majanite.com', projectId: '<project id>', clientKey: 'pk_live_…' });
</script>

หรือคัดลอก majacloud.js ไว้ในโปรเจกต์:

JavaScript
// Bundlers (Vite, webpack…): copy majacloud.js into your project
import Majacloud from './majacloud.js';

// Node.js 18+
const Majacloud = require('./majacloud.js');

สร้างไคลเอนต์#

ต้องระบุเพียง baseUrl, projectId และ clientKey

JavaScript
const mc = Majacloud.createClient({
  baseUrl: 'https://majacloud.majanite.com',      // your MAJACLOUD address
  projectId: '<project id>',
  clientKey: 'pk_live_…',     // public, safe in the browser
  configPublicKey: PEM,       // optional: pins Remote Config verification
  storage: 'memory',          // optional: 'memory' or { get, set, remove }; default localStorage
  timeoutMs: 15000,           // optional
  maxRetries: 2,              // optional
});

ผลลัพธ์#

ทุกการเรียกจะ resolve เป็น { ok: true, value } หรือ { ok: false, error } และไม่มีการ reject โดย value คือบอดี้ของการตอบกลับจาก REST ที่ไม่มี ok และมีฟิลด์แบบ snake_case เหมือนใน ข้อมูลอ้างอิง REST

error มี code, message, status, requestId, retryAfter, details และ retryable

อีเวนต์#

สมัครรับอีเวนต์ด้วย on() ซึ่งจะคืนฟังก์ชันสำหรับยกเลิกการสมัคร

JavaScript
const stop = mc.auth.on('playerChanged', (player) => {
  document.querySelector('#name').textContent = player ? player.display_name : '';
});
mc.auth.on('sessionExpired', () => showSignIn());
mc.remoteConfig.on('updated', () => applyBalance());

stop(); // every on() returns an unsubscribe function

ลีดเดอร์บอร์ดบนเว็บไซต์ของคุณ#

การอ่านลีดเดอร์บอร์ดไม่ต้องเข้าสู่ระบบ เว็บไซต์จึงแสดงผู้เล่นอันดับต้นๆ ได้ด้วยคีย์ไคลเอนต์สาธารณะเพียงอย่างเดียว:

HTML
<ol id="top-players"></ol>
<script src="https://majacloud.majanite.com/downloads/majacloud-web-1.0.0.js"></script>
<script>
  const mc = Majacloud.createClient({ baseUrl: 'https://majacloud.majanite.com', projectId: '<project id>', clientKey: 'pk_live_…' });
  mc.leaderboards.getTop('coins', { limit: 10 }).then((top) => {
    if (!top.ok) return;
    document.getElementById('top-players').innerHTML = '';
    for (const entry of top.value.entries) {
      const li = document.createElement('li');
      li.textContent = `${entry.player_name} — ${entry.score}`;
      document.getElementById('top-players').append(li);
    }
  });
</script>

หลายแท็บ#

เซสชันจะถูกเก็บไว้ใน localStorage และใช้ร่วมกันในทุกแท็บของเว็บไซต์ เนื่องจาก refresh token หมุนเวียน แท็บต่างๆ จึงผลัดกันรีเฟรช (Web Locks) และรับ token ใหม่ของกันและกัน ผู้เล่นจึงไม่ถูกออกจากระบบเมื่อเปิดแท็บที่สอง

ฝั่งเซิร์ฟเวอร์ด้วยคีย์ลับ#

บนเซิร์ฟเวอร์ Node.js ของคุณเอง ให้สร้างไคลเอนต์ด้วย secretKey แทน clientKey เพื่อใช้ server.getPlayer() และ server.submitScore() ทั้งนี้ SDK จะปฏิเสธคีย์ลับเมื่อทำงานในเบราว์เซอร์

JavaScript
// Node.js on your own server only: the secret key never goes to a browser or game build
const Majacloud = require('./majacloud.js');
const admin = Majacloud.createClient({
  baseUrl: 'https://majacloud.majanite.com',
  projectId: process.env.MAJACLOUD_PROJECT_ID,
  secretKey: process.env.MAJACLOUD_SECRET_KEY,
});

const player = await admin.server.getPlayer('player_3f9c…');
await admin.server.submitScore('coins', 'player_3f9c…', 980);

mc.request(method, path, { body, auth }) เรียกเอนด์พอยต์ใดก็ได้โดยไม่ต้องมีเมธอดช่วย เช่น mc.request('GET', '/wallet', { auth: 'player' })

ค้นหาจากชื่อหน้า หัวข้อ และเนื้อหา

↑↓ เพื่อเลื่อน ↵ เพื่อเปิด Esc เพื่อปิด