Web SDK

HTML5 ゲーム、Web サイト、Node.js サーバー向けの、依存関係のない JavaScript ファイル 1 つで構成された SDK です。

コードのコメントと 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
});

結果#

すべての呼び出しは { ok: true, value } または { ok: false, error } で解決され、reject されることはありません。value は ok を除いた REST レスポンスの本文で、REST リファレンスと同じ snake_case のフィールドを持ちます。

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

Web サイトにリーダーボードを表示する#

リーダーボードの読み取りにはログインが不要なため、Web サイトでは公開クライアントキーだけで上位プレイヤーを表示できます。

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 に保存され、サイトのすべてのタブで共有されます。リフレッシュトークンはローテーションされるため、タブは順番に更新を行い(Web Locks)、互いの新しいトークンを引き継ぎます。2 つ目のタブを開いても、プレイヤーがログアウトされることはありません。

シークレットキーを使ったサーバー側での利用#

自社の Node.js サーバーでは、clientKey の代わりに secretKey でクライアントを作成すると、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 で閉じる