NAV
Unity Unreal Engine 4

GS2-Account

GS2-SDK for Game Engine のリファレンス

ゲームエンジン向けSDKモデル

EzAccount

ゲームプレイヤーアカウント

ゲームプレイヤーを識別するID情報のエンティティです。 ゲームプレイヤーアカウントは匿名アカウントであり、ユーザーID(UUID)とパスワード(ランダムな32文字の文字列)で構成されるため、ゲームプレイヤーはメールアドレスなどの情報を入力する必要はありません。

発行されたゲームプレイヤーアカウントは、デバイスのローカルストレージに保存しておき、次回以降ログインに使用します。

説明
userId string ユーザID
password string パスワード
createdAt long 作成日時

EzTakeOver

引継ぎ情報

引継ぎ情報とは、デバイスの機種変更やプラットフォーム間のアカウントの移動・共有時に使用する情報です。 個人を識別するユニークな文字列とパスワードで構成され、その適切な組み合わせを入力することで、Account(匿名アカウント)を取得することができます。

1つの Account に対して複数の引継ぎ情報を設定できます。 複数の引継ぎ情報を設定するにはそれぞれ異なるスロットを指定する必要があります。 スロットには0~1024を指定できますので、最大1025種類の引継ぎ情報を設定可能です。

具体的な用例としては 0 には Twitter のアカウント情報を、1 には Sign-in Apple のアカウント情報を、2 には Google のアカウント情報を保存するようにする。というような使い方が想定されています。 あくまでこの引継ぎ情報はデータホルダーであり、ソーシャルアカウントとの認証の仕組みは別途用意する必要があります。

説明
userId string ユーザーID
type int スロット番号
userIdentifier string 引き継ぎ用ユーザーID
createdAt long 作成日時

メソッド

authentication

authentication

ProfilePtr = std::make_shared<gs2::ez::Profile>(
    TCHAR_TO_ANSI(*ClientId),
    TCHAR_TO_ANSI(*ClientSecret),
    gs2::ez::Gs2BasicReopener()
);

ClientPtr = std::make_shared<gs2::ez::Client>(
    *ProfilePtr
);

ProfilePtr->initialize(
    [this](gs2::ez::Profile::AsyncInitializeResult r)
    {
        if (r.getError())
        {
            GEngine->AddOnScreenDebugMessage(-1, 5.f, FColor::Red, "profile.initialize failed.");
        }
        else
        {
            AccountCreate();
        }
    }
);

// Up to this line is the initialization process.

ClientPtr->account.authentication(
    [](gs2::ez::account::AsyncEzAuthenticationResult r)
    {
        if (r.getError())
        {
            GEngine->AddOnScreenDebugMessage(-1, 5.f, FColor::Red, "account.authentication failed.");
        }
        else
        {
            Item = r.getResult()->getItem();
            Body = r.getResult()->getBody();
            Signature = r.getResult()->getSignature();
        }
    },
    TCHAR_TO_ANSI("namespace1"), // namespaceName
    TCHAR_TO_ANSI("user-0001"), // userId
    TCHAR_TO_ANSI("grn:gs2:ap-northeast-1:owner_id:key:namespace1:key:key-0001"), // keyId
    TCHAR_TO_ANSI("password-0001") // password
);
using Gs2.Core.AsyncResult;
using Gs2.Gs2Account.Unity.Result;
using Gs2.Unity.Util;

var profile = new Profile(
    clientId: "your client id",
    clientSecret: "your client secret",
    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;
    }
}

// Up to this line is the initialization process.

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

{
    AsyncResult<EzAuthenticationResult> asyncResult = null;
    var current = gs2.Account.Authentication(
        callback: r => { asyncResult = r; },
        namespaceName: "namespace1",
        userId: "user-0001",
        keyId: "grn:gs2:ap-northeast-1:owner_id:key:namespace1:key:key-0001",
        password: "password-0001"
    );

    yield return current;
    if (asyncResult.Error != null)
    {
        OnError(asyncResult.Error);
        yield break;
    }

    var result = asyncResult.Result;
    var item = result.Item;
    var body = result.Body;
    var signature = result.Signature;
}

アカウントの認証

create 関数で発行したユーザID・パスワードを使用してゲームプレイヤーの認証を行います。 認証が完了すると アカウント認証情報署名 が発行されます。 アカウント認証情報署名 を GS2-Auth::Login にわたすことで、GS2の各サービスにアクセスするための アクセストークン を得ることができます。 なおこのAPIとGS2-Auth::LoginをひとまとめにしたものがGS2-Profile::Loginではじめかた⇒サンプルプログラムで解説しています。

アカウント認証情報署名 は1時間の有効期限が存在します。

Request

必須 デフォルト 値の制限 説明
namespaceName string ~ 32文字 ネームスペース名
userId string UUID ~ 36文字 ユーザID
keyId string ~ 1024文字 暗号鍵GRN
password string ~ 128文字 パスワード

Result

説明
item Account ゲームプレイヤーアカウント
body string 署名対象のアカウント情報
signature string 署名

create

create

ProfilePtr = std::make_shared<gs2::ez::Profile>(
    TCHAR_TO_ANSI(*ClientId),
    TCHAR_TO_ANSI(*ClientSecret),
    gs2::ez::Gs2BasicReopener()
);

ClientPtr = std::make_shared<gs2::ez::Client>(
    *ProfilePtr
);

ProfilePtr->initialize(
    [this](gs2::ez::Profile::AsyncInitializeResult r)
    {
        if (r.getError())
        {
            GEngine->AddOnScreenDebugMessage(-1, 5.f, FColor::Red, "profile.initialize failed.");
        }
        else
        {
            AccountCreate();
        }
    }
);

// Up to this line is the initialization process.

ClientPtr->account.createAccount(
    [](gs2::ez::account::AsyncEzCreateAccountResult r)
    {
        if (r.getError())
        {
            GEngine->AddOnScreenDebugMessage(-1, 5.f, FColor::Red, "account.createAccount failed.");
        }
        else
        {
            Item = r.getResult()->getItem();
        }
    },
    TCHAR_TO_ANSI("namespace1") // namespaceName
);
using Gs2.Core.AsyncResult;
using Gs2.Gs2Account.Unity.Result;
using Gs2.Unity.Util;

var profile = new Profile(
    clientId: "your client id",
    clientSecret: "your client secret",
    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;
    }
}

// Up to this line is the initialization process.

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

{
    AsyncResult<EzCreateAccountResult> asyncResult = null;
    var current = gs2.Account.CreateAccount(
        callback: r => { asyncResult = r; },
        namespaceName: "namespace1"
    );

    yield return current;
    if (asyncResult.Error != null)
    {
        OnError(asyncResult.Error);
        yield break;
    }

    var result = asyncResult.Result;
    var item = result.Item;
}

ゲームプレイヤーを識別するアカウントを新規作成

このAPIの実行に成功すると、作成したアカウントの情報が返ります。 返ったアカウント情報のうち、認証処理に使用するユーザIDとパスワードを永続化してください。

ここで発行されるパスワードはランダム値であり、ゲームプレイヤーの任意の値を指定することはできません。 引き継ぎ設定 としてゲームプレイヤーにとってわかりやすい識別子を登録することができます。

Request

必須 デフォルト 値の制限 説明
namespaceName string ~ 32文字 ネームスペース名

Result

説明
item Account 作成したゲームプレイヤーアカウント

addTakeOverSetting

addTakeOverSetting

ProfilePtr = std::make_shared<gs2::ez::Profile>(
    TCHAR_TO_ANSI(*ClientId),
    TCHAR_TO_ANSI(*ClientSecret),
    gs2::ez::Gs2BasicReopener()
);

ClientPtr = std::make_shared<gs2::ez::Client>(
    *ProfilePtr
);

ProfilePtr->initialize(
    [this](gs2::ez::Profile::AsyncInitializeResult r)
    {
        if (r.getError())
        {
            GEngine->AddOnScreenDebugMessage(-1, 5.f, FColor::Red, "profile.initialize failed.");
        }
        else
        {
            AccountCreate();
        }
    }
);

// Up to this line is the initialization process.

ClientPtr->account.createTakeOver(
    [](gs2::ez::account::AsyncEzCreateTakeOverResult r)
    {
        if (r.getError())
        {
            GEngine->AddOnScreenDebugMessage(-1, 5.f, FColor::Red, "account.createTakeOver failed.");
        }
        else
        {
            Item = r.getResult()->getItem();
        }
    },
    ProfilePtr->getGs2Session(),
    TCHAR_TO_ANSI("namespace1"), // namespaceName
    0, // type
    TCHAR_TO_ANSI("user-0001@gs2.io"), // userIdentifier
    TCHAR_TO_ANSI("password-0001") // password
);
using Gs2.Core.AsyncResult;
using Gs2.Gs2Account.Unity.Result;
using Gs2.Unity.Util;

var profile = new Profile(
    clientId: "your client id",
    clientSecret: "your client secret",
    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;
    }
}

// Up to this line is the initialization process.

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

{
    AsyncResult<EzCreateTakeOverResult> asyncResult = null;
    var current = gs2.Account.CreateTakeOver(
        callback: r => { asyncResult = r; },
        session: session,
        namespaceName: "namespace1",
        type: 0,
        userIdentifier: "user-0001@gs2.io",
        password: "password-0001"
    );

    yield return current;
    if (asyncResult.Error != null)
    {
        OnError(asyncResult.Error);
        yield break;
    }

    var result = asyncResult.Result;
    var item = result.Item;
}

引き継ぎ設定 を追加

引き継ぎ設定 は機種変更などを行ったときにアカウントの引き継ぎをできるようにする設定です。 引き継ぎ設定引き継ぎ用ユーザーID引き継ぎ用パスワード の組み合わせで実行できるようにします。

スロット番号 に異なる値を指定することで、1つのアカウントに対して複数の `引き継ぎ設定 を保持できます。 たとえば、スロット番号:0にメールアドレス・パスワード を、スロット番号:1` にソーシャルメディアのID情報を格納するようにし、 ゲームプレイヤーは好みの引き継ぎ手段を選択できるようにする。といった運用が可能です。

Request

必須 デフォルト 値の制限 説明
namespaceName string ~ 32文字 ネームスペース名
accessToken string ~ 128文字 ユーザーID
type int ~ 1024 スロット番号
userIdentifier string ~ 1024文字 引き継ぎ用ユーザーID
password string ~ 128文字 パスワード

Result

説明
item TakeOver 作成した引き継ぎ設定

deleteTakeOverSetting

deleteTakeOverSetting

ProfilePtr = std::make_shared<gs2::ez::Profile>(
    TCHAR_TO_ANSI(*ClientId),
    TCHAR_TO_ANSI(*ClientSecret),
    gs2::ez::Gs2BasicReopener()
);

ClientPtr = std::make_shared<gs2::ez::Client>(
    *ProfilePtr
);

ProfilePtr->initialize(
    [this](gs2::ez::Profile::AsyncInitializeResult r)
    {
        if (r.getError())
        {
            GEngine->AddOnScreenDebugMessage(-1, 5.f, FColor::Red, "profile.initialize failed.");
        }
        else
        {
            AccountCreate();
        }
    }
);

// Up to this line is the initialization process.

ClientPtr->account.deleteTakeOver(
    [](gs2::ez::account::AsyncEzDeleteTakeOverResult r)
    {
        if (r.getError())
        {
            GEngine->AddOnScreenDebugMessage(-1, 5.f, FColor::Red, "account.deleteTakeOver failed.");
        }
        else
        {
        }
    },
    ProfilePtr->getGs2Session(),
    TCHAR_TO_ANSI("namespace1"), // namespaceName
    0 // type
);
using Gs2.Core.AsyncResult;
using Gs2.Gs2Account.Unity.Result;
using Gs2.Unity.Util;

var profile = new Profile(
    clientId: "your client id",
    clientSecret: "your client secret",
    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;
    }
}

// Up to this line is the initialization process.

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

{
    AsyncResult<EzDeleteTakeOverResult> asyncResult = null;
    var current = gs2.Account.DeleteTakeOver(
        callback: r => { asyncResult = r; },
        session: session,
        namespaceName: "namespace1",
        type: 0
    );

    yield return current;
    if (asyncResult.Error != null)
    {
        OnError(asyncResult.Error);
        yield break;
    }

    var result = asyncResult.Result;
}

引き継ぎ設定 の削除

設定されている 引き継ぎ設定 を削除します。

Request

必須 デフォルト 値の制限 説明
namespaceName string ~ 32文字 ネームスペース名
accessToken string ~ 128文字 ユーザーID
type int ~ 1024 スロット番号

Result

説明

doTakeOver

doTakeOver

ProfilePtr = std::make_shared<gs2::ez::Profile>(
    TCHAR_TO_ANSI(*ClientId),
    TCHAR_TO_ANSI(*ClientSecret),
    gs2::ez::Gs2BasicReopener()
);

ClientPtr = std::make_shared<gs2::ez::Client>(
    *ProfilePtr
);

ProfilePtr->initialize(
    [this](gs2::ez::Profile::AsyncInitializeResult r)
    {
        if (r.getError())
        {
            GEngine->AddOnScreenDebugMessage(-1, 5.f, FColor::Red, "profile.initialize failed.");
        }
        else
        {
            AccountCreate();
        }
    }
);

// Up to this line is the initialization process.

ClientPtr->account.doTakeOver(
    [](gs2::ez::account::AsyncEzDoTakeOverResult r)
    {
        if (r.getError())
        {
            GEngine->AddOnScreenDebugMessage(-1, 5.f, FColor::Red, "account.doTakeOver failed.");
        }
        else
        {
            Item = r.getResult()->getItem();
        }
    },
    TCHAR_TO_ANSI("namespace1"), // namespaceName
    0, // type
    TCHAR_TO_ANSI("user-0001@gs2.io"), // userIdentifier
    TCHAR_TO_ANSI("password-0001") // password
);
using Gs2.Core.AsyncResult;
using Gs2.Gs2Account.Unity.Result;
using Gs2.Unity.Util;

var profile = new Profile(
    clientId: "your client id",
    clientSecret: "your client secret",
    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;
    }
}

// Up to this line is the initialization process.

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

{
    AsyncResult<EzDoTakeOverResult> asyncResult = null;
    var current = gs2.Account.DoTakeOver(
        callback: r => { asyncResult = r; },
        namespaceName: "namespace1",
        type: 0,
        userIdentifier: "user-0001@gs2.io",
        password: "password-0001"
    );

    yield return current;
    if (asyncResult.Error != null)
    {
        OnError(asyncResult.Error);
        yield break;
    }

    var result = asyncResult.Result;
    var item = result.Item;
}

引き継ぎを実行

指定された 引き継ぎ用ユーザID引き継ぎ用パスワード が一致していた場合、設定されたアカウント情報を応答します。 応答されたアカウント情報から ユーザIDパスワード を永続化して利用してください。

Request

必須 デフォルト 値の制限 説明
namespaceName string ~ 32文字 ネームスペース名
type int ~ 1024 スロット番号
userIdentifier string ~ 1024文字 引き継ぎ用ユーザーID
password string ~ 128文字 パスワード

Result

説明
item Account ゲームプレイヤーアカウント

listTakeOverSettings

listTakeOverSettings

ProfilePtr = std::make_shared<gs2::ez::Profile>(
    TCHAR_TO_ANSI(*ClientId),
    TCHAR_TO_ANSI(*ClientSecret),
    gs2::ez::Gs2BasicReopener()
);

ClientPtr = std::make_shared<gs2::ez::Client>(
    *ProfilePtr
);

ProfilePtr->initialize(
    [this](gs2::ez::Profile::AsyncInitializeResult r)
    {
        if (r.getError())
        {
            GEngine->AddOnScreenDebugMessage(-1, 5.f, FColor::Red, "profile.initialize failed.");
        }
        else
        {
            AccountCreate();
        }
    }
);

// Up to this line is the initialization process.

ClientPtr->account.describeTakeOvers(
    [](gs2::ez::account::AsyncEzDescribeTakeOversResult r)
    {
        if (r.getError())
        {
            GEngine->AddOnScreenDebugMessage(-1, 5.f, FColor::Red, "account.describeTakeOvers failed.");
        }
        else
        {
            Items = r.getResult()->getItems();
            NextPageToken = r.getResult()->getNextPageToken();
        }
    },
    ProfilePtr->getGs2Session(),
    TCHAR_TO_ANSI("namespace1"), // namespaceName
    null // limit,
    TCHAR_TO_ANSI("$account1.userId"), // accessToken
    TCHAR_TO_ANSI(null) // pageToken
);
using Gs2.Core.AsyncResult;
using Gs2.Gs2Account.Unity.Result;
using Gs2.Unity.Util;

var profile = new Profile(
    clientId: "your client id",
    clientSecret: "your client secret",
    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;
    }
}

// Up to this line is the initialization process.

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

{
    AsyncResult<EzDescribeTakeOversResult> asyncResult = null;
    var current = gs2.Account.DescribeTakeOvers(
        callback: r => { asyncResult = r; },
        session: session,
        namespaceName: "namespace1",
        limit: null,
        accessToken: "$account1.userId",
        pageToken: null
    );

    yield return current;
    if (asyncResult.Error != null)
    {
        OnError(asyncResult.Error);
        yield break;
    }

    var result = asyncResult.Result;
    var items = result.Items;
    var nextPageToken = result.NextPageToken;
}

設定されている 引き継ぎ設定 の一覧を取得

ゲームプレイヤーが設定した 引き継ぎ設定 の一覧を取得できます。 設定されている 引き継ぎ用パスワード の値は取得できません。

Request

必須 デフォルト 値の制限 説明
namespaceName string ~ 32文字 ネームスペース名
accessToken string ~ 128文字 ユーザーID
pageToken string ~ 1024文字 データの取得を開始する位置を指定するトークン
limit int 30 1 ~ 1000 データの取得件数

Result

説明
items TakeOver[] 引き継ぎ設定のリスト
nextPageToken string リストの続きを取得するためのページトークン

updateTakeOverSetting

updateTakeOverSetting

ProfilePtr = std::make_shared<gs2::ez::Profile>(
    TCHAR_TO_ANSI(*ClientId),
    TCHAR_TO_ANSI(*ClientSecret),
    gs2::ez::Gs2BasicReopener()
);

ClientPtr = std::make_shared<gs2::ez::Client>(
    *ProfilePtr
);

ProfilePtr->initialize(
    [this](gs2::ez::Profile::AsyncInitializeResult r)
    {
        if (r.getError())
        {
            GEngine->AddOnScreenDebugMessage(-1, 5.f, FColor::Red, "profile.initialize failed.");
        }
        else
        {
            AccountCreate();
        }
    }
);

// Up to this line is the initialization process.

ClientPtr->account.updateTakeOver(
    [](gs2::ez::account::AsyncEzUpdateTakeOverResult r)
    {
        if (r.getError())
        {
            GEngine->AddOnScreenDebugMessage(-1, 5.f, FColor::Red, "account.updateTakeOver failed.");
        }
        else
        {
            Item = r.getResult()->getItem();
        }
    },
    ProfilePtr->getGs2Session(),
    TCHAR_TO_ANSI("namespace1"), // namespaceName
    0, // type
    TCHAR_TO_ANSI("password-0001"), // oldPassword
    TCHAR_TO_ANSI("password-1001") // password
);
using Gs2.Core.AsyncResult;
using Gs2.Gs2Account.Unity.Result;
using Gs2.Unity.Util;

var profile = new Profile(
    clientId: "your client id",
    clientSecret: "your client secret",
    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;
    }
}

// Up to this line is the initialization process.

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

{
    AsyncResult<EzUpdateTakeOverResult> asyncResult = null;
    var current = gs2.Account.UpdateTakeOver(
        callback: r => { asyncResult = r; },
        session: session,
        namespaceName: "namespace1",
        type: 0,
        oldPassword: "password-0001",
        password: "password-1001"
    );

    yield return current;
    if (asyncResult.Error != null)
    {
        OnError(asyncResult.Error);
        yield break;
    }

    var result = asyncResult.Result;
    var item = result.Item;
}

`引き継ぎ設定 ` のパスワードを変更する

このAPIを経由して 引き継ぎ用パスワード を更新するためには、すでに設定されている 引き継ぎ用パスワード を知っていなければ実行できません。 セキュアな 引き継ぎ設定 の更新を実現したい場合に使用します。

このAPIを使用する際には、 引き継ぎ設定 の削除APIのアクセス権限を剥奪することを忘れないようにしてください。 ゲームプレイヤーが自分の 引き継ぎ設定 の削除するにはパスワードの認証が必要ありません。 削除して再作成することで、実質的に 引き継ぎ用パスワード の変更ができてしまいます。

Request

必須 デフォルト 値の制限 説明
namespaceName string ~ 32文字 ネームスペース名
accessToken string ~ 128文字 ユーザーID
type int ~ 1024 スロット番号
oldPassword string ~ 128文字 古いパスワード
password string ~ 128文字 パスワード

Result

説明
item TakeOver 引き継ぎ設定