NAV Navbar
 

Game Server Services

Game Server Services(GS2) とはモバイルゲーム開発に特化したバックエンドサーバサービス(BaaS)です。

ゲーム開発に必要なネットワーク機能をコンポーネント化してサービスとして提供します。 ゲーム内から必要な一部のコンポーネント単位で利用することができるよう設計されており、手軽に・手頃な価格で・高性能なサーバ機能を利用できます。

利用料金

一般的な利用料金

サービス内に特別な記載がない限り、以下の料金でサービスを利用できます。

無料枠

毎月2万円(100万API呼び出し相当) の無料枠が存在し、無料枠を超過するまではクレジットカードの登録なくご利用いただけます。 クレジットカードの登録がない状態で無料枠を使い切ると、サービスの提供が強制的に停止されます。

処理性能

GS2 はゲームサーバを性能を気にすることなく利用いただけるよう設計されています。 リリース前のベンチマークで秒間10万回のアクセスを処理できることを確認しています。

しかし、すべてのAPIを性能を気にする必要なく提供することは困難であり、 一部のAPIには性能を保証するラインを別途設けている場合があります。 個別の性能保証が定義されている場合は各コンポーネントで定義しています。

はじめかた

はじめに

ここでは、Unity から GS2 の機能を利用するために必要なナレッジと手順をまとめています。

GS2 アカウントの作成

まず、 GS2 のサイト からアカウントの登録を行ってください。

プロジェクトの作成

GS2 のアカウントを作成後、最初にするべきことは プロジェクト を作成することです。

プロジェクト とはゲームタイトルと 1:1 となるエンティティです。 GS2 のあらゆるリソースは プロジェクト に関連付けて保持され、他の プロジェクト のデータには基本的に干渉できません。

クレデンシャルの発行

GS2 の API を利用するには クレデンシャル が必要です。

クレデンシャルユーザ の認証に用いる情報で、 GS2 のサービス利用に関わる権限はこの ユーザ 単位で管理されます。 権限の詳細は セキュリティポリシー に定義され、これを ユーザ に割り当てて使用します。

権限管理にまつわるリソースは、以下の階層構造で管理されています。

セキュリティポリシーの例

{
  "Version": "2016-04-01",
  "Statements": [
    {
      "Effect": "Allow",
      "Actions": [
        "Gs2Account:CreateAccount"
      ],
      "Resources": [
        "*"
      ]
    }
  ]
}

個々の API の呼出可否は セキュリティポリシー に定義されます。 セキュリティポリシー は JSON形式で記述します。

GS2 では開発者向けに2種類の セキュリティポリシー を事前に定義して提供しています。 あらゆるAPIを呼び出せる AdministratorAccess と、ゲーム内に組み込んで使用する想定の ApplicationAccess です。 後者はチート行為につながるような操作ができるAPIを呼び出すことができないよう設定されています。

セキュリティポリシー の詳細は別途 セキュリティポリシーのフォーマット を参照してください。

GS2-Deploy による設定

クレデンシャルの発行に必要な設定は GS2-Identifier の管理画面からも個別に登録できますが、 GS2-Deploy を利用した設定が便利です。

GS2-Deploy は GS2 上で継続的デリバリーを実現するためのサービスです。 GS2に対して設定したい項目を テンプレート として yaml 形式で記述し、 GS2-Deploy に登録することで設定を反映できます。

その際に作成することになるエンティティが スタック です。 テンプレート を指定した スタック を作成することで、 テンプレート に記述した設定が反映されます。 また、 スタック に対して変更した テンプレート を再適用した場合も、変更点を自動的に検出し、作成が必要なリソースは作成、更新が必要なリソースは更新、削除が必要なリソースは削除します。

これによって開発者は、いらなくなったリソースを削除するなどのオペレーションを行うことなく、求める状況を宣言的に テンプレート に記述するだけでよくなります。

では、さっそく テンプレート を使って GS2-Deploy でスタックを作成してみましょう。

クレデンシャルを発行する GS2-Deploy テンプレートの例

GS2TemplateFormatVersion: "2019-05-01"
Description: GS2 SDK identifier template Version 2019-07-10

Globals:
  Alias:
    ApplicationUserName: application

Resources:
  IdentifierApplicationUser:
    Type: GS2::Identifier::User
    Properties:
      Name: ${ApplicationUserName}

  IdentifierApplicationUserAttachPolicy:
    Type: GS2::Identifier::AttachSecurityPolicy
    Properties:
      UserName: ${ApplicationUserName}
      SecurityPolicyId: grn:gs2::system:identifier:securityPolicy:ApplicationAccess
    DependsOn:
      - IdentifierApplicationUser

  IdentifierApplicationIdentifier:
    Type: GS2::Identifier::Identifier
    Properties:
      UserName: ${ApplicationUserName}
    DependsOn:
      - IdentifierApplicationUser

Outputs:
  ApplicationClientId: !GetAttr IdentifierApplicationIdentifier.Item.ClientId
  ApplicationClientSecret: !GetAttr IdentifierApplicationIdentifier.ClientSecret

隣に示したのは、 ApplicationAccess 権限を設定したユーザを作成する テンプレート のサンプルです。 ApplicationUserName: application の部分を変更すると、GS2-Identifier に作成されるユーザ名を変更できます。

テンプレートをダウンロード

この テンプレート をファイルに保存し、 GS2-Deploy の スタックの新規作成テンプレートデータ に指定してスタックを作成します。

作成したスタックに登録された設定の反映状態は、スタックの 実行状態 の項目で確認できます。 数秒〜数分後には CREATE_COMPLETE になり、 クレデンシャル の設定が完了しているはずです。

反映完了後に アウトプット タブを選択すると、クレデンシャルの クライアントIDクライアントシークレット が表示されます。 この値は後ほど SDK に設定しますので、確認できる場所を覚えておいてください。

GS2-SDK for Unity のダウンロード・インポート

GS2-SDK for Game Engine から GS2-SDK for Unity をダウンロードすることができます。 ダウンロードすると、 .unitypackage がダウンロードされます。そのファイルを Unity のプロジェクトにインポートしてください。

これで Unity から GS2 を利用するための準備が整いました。

アカウント管理機能の実装サンプル

テンプレート

GS2-Account の利用を開始するためのテンプレート例

GS2TemplateFormatVersion: "2019-05-01"
Description: GS2-Account initialize template Version 2010-06-26

Globals:
  Alias:
    AccountNamespaceName: game-0001
    KeyNamespaceAccountAuthentication: account-encryption-key-namespace
    KeyAccountAuthentication: account-encryption-key

Resources:
  KeyNamespaceAccountAuthentication:
    Type: GS2::Key::Namespace
    Properties:
      Name: ${KeyNamespaceAccountAuthentication}

  KeyAccountAuthentication:
    Type: GS2::Key::Key
    Properties:
      NamespaceName: ${KeyNamespaceAccountAuthentication}
      Name: ${KeyAccountAuthentication}
    DependsOn:
      - KeyNamespaceAccountAuthentication

  AccountNamespace:
    Type: GS2::Account::Namespace
    Properties:
      Name: ${AccountNamespaceName}

Outputs:
  AccountNamespaceName: !GetAttr AccountNamespace.Item.Name
  KeyAccountAuthenticationKeyId: !GetAttr KeyAccountAuthentication.Item.KeyId

まず、サンプルコードから利用する GS2-Account の設定を行います。 GS2-Deploy の スタックの新規作成 で、以下のテンプレートを テンプレートデータ に指定してスタックを作成します。

テンプレートをダウンロード

サンプルコード

サンプルコード

using System;
using System.Collections;
using System.Collections.Generic;
using Gs2.Core;
using Gs2.Unity.Gs2Account.Model;
using Gs2.Unity.Gs2Account.Result;
using Gs2.Unity.Util;
using UnityEngine;

public class Gs2AccountSample2 : MonoBehaviour
{
    // GS2-Identifier で発行したクライアントID
    public string clientId;

    // GS2-Identifier で発行したクライアントシークレット
    public string clientSecret;

    // アカウントを作成する GS2-Account のネームスペース名
    public string accountNamespaceName;

    // アカウントの認証結果に付与する署名を計算するのに使用する暗号鍵
    public string accountEncryptionKeyId;

    void Start()
    {
        StartCoroutine(CreateAndLoginAction());
    }

    public IEnumerator CreateAndLoginAction()
    {
        // GS2 SDK のクライアントを初期化

        Debug.Log("GS2 SDK のクライアントを初期化");

        var profile = new Gs2.Unity.Util.Profile(
            clientId: clientId,
            clientSecret: clientSecret,
            reopener: new Gs2BasicReopener()
        );

        {
            AsyncResult<object> asyncResult = null;

            var current = profile.Initialize(
                r => { asyncResult = r; }
            );

            yield return current;

            // コルーチンの実行が終了した時点で、コールバックは必ず呼ばれています

            // クライアントの初期化に失敗した場合は終了
            if (asyncResult.Error != null)
            {
                OnError(asyncResult.Error);
                yield break;
            }
        }

        var gs2 = new Gs2.Unity.Client(profile);

        // アカウントを新規作成

        Debug.Log("アカウントを新規作成");

        EzAccount account = null;

        {
            AsyncResult<EzCreateResult> asyncResult = null;

            var current = gs2.Account.Create(
                r => { asyncResult = r; },
                accountNamespaceName
            );

            yield return current;

            // コルーチンの実行が終了した時点で、コールバックは必ず呼ばれています

            // アカウントが作成できなかった場合は終了
            if (asyncResult.Error != null)
            {
                OnError(asyncResult.Error);
                yield break;
            }

            // 作成したアカウント情報を取得
            account = asyncResult.Result.Item;
        }

        // ログイン

        Debug.Log("ログイン");

        GameSession session = null;

        {
            AsyncResult<GameSession> asyncResult = null;

            var current = profile.Login(
                r => { asyncResult = r; },
                authenticator: new Gs2AccountAuthenticator(
                    accountNamespaceName: accountNamespaceName,
                    keyId: accountEncryptionKeyId,
                    userId: account.UserId,
                    password: account.Password
                )
            );

            yield return current;

            // コルーチンの実行が終了した時点で、コールバックは必ず呼ばれています

            // ゲームセッションオブジェクトが作成できなかった場合は終了
            if (asyncResult.Error != null)
            {
                OnError(asyncResult.Error);
                yield break;
            }

            // ログイン状態を表すゲームセッションオブジェクトを取得
            session = asyncResult.Result;
        }

        // 引き継ぎ情報の一覧を取得

        Debug.Log("引き継ぎ情報の一覧を取得");

        {
            AsyncResult<EzListTakeOverSettingsResult> asyncResult = null;

            var current = gs2.Account.ListTakeOverSettings(
                r => { asyncResult = r; },
                session,
                accountNamespaceName
            );

            yield return current;

            // コルーチンの実行が終了した時点で、コールバックは必ず呼ばれています

            // APIの呼び出しが完了したら通知されるコールバック
            if (asyncResult.Error != null)
            {
                OnError(asyncResult.Error);
                yield break;
            }

            List<EzTakeOver> items = asyncResult.Result.Items;
            foreach (var item in items)
            {
                // 引き継ぎに関する情報が取得される
            }
        }

        // GS2 SDK の終了処理

        Debug.Log("GS2 SDK の終了処理");

        {
            // ゲームを終了するときなどに呼び出してください。
            // 頻繁に呼び出すことは想定していません。
            var current = profile.Finalize();

            yield return current;
        }
    }

    private void OnError(Exception e)
    {
        Debug.Log(e.ToString());
    }
}

まずは隣のコード欄に Unity のゲームオブジェクト全体のコードサンプルを記載します。

解説

SDKの初期化

SDKの初期化

var profile = new Gs2.Unity.Util.Profile(
    clientId: clientId,
    clientSecret: clientSecret,
    reopener: new Gs2BasicReopener()
);

{
    AsyncResult<object> asyncResult = null;

    var current = profile.Initialize(
        r => { asyncResult = r; }
    );

    yield return current;

    // コルーチンの実行が終了した時点で、コールバックは必ず呼ばれています

    // クライアントの初期化に失敗した場合は終了
    if (asyncResult.Error != null)
    {
        OnError(asyncResult.Error);
        yield break;
    }
}

var gs2 = new Gs2.Unity.Client(profile);

こちらは GS2 にアクセスするための設定をしています。 clientId clientSecret にはクレデンシャルを設定します。 具体的な設定値は、先程 GS2-Deploy のクレデンシャルを作成するテンプレートを使ってスタックを作成し、 ステータスが CREATE_COMPLETE になっていることを確認した上で、アウトプットタブで確認できる ApplicationClientId ApplicationClientSecret の内容を設定してください。

Account Namespace Name KeyAccountAuthenticationKeyId も同様にアカウント管理導入テンプレートのアウトプットタブの内容を設定してください。

reopener にはアクセストークンをリフレッシュするためのハンドラーを設定します。 特にこだわりがなければ Gs2BasicReopener を設定しておくことで、GS2 が推奨するリフレッシュロジックが適用されます。

アカウントの作成

アカウントの作成

EzAccount account = null;

{
    AsyncResult<EzCreateResult> asyncResult = null;

    var current = gs2.Account.Create(
        r => { asyncResult = r; },
        accountNamespaceName
    );

    yield return current;

    // コルーチンの実行が終了した時点で、コールバックは必ず呼ばれています

    // アカウントが作成できなかった場合は終了
    if (asyncResult.Error != null)
    {
        OnError(asyncResult.Error);
        yield break;
    }

    // 作成したアカウント情報を取得
    account = asyncResult.Result.Item;
}

ここではゲームプレイヤーを識別するためのアカウント情報の作成を行っています。 accountNamespaceName にはアカウント情報を記録するネームスペースを指定します。

テンプレートの アウトプット で確認できる AccountNamespaceName の値を設定します。

Create メソッドのコールバックは、アカウントの作成処理が完了したときに呼び出されます。 エラーが発生した場合は r.Error に例外オブジェクトが格納されており、成功したときには r.Result に結果が格納されています。

なお、このアカウントの作成は本来、アプリケーションの初回起動時に1回だけ行うべきものです。 実際のアプリケーションではこの応答の内容をローカルストレージに保存し、2回目以降はストレージから取得した値を使用してください。

ログイン

ログイン

GameSession session = null;

{
    AsyncResult<GameSession> asyncResult = null;

    var current = profile.Login(
        r => { asyncResult = r; },
        authenticator: new Gs2AccountAuthenticator(
            accountNamespaceName: accountNamespaceName,
            keyId: accountEncryptionKeyId,
            userId: account.UserId,
            password: account.Password
        )
    );

    yield return current;

    // コルーチンの実行が終了した時点で、コールバックは必ず呼ばれています

    // ゲームセッションオブジェクトが作成できなかった場合は終了
    if (asyncResult.Error != null)
    {
        OnError(asyncResult.Error);
        yield break;
    }

    // ログイン状態を表すゲームセッションオブジェクトを取得
    session = asyncResult.Result;
}

つづいて GS2 へのログイン処理です。 accountNamespaceName には作成したアカウントが存在するネームスペースを指定し、 keyId にはアカウントの認証結果に付与する署名を計算するのに使用する暗号鍵を指定します。 更に、 userId password には先程作成したアカウントのユーザIDとパスワードを指定します。

ログイン処理が完了するとコールバックが呼び出され、先ほどと同じように エラーが発生した場合は r.Error に例外オブジェクトが格納されており、成功したときには r.Result に結果が格納されています。

r.Result にはログイン状態を表現するための GameSession オブジェクトが返ってきます。 以降 GS2 の API を呼び出すときにログイン状態でなければ呼び出せないAPIの引数には GameSession を渡して使用することとなります。

ログイン状態でなければ呼び出せないAPIの呼び出し

ログイン状態でなければ呼び出せないAPIの呼び出し

{
    AsyncResult<EzListTakeOverSettingsResult> asyncResult = null;

    var current = gs2.Account.ListTakeOverSettings(
        r => { asyncResult = r; },
        session,
        accountNamespaceName
    );

    yield return current;

    // コルーチンの実行が終了した時点で、コールバックは必ず呼ばれています

    // APIの呼び出しが完了したら通知されるコールバック
    if (asyncResult.Error != null)
    {
        OnError(asyncResult.Error);
        yield break;
    }

    List<EzTakeOver> items = asyncResult.Result.Items;
    foreach (var item in items)
    {
        // 引き継ぎに関する情報が取得される
    }
}

ログイン状態でなければ使用できないAPIの例として、引き継ぎ設定の一覧取得APIを示しています。 session に GameSession を渡して、ログイン中のゲームプレイヤーが設定している引き継ぎ設定の一覧を取得できます。

マスターデータの管理

用語の定義

用語 意味
モデルマスター 管理画面から更新するゲームプレイヤーごとに変わらないデータ
モデル ゲーム内から使用するゲームプレイヤーごとに変わらないデータ
プロパティ モデルをもとに作成したゲームプレイヤーごとに異なるデータ

アカウント管理では出てきませんでしたが、ゲームの構成要素の中には所持品やクエストなどゲームプレイヤーごとには変わらないデータがあります。 このようなデータをGS2では モデル と呼んでいます。そして、モデルをもとにゲームプレイヤーの所持するデータになったものを プロパティ と呼んでいます。

一般的にマスターデータと捉えられるのは GS2 においては モデル にあたるかとおもいますが、GS2 においては モデルマスター という概念が存在します。 モデル モデルマスター の違いは、データの内容としては基本的には一緒ですが、実際にゲームから使われる状態にあるかどうか。という違いがあります。

つまり、GS2 の管理画面上で編集できるデータは モデルマスター であり、それを実際にゲーム内から使用できる状態に変換すると モデル に変わります。 この変換工程が必要な理由は、 モデルマスター に対する変更を一括してゲーム内に反映するためです。 この工程がない場合、管理画面で少しずつデータを更新していく過程でゲーム内に半端なデータが反映されてしまうことになります。

マスターデータの作成

GS2-Deploy のテンプレートでのマスターデータ管理例

GS2TemplateFormatVersion: "2019-05-01"
Description: GS2 master data template Version 2010-06-26

Globals:
  Alias:
    NamespaceName: inventory

Resources:
  Namespace:
    Type: GS2::Inventory::Namespace
    Properties:
      Name: ${NamespaceName}

  NamespaceSettings:
    Type: GS2::Inventory::CurrentItemModelMaster
    Properties:
      NamespaceName: ${NamespaceName}
      Settings:  # ここから下のデータが本来はJSONで指定する部分ですが、yaml として記述して反映できます
        version: 2019-02-05
        inventoryModels:
          - name: item
            metadata: ITEM
            initialCapacity: 40
            maxCapacity: 60
            itemModels:
              - name: item-0001
                metadata: ITEM_0001
                maxCount: 99
                sortValue: 1
              - name: item-0002
                metadata: ITEM_0002
                maxCount: 99
                sortValue: 2
              - name: item-0003
                metadata: ITEM_0003
                maxCount: 99
                sortValue: 3
          - name: character
            metadata: CHARACTER
            initialCapacity: 30
            maxCapacity: 50
            itemModels:
             - name: character-0001
               metadata: CHARACTER_0001
               maxCount: 1
               sortValue: 1

    DependsOn:
      - Namespace

この変換工程は、すべての モデルマスター を一旦 JSON 形式のファイルにエクスポートし、そのJSONファイルをアップロードすることで一括して モデル として反映する仕組みになっています。 GS2 の管理画面で モデルマスター を操作して JSON 形式のファイルにエクスポートして利用しても構いませんが、Excel や独自の管理ツールを作成し GS2 上に モデルマスター を一切登録せずに モデル にデータを反映することもできます。

また、GS2-Deploy のテンプレート内でマスターデータを管理することもできます。この場合 git などの バージョン管理ツール で取り扱いやすくなりますので、こちらも検討してみてください。

運営上都合のいい方法でマスターデータを管理してください。

GS2サービスの拡張

GS2-Script を使って GS2-Inventory にアイテムを付与する例

-- 引数からモデル情報を取得
namespace_name = args['namespaceName']
user_id = args['userId']
inventory_name = args['inventoryName']
item_name = args['itemName']
acquire_count = args['acquireCount']
expires_at = args['expiresAt']

inventory_client = gs2('inventory')

-- リクエストを発行
result = inventory_client.acquire_item_set_by_user_id({
    namespace_name=namespace_name,
    user_id=user_id,
    inventory_name=inventory_name,
    item_name=item_name,
    acquire_count=acquire_count,
    expires_at=expires_at,
})

-- レスポンスを応答
if(result['isError']) then
    fail(result['statusCode'], result['errorMessage'])
end

result = result['result']

GS2 は一般的な用途においては標準機能でゲームシステムを構築できるよう設計しています。 しかし、ゲーム内のユースケースによっては GS2 の標準機能では実現できないことが出てくるかもしれません。

そのようなケースに対応できるよう GS2 では Lua によるスクリプトによる機能拡張に対応しています。 GS2-Account であれば、アカウントの新規作成時 アカウントの認証時 引き継ぎ設定登録時 引き継ぎ実行時 といったタイミングで GS2-Script に登録したスクリプトを実行できるようにしています。 これによって、 引き継ぎ設定をしたときに報酬をプレゼントボックスに届けたい というようなニーズに応えられるようにしています。 何度も引き継ぎ登録して報酬を受け取り放題になるのはゲームシステムに破綻をきたすので、1回だけ付与できるようにしたい場合は GS2-Limit の提供する回数制限機能と組み合わせて実装するなど、スクリプトの中で工夫を凝らしてください。

用語集

一般

GRN のフォーマット

grn:gs2:{リージョン}:{オーナーID}:{サービス名}:{モデル名}:{代替キー}:{モデル名}:{代替キー}...

リージョンの種類

ap-northeast-1 = 日本

ポリシードキュメントのフォーマット
Actions に呼び出せるアクションを羅列し、Resources に操作出来る対象リソースを羅列する
Actions / Resources には末尾にのみワイルドカードを使用出来る

{
    'Version': '2016-04-01',
    'Statements': [
        {
            'Effect': 'Allow',
            'Actions': [
                'Gs2Account:Create*',
            ],
            'Resources': ['*'],
        },
    ]
}
用語 意味
GRN Gs2 Resource Name
GS2 が扱うすべての情報に付与される一意なリソース名
サービス名 GS2 のマイクロサービスの種類
リージョン GS2 が動作しているデータセンターの場所。
アカウントID GS2 のアカウントを一意に識別するためのID
プロジェクトID ゲームを一意に識別するためのID。アカウントIDに複数紐づけて管理
オーナーID {アカウントID}${プロジェクトID}
GS2内のデータは基本的にこの情報に紐づけて保存される
ユーザID ゲームプレイヤーを識別するID
アクセストークン GS2-Auth によってゲームプレイヤーの認証がおこなわれた証明として払い出されるトークン
各マイクロサービスが利用者のユーザIDを特定する為に使用される

有効期限が設定されており、発行から10時間で再取得が必要となる。
プロジェクトトークン クレデンシャル を使用して取得する一時的な認証トークン。
Open ID Connect ベースで実装されており、Open ID Connect 的に言うと IDトークン。

有効期限が設定されており、発行から10時間で再取得が必要となる。
セキュリティポリシー GS2-Identifier のユーザに紐付けて管理される権限
クライアントIDを使用してどのAPI操作を行えるかを定義する
ポリシードキュメント セキュリティポリシー の権限設定を定義した JSON ドキュメント
モデル GS2 内のエンティティの型
エンティティ モデルを実体化したもの
代替キー エンティティのGRN以外のエンティティ固有の値を格納したフィールド名
GS2-Account の Game: gameName, Account: userId, TakeOver: type, userIdentifier
アクション API の種類を表す識別子 Gs2Inbox:CreateInbox のように定義され、前半部はサービスを表し、後半部はアクションの種類を表す。
プロパティID ゲーム内のキャラクターやアイテムを一意に識別するためのID
リソースGRN ゲームプレイヤーの所持物のGRNの総称
GS2-Inventory の所持物や、GS2-Experience の経験値情報、GS2-Stamina のスタミナ値など
リクエストID GS2 に対するAPIリクエスト毎に割り当てられるID
そのAPIより派生した GS2-Script 内のAPIアクセスなどは同じリクエストIDが共有される

リクエストID によって一連の処理の流れを追跡することが可能となり、
トランザクション処理においては、同一処理系によるデッドロックが発生することを避けることができる
コンテキスト GS2 のリクエストIDに割り当てられたスタック領域の名前
あるいは同一リクエストIDの処理系におけるスタック領域の状態。
スタック領域 リクエストIDが同一の処理系において処理がチェインする毎に積み重ねるメモリ空間

GS2-Account

用語 意味
アカウント認証情報・署名 GS2-Account によって認証が成功したときに発行される情報。署名をあわせて利用することで改ざん検出が可能
引き継ぎ設定 GS2-Account が発行したユーザIDとパスワードを復元するための設定。引き継ぎを実行するために必要となる任意の値を設定可能なユーザID・パスワードを保持する

GS2-Identifier

用語 意味
クライアントID API の利用者を識別する為のID
GS2-Identifier のユーザに紐付けて管理される
クライアントシークレット クライアントID が正規の利用者によって使用されていることを識別するためのキー
クレデンシャル クライアントID と クライアントシークレット の組み合わせ

GS2-Money

用語 意味
課金通貨 資金決済法の前払式支払手段(自家型)に該当するゲーム内通貨

GS2-Matchmaking

用語 意味
ギャザリング マッチメイキングによって作成されたプレイヤーの集合
ロール マッチメイキング時の条件に使用するプレイヤーの役割(タンク・ヒーラーなど)