GS2-Account SDK for Game Engine API リファレンス
モデル
EzAccount
ゲームプレイヤーアカウント
ゲームプレイヤーを識別するID情報のエンティティです。
ゲームプレイヤーアカウントは匿名アカウントであり、ユーザーID(UUID)とパスワード(ランダムな32文字の文字列)で構成されるため、ゲームプレイヤーはメールアドレスなどの情報を入力する必要はありません。
発行されたゲームプレイヤーアカウントは、デバイスのローカルストレージに保存しておき、次回以降ログインに使用します。
| 型 | 有効化条件 | 必須 | デフォルト | 値の制限 | 説明 | |
|---|---|---|---|---|---|---|
| userId | string | ✓ | UUID | ~ 128文字 | ユーザーID | |
| password | string | ✓ | ~ 128文字 | パスワード アカウントのセキュリティを確保するためのパスワードを格納します。 パスワードは最大128文字の長さを持ち、アカウントの保護に重要な役割を果たします。 | ||
| createdAt | long | ※ | 現在時刻 | 作成日時 UNIX 時間・ミリ秒 ※ サーバーが自動で設定 |
EzTakeOver
引き継ぎ情報
引き継ぎ情報とは、デバイスの機種変更やプラットフォーム間のアカウントの移動・共有時に使用する情報です。
個人を識別するユニークな文字列とパスワードで構成され、その適切な組み合わせを入力することで、Account(匿名アカウント)を取得することができます。
1つの Account に対して複数の引き継ぎ情報を設定できます。
複数の引き継ぎ情報を設定するにはそれぞれ異なるスロットを指定する必要があります。
スロットには0~1024を指定できますので、最大1025種類の引き継ぎ情報を設定可能です。
具体的な用例としては 0 には Sign in with Apple のアカウント情報を、1 には Google のアカウント情報を保存するようにする。というような使い方が想定されています。
あくまでこの引き継ぎ情報はデータホルダーであり、ソーシャルアカウントとの認証の仕組みは別途用意する必要があります。
| 型 | 有効化条件 | 必須 | デフォルト | 値の制限 | 説明 | |
|---|---|---|---|---|---|---|
| userId | string | ✓ | ~ 128文字 | ユーザーID | ||
| type | int | ✓ | 0 ~ 1024 | スロット番号 0から1024までの範囲で指定され、異なる引き継ぎ情報を区別します。 | ||
| userIdentifier | string | ✓ | ~ 1024文字 | 引き継ぎ用ユーザーID アカウントを引き継ぐ際に使用される個人を識別するためのユニークなキーです。 異なるアカウントで同一の userIdentifier を指定した場合、後で設定した値が優先されます。 | ||
| createdAt | long | ※ | 現在時刻 | 作成日時 UNIX 時間・ミリ秒 ※ サーバーが自動で設定 |
EzPlatformId
プラットフォームID
X、Instagram、Facebook などの各種プラットフォームにおけるIDを保持します。
他のプレイヤーは各種プラットフォームIDを使用して、プレイヤーを検索することができます。
Instagram のフォロワーや、Facebook のフレンドをゲーム内のフレンドとしてインポートする際に、GS2-Account のアカウントを特定するために使用します。
| 型 | 有効化条件 | 必須 | デフォルト | 値の制限 | 説明 | |
|---|---|---|---|---|---|---|
| type | int | ✓ | 0 ~ 1024 | スロット番号 0から1024までの範囲で指定され、プラットフォームの種類を識別するために使用します。 | ||
| userIdentifier | string | ✓ | ~ 1024文字 | 各種プラットフォームにおけるユーザーID 外部プラットフォームにおけるユーザーの一意な識別子(例:ソーシャルメディアのユーザーIDやメールアドレス)です。スロット番号(type)と組み合わせて、特定のプラットフォームアカウントを識別するために使用されます。 | ||
| userId | string | ✓ | ~ 128文字 | GS2-Account ユーザーID このプラットフォームIDにリンクされた GS2-Account のユーザーIDです。外部プラットフォームのIDと GS2 の匿名アカウントとの対応付けに使用されます。 | ||
| createdAt | long | ※ | 現在時刻 | 作成日時 UNIX 時間・ミリ秒 ※ サーバーが自動で設定 |
EzPlatformUser
各種プラットフォームにおけるユーザー情報
外部プラットフォームのユーザー情報を保持します。プラットフォーム固有のユーザー識別子と対応する GS2-Account ユーザーIDのマッピングを含み、プラットフォームIDによるプレイヤー検索に使用されます。
| 型 | 有効化条件 | 必須 | デフォルト | 値の制限 | 説明 | |
|---|---|---|---|---|---|---|
| type | int | ✓ | 0 ~ 1024 | スロット番号 0から1024までの範囲で指定され、プラットフォームの種類を識別するために使用します。 | ||
| userIdentifier | string | ✓ | ~ 1024文字 | 各種プラットフォームにおけるユーザーID 外部プラットフォームにおけるユーザーの一意な識別子(例:ソーシャルメディアのユーザーIDやメールアドレス)です。スロット番号(type)と組み合わせて、特定のプラットフォームアカウントを識別するために使用されます。 | ||
| userId | string | ✓ | ~ 128文字 | GS2-Account ユーザーID このプラットフォームユーザーにリンクされた GS2-Account のユーザーIDです。外部プラットフォームのIDと GS2 の匿名アカウントとの対応付けに使用されます。 |
EzBanStatus
アカウントBANステータス
ゲームプレイヤーアカウントに適用されたBAN(アクセス禁止)状態に関する情報を表します。
この型は、BANが適用された理由、BANの名称、およびBANの解除予定日時などの詳細情報を含みます。
BAN状態は、不正行為や規約違反など、様々な理由でアカウントに適用されることがあり、この型はその状態を管理するのに役立ちます。
システムは、この情報を基にアカウントのアクセス権限を制御し、必要に応じてアクセスの制限や解除を行います。
| 型 | 有効化条件 | 必須 | デフォルト | 値の制限 | 説明 | |
|---|---|---|---|---|---|---|
| name | string | ✓ | UUID | ~ 36文字 | BANステータス名 BAN状態の一意な名前を保持します。名前には任意の値を設定できます。 省略した場合は UUID(Universally Unique Identifier)フォーマットで自動的に生成され、各BANステータスを識別するために使用されます。 このIDにより、複数のBANステータスを簡単に追跡できます。 | |
| reason | string | ✓ | ~ 256文字 | アカウントBANされた理由 アカウントがBANされた具体的な理由を説明します。 最大256文字の長さで、アカウントBANの原因を明確にするのに役立ちます。 この情報は、アカウントの管理者や運営チームが参照するだけでなく、ゲームクライアントへの応答値にも含まれます。 | ||
| releaseTimestamp | long | ✓ | BANが解除される日時 アカウントBANが解除される予定の日時を示します。 この日時が過ぎると、アカウントは自動的にBAN解除状態になり、通常のアクセスが可能になります。 |
メソッド
authentication
アカウントにログインする
アカウント作成時に取得したユーザーIDとパスワードを使って、ゲームプレイヤーのログイン処理を行います。
ログインに成功すると、アカウント認証情報 と 署名 が発行されます。
これらを GS2-Auth::Login に渡すと、GS2 の各サービスを利用するための アクセストークン を取得できます。
通常は GS2-Profile::Login を使うことで、この処理と GS2-Auth::Login をまとめて実行できます。
詳しくは「はじめかた」のサンプルプログラムを参照してください。
アカウント認証情報 と 署名 の有効期限は1時間です。
Request
| 型 | 有効化条件 | 必須 | デフォルト | 値の制限 | 説明 | |
|---|---|---|---|---|---|---|
| namespaceName | string | ✓ | ~ 128文字 | ネームスペース名 ネームスペース固有の名前。英数字および -(ハイフン) _(アンダースコア) .(ピリオド)で指定します。 | ||
| userId | string | ✓ | ~ 128文字 | ユーザーID | ||
| keyId | string | “grn:gs2:{region}:{ownerId}:key:default:key:default” | ~ 1024文字 | 暗号鍵 GRN | ||
| password | string | ✓ | ~ 128文字 | パスワード アカウントのセキュリティを確保するためのパスワードを格納します。 パスワードは最大128文字の長さを持ち、アカウントの保護に重要な役割を果たします。 |
Result
| 型 | 説明 | |
|---|---|---|
| item | EzAccount | ゲームプレイヤーアカウント |
| banStatuses | List<EzBanStatus> | BAN状態リスト |
| body | string | 署名対象のアカウント認証情報 |
| signature | string | 署名 |
Error
このAPIには特別な例外が定義されています。
GS2-SDK for GameEngine ではゲーム内でハンドリングが必要そうなエラーは一般的な例外から派生した特殊化した例外を用意することでハンドリングしやすくしています。
一般的なエラーの種類や、ハンドリング方法は こちら のドキュメントを参考にしてください。
| 型 | 基底クラス | 説明 |
|---|---|---|
| PasswordIncorrectException | UnauthorizedException | パスワードの指定が不適切です |
| BannedInfinityException | UnauthorizedException | アカウントが利用停止されています |
実装例
try {
var domain = gs2.Account.Namespace(
namespaceName: "namespace-0001"
).Account(
userId: "user-0001"
);
var result = await domain.AuthenticationAsync(
password: "password-0001",
keyId: "grn:gs2:ap-northeast-1:owner_id:key:namespace-0001:key:key-0001"
);
var item = await result.ModelAsync();
var banStatuses = result.BanStatuses;
var body = result.Body;
var signature = result.Signature;
} catch(Gs2.Gs2Account.Exception.PasswordIncorrectException e) {
// Incorrect password specified.
} catch(Gs2.Gs2Account.Exception.BannedInfinityException e) {
// Account has been suspended.
} var domain = gs2.Account.Namespace(
namespaceName: "namespace-0001"
).Account(
userId: "user-0001"
);
var future = domain.AuthenticationFuture(
password: "password-0001",
keyId: "grn:gs2:ap-northeast-1:owner_id:key:namespace-0001:key:key-0001"
);
yield return future;
if (future.Error != null)
{
if (future.Error is Gs2.Gs2Account.Exception.PasswordIncorrectException)
{
// Incorrect password specified.
}
if (future.Error is Gs2.Gs2Account.Exception.BannedInfinityException)
{
// Account has been suspended.
}
onError.Invoke(future.Error, null);
yield break;
}
var future2 = future.Result.ModelFuture();
yield return future2;
if (future2.Error != null)
{
onError.Invoke(future2.Error, null);
yield break;
}
var result = future2.Result;
var banStatuses = future.Result.BanStatuses;
var body = future.Result.Body;
var signature = future.Result.Signature; const auto Domain = Gs2->Account->Namespace(
"namespace-0001" // namespaceName
)->Account(
"user-0001" // userId
);
const auto Future = Domain->Authentication(
"password-0001", // password
"grn:gs2:ap-northeast-1:owner_id:key:namespace-0001:key:key-0001" // keyId
);
Future->StartSynchronousTask();
if (Future->GetTask().IsError())
{
auto e = Future->GetTask().Error();
if (e->IsChildOf(Gs2::Account::Error::FPasswordIncorrectError::Class))
{
// Incorrect password specified.
}
if (e->IsChildOf(Gs2::Account::Error::FBannedInfinityError::Class))
{
// Account has been suspended.
}
return false;
}
// obtain changed values / result values
const auto Future2 = Future->GetTask().Result()->Model();
Future2->StartSynchronousTask();
if (Future2->GetTask().IsError())
{
return Future2->GetTask().Error();
}
const auto Result = Future2->GetTask().Result();
const auto BanStatuses = Result->BanStatuses;
const auto Body = Result->Body;
const auto Signature = Result->Signature;create
新しいゲームプレイヤーアカウントを作成する
ゲームを初めて起動したときに呼び出し、プレイヤーのアカウントを作成します。
作成に成功すると、ユーザーIDとパスワードが返されます。
この2つの値はゲームデータのセーブ領域(PlayerPrefs やローカルセーブなど)に保存し、次回のログインに使ってください。
パスワードは自動的にランダム生成されるため、プレイヤーが自由に設定することはできません。
プレイヤーがわかりやすいID(メールアドレスやSNSアカウントなど)で引き継ぎを行いたい場合は、別途 引き継ぎ情報 を登録してください。
Request
| 型 | 有効化条件 | 必須 | デフォルト | 値の制限 | 説明 | |
|---|---|---|---|---|---|---|
| namespaceName | string | ✓ | ~ 128文字 | ネームスペース名 ネームスペース固有の名前。英数字および -(ハイフン) _(アンダースコア) .(ピリオド)で指定します。 |
Result
| 型 | 説明 | |
|---|---|---|
| item | EzAccount | 作成したゲームプレイヤーアカウント |
実装例
var domain = gs2.Account.Namespace(
namespaceName: "namespace-0001"
);
var result = await domain.CreateAsync(
);
var item = await result.ModelAsync(); var domain = gs2.Account.Namespace(
namespaceName: "namespace-0001"
);
var future = domain.CreateFuture(
);
yield return future;
if (future.Error != null)
{
onError.Invoke(future.Error, null);
yield break;
}
var future2 = future.Result.ModelFuture();
yield return future2;
if (future2.Error != null)
{
onError.Invoke(future2.Error, null);
yield break;
}
var result = future2.Result; const auto Domain = Gs2->Account->Namespace(
"namespace-0001" // namespaceName
);
const auto Future = Domain->Create(
);
Future->StartSynchronousTask();
if (Future->GetTask().IsError())
{
return false;
}
// obtain changed values / result values
const auto Future2 = Future->GetTask().Result()->Model();
Future2->StartSynchronousTask();
if (Future2->GetTask().IsError())
{
return Future2->GetTask().Error();
}
const auto Result = Future2->GetTask().Result();addTakeOverSetting
引き継ぎ情報を登録する
スマートフォンの機種変更やアプリの再インストール時に、アカウントを復元できるようにするための設定です。引き継ぎ用ユーザーID(メールアドレスなど)と 引き継ぎ用パスワード を登録しておくと、
その組み合わせを入力することで別の端末でアカウントを引き継ぐことができます。
1つのアカウントに対して、複数の引き継ぎ方法を設定できます。スロット番号 を分けることで、たとえばスロット0にメールアドレス、スロット1にSNSアカウントの情報を保存する、といった使い方ができます。
スロット番号は 0〜1024 の範囲で指定できます。
注意: この機能はデータの保存のみを行います。SNSアカウントとの認証連携(OAuth など)は、ゲーム側で別途実装する必要があります。
Request
| 型 | 有効化条件 | 必須 | デフォルト | 値の制限 | 説明 | |
|---|---|---|---|---|---|---|
| namespaceName | string | ✓ | ~ 128文字 | ネームスペース名 ネームスペース固有の名前。英数字および -(ハイフン) _(アンダースコア) .(ピリオド)で指定します。 | ||
| gameSession | GameSession | ✓ | GameSession | |||
| type | int | ✓ | 0 ~ 1024 | スロット番号 0から1024までの範囲で指定され、異なる引き継ぎ情報を区別します。 | ||
| userIdentifier | string | ✓ | ~ 1024文字 | 引き継ぎ用ユーザーID アカウントを引き継ぐ際に使用される個人を識別するためのユニークなキーです。 異なるアカウントで同一の userIdentifier を指定した場合、後で設定した値が優先されます。 | ||
| password | string | ✓ | ~ 128文字 | パスワード セキュリティを考慮して、このパスワードは機密情報として扱われ、ハッシュ値のみ保存されAPIの応答には値が含まれません。 |
Result
| 型 | 説明 | |
|---|---|---|
| item | EzTakeOver | 作成した引き継ぎ情報 |
実装例
var domain = gs2.Account.Namespace(
namespaceName: "namespace-0001"
).Me(
gameSession: GameSession
).TakeOver(
type: 0,
);
var result = await domain.AddTakeOverSettingAsync(
userIdentifier: "user-0001@gs2.io",
password: "password-0001"
);
var item = await result.ModelAsync(); var domain = gs2.Account.Namespace(
namespaceName: "namespace-0001"
).Me(
gameSession: GameSession
).TakeOver(
type: 0,
);
var future = domain.AddTakeOverSettingFuture(
userIdentifier: "user-0001@gs2.io",
password: "password-0001"
);
yield return future;
if (future.Error != null)
{
onError.Invoke(future.Error, null);
yield break;
}
var future2 = future.Result.ModelFuture();
yield return future2;
if (future2.Error != null)
{
onError.Invoke(future2.Error, null);
yield break;
}
var result = future2.Result; const auto Domain = Gs2->Account->Namespace(
"namespace-0001" // namespaceName
)->Me(
GameSession
)->TakeOver(
0, // type
);
const auto Future = Domain->AddTakeOverSetting(
"user-0001@gs2.io", // userIdentifier
"password-0001" // password
);
Future->StartSynchronousTask();
if (Future->GetTask().IsError())
{
return false;
}
// obtain changed values / result values
const auto Future2 = Future->GetTask().Result()->Model();
Future2->StartSynchronousTask();
if (Future2->GetTask().IsError())
{
return Future2->GetTask().Error();
}
const auto Result = Future2->GetTask().Result();addTakeOverSettingOpenIdConnect
OpenID Connect を使って引き継ぎ情報を登録する
Google や Apple などの外部ログインサービス(OpenID Connect)の認証結果を使って、引き継ぎ情報を登録します。
この方法ではパスワードの設定は不要です。
この機能を使うには、事前にマスターデータで スロット番号 と認証サービスの対応を設定しておく必要があります。
OpenID Connect の連携設定がされたスロットでは、通常の「ユーザーID+パスワード」方式での引き継ぎ設定はできなくなります。
Request
| 型 | 有効化条件 | 必須 | デフォルト | 値の制限 | 説明 | |
|---|---|---|---|---|---|---|
| namespaceName | string | ✓ | ~ 128文字 | ネームスペース名 ネームスペース固有の名前。英数字および -(ハイフン) _(アンダースコア) .(ピリオド)で指定します。 | ||
| gameSession | GameSession | ✓ | GameSession | |||
| type | int | ✓ | 0 ~ 1024 | スロット番号 0から1024までの範囲で指定され、異なる引き継ぎ情報を区別します。 | ||
| idToken | string | ✓ | ~ 10240文字 | OpenID Connect ID Token |
Result
| 型 | 説明 | |
|---|---|---|
| item | EzTakeOver | 作成した引き継ぎ情報 |
実装例
var domain = gs2.Account.Namespace(
namespaceName: "namespace-0001"
).Me(
gameSession: GameSession
).TakeOver(
type: 0,
);
var result = await domain.AddTakeOverSettingOpenIdConnectAsync(
idToken: "0123456789"
);
var item = await result.ModelAsync(); var domain = gs2.Account.Namespace(
namespaceName: "namespace-0001"
).Me(
gameSession: GameSession
).TakeOver(
type: 0,
);
var future = domain.AddTakeOverSettingOpenIdConnectFuture(
userIdentifier: "user-0001@gs2.io",
idToken: "0123456789"
);
yield return future;
if (future.Error != null)
{
onError.Invoke(future.Error, null);
yield break;
}
var future2 = future.Result.ModelFuture();
yield return future2;
if (future2.Error != null)
{
onError.Invoke(future2.Error, null);
yield break;
}
var result = future2.Result; const auto Domain = Gs2->Account->Namespace(
"namespace-0001" // namespaceName
)->Me(
GameSession
)->TakeOver(
0, // type
);
const auto Future = Domain->AddTakeOverSettingOpenIdConnect(
"user-0001@gs2.io", // userIdentifier
"0123456789" // idToken
);
Future->StartSynchronousTask();
if (Future->GetTask().IsError())
{
return false;
}
// obtain changed values / result values
const auto Future2 = Future->GetTask().Result()->Model();
Future2->StartSynchronousTask();
if (Future2->GetTask().IsError())
{
return Future2->GetTask().Error();
}
const auto Result = Future2->GetTask().Result();deleteTakeOverSetting
引き継ぎ情報を削除する
登録済みの引き継ぎ情報を削除します。
削除後は、その引き継ぎ情報を使ったアカウントの復元はできなくなります。
Request
| 型 | 有効化条件 | 必須 | デフォルト | 値の制限 | 説明 | |
|---|---|---|---|---|---|---|
| namespaceName | string | ✓ | ~ 128文字 | ネームスペース名 ネームスペース固有の名前。英数字および -(ハイフン) _(アンダースコア) .(ピリオド)で指定します。 | ||
| gameSession | GameSession | ✓ | GameSession | |||
| type | int | ✓ | 0 ~ 1024 | スロット番号 0から1024までの範囲で指定され、異なる引き継ぎ情報を区別します。 |
Result
| 型 | 説明 | |
|---|---|---|
| item | EzTakeOver | 削除した引き継ぎ情報 |
実装例
var domain = gs2.Account.Namespace(
namespaceName: "namespace-0001"
).Me(
gameSession: GameSession
);
var result = await domain.DeleteTakeOverSettingAsync(
type: 0
); var domain = gs2.Account.Namespace(
namespaceName: "namespace-0001"
).Me(
gameSession: GameSession
);
var future = domain.DeleteTakeOverSettingFuture(
type: 0
);
yield return future;
if (future.Error != null)
{
onError.Invoke(future.Error, null);
yield break;
} const auto Domain = Gs2->Account->Namespace(
"namespace-0001" // namespaceName
)->Me(
GameSession
);
const auto Future = Domain->DeleteTakeOverSetting(
0 // type
);
Future->StartSynchronousTask();
if (Future->GetTask().IsError())
{
return false;
}
const auto Result = Future->GetTask().Result();doTakeOver
アカウントの引き継ぎを実行する
引き継ぎ用ユーザーID と 引き継ぎ用パスワード を入力して、アカウントを引き継ぎます。
入力した情報が一致した場合、紐づけられたアカウントの ユーザーID と パスワード が返されます。
返されたユーザーIDとパスワードをセーブデータに保存して、次回以降のログインに使ってください。
Request
| 型 | 有効化条件 | 必須 | デフォルト | 値の制限 | 説明 | |
|---|---|---|---|---|---|---|
| namespaceName | string | ✓ | ~ 128文字 | ネームスペース名 ネームスペース固有の名前。英数字および -(ハイフン) _(アンダースコア) .(ピリオド)で指定します。 | ||
| type | int | ✓ | 0 ~ 1024 | スロット番号 0から1024までの範囲で指定され、異なる引き継ぎ情報を区別します。 | ||
| userIdentifier | string | ✓ | ~ 1024文字 | 引き継ぎ用ユーザーID アカウントを引き継ぐ際に使用される個人を識別するためのユニークなキーです。 異なるアカウントで同一の userIdentifier を指定した場合、後で設定した値が優先されます。 | ||
| password | string | ✓ | ~ 128文字 | パスワード セキュリティを考慮して、このパスワードは機密情報として扱われ、ハッシュ値のみ保存されAPIの応答には値が含まれません。 |
Result
| 型 | 説明 | |
|---|---|---|
| item | EzAccount | ゲームプレイヤーアカウント |
Error
このAPIには特別な例外が定義されています。
GS2-SDK for GameEngine ではゲーム内でハンドリングが必要そうなエラーは一般的な例外から派生した特殊化した例外を用意することでハンドリングしやすくしています。
一般的なエラーの種類や、ハンドリング方法は こちら のドキュメントを参考にしてください。
| 型 | 基底クラス | 説明 |
|---|---|---|
| PasswordIncorrectException | UnauthorizedException | パスワードの指定が不適切です |
実装例
try {
var domain = gs2.Account.Namespace(
namespaceName: "namespace-0001"
);
var result = await domain.DoTakeOverAsync(
type: 0,
userIdentifier: "user-0001@gs2.io",
password: "password-0001"
);
var item = await result.ModelAsync();
} catch(Gs2.Gs2Account.Exception.PasswordIncorrectException e) {
// Incorrect password specified.
} var domain = gs2.Account.Namespace(
namespaceName: "namespace-0001"
);
var future = domain.DoTakeOverFuture(
type: 0,
userIdentifier: "user-0001@gs2.io",
password: "password-0001"
);
yield return future;
if (future.Error != null)
{
if (future.Error is Gs2.Gs2Account.Exception.PasswordIncorrectException)
{
// Incorrect password specified.
}
onError.Invoke(future.Error, null);
yield break;
}
var future2 = future.Result.ModelFuture();
yield return future2;
if (future2.Error != null)
{
onError.Invoke(future2.Error, null);
yield break;
}
var result = future2.Result; const auto Domain = Gs2->Account->Namespace(
"namespace-0001" // namespaceName
);
const auto Future = Domain->DoTakeOver(
0, // type
"user-0001@gs2.io", // userIdentifier
"password-0001" // password
);
Future->StartSynchronousTask();
if (Future->GetTask().IsError())
{
auto e = Future->GetTask().Error();
if (e->IsChildOf(Gs2::Account::Error::FPasswordIncorrectError::Class))
{
// Incorrect password specified.
}
return false;
}
// obtain changed values / result values
const auto Future2 = Future->GetTask().Result()->Model();
Future2->StartSynchronousTask();
if (Future2->GetTask().IsError())
{
return Future2->GetTask().Error();
}
const auto Result = Future2->GetTask().Result();doTakeOverOpenIdConnect
OpenID Connect を使ってアカウントの引き継ぎを実行する
Google や Apple などのログインサービス(OpenID Connect)の認証情報を使って、アカウントを引き継ぎます。
認証情報に紐づけられたアカウントの ユーザーID と パスワード が返されます。
返されたユーザーIDとパスワードをセーブデータに保存して、次回以降のログインに使ってください。
Request
| 型 | 有効化条件 | 必須 | デフォルト | 値の制限 | 説明 | |
|---|---|---|---|---|---|---|
| namespaceName | string | ✓ | ~ 128文字 | ネームスペース名 ネームスペース固有の名前。英数字および -(ハイフン) _(アンダースコア) .(ピリオド)で指定します。 | ||
| type | int | ✓ | 0 ~ 1024 | スロット番号 0から1024までの範囲で指定され、異なる引き継ぎ情報を区別します。 | ||
| idToken | string | ✓ | ~ 10240文字 | OpenID Connect ID Token |
Result
| 型 | 説明 | |
|---|---|---|
| item | EzAccount | ゲームプレイヤーアカウント |
実装例
var domain = gs2.Account.Namespace(
namespaceName: "namespace-0001"
);
var result = await domain.DoTakeOverOpenIdConnectAsync(
type: 0,
idToken: "0123456789"
);
var item = await result.ModelAsync(); var domain = gs2.Account.Namespace(
namespaceName: "namespace-0001"
);
var future = domain.DoTakeOverOpenIdConnectFuture(
type: 0,
idToken: "0123456789"
);
yield return future;
if (future.Error != null)
{
onError.Invoke(future.Error, null);
yield break;
}
var future2 = future.Result.ModelFuture();
yield return future2;
if (future2.Error != null)
{
onError.Invoke(future2.Error, null);
yield break;
}
var result = future2.Result; const auto Domain = Gs2->Account->Namespace(
"namespace-0001" // namespaceName
);
const auto Future = Domain->DoTakeOverOpenIdConnect(
0, // type
"0123456789" // idToken
);
Future->StartSynchronousTask();
if (Future->GetTask().IsError())
{
return false;
}
// obtain changed values / result values
const auto Future2 = Future->GetTask().Result()->Model();
Future2->StartSynchronousTask();
if (Future2->GetTask().IsError())
{
return Future2->GetTask().Error();
}
const auto Result = Future2->GetTask().Result();get
指定したタイプの引き継ぎ情報を取得する
スロット番号(タイプ)を指定して、登録されている引き継ぎ情報を1件取得します。
どの引き継ぎ方法が設定されているかを確認するのに使います。
セキュリティのため、引き継ぎ用パスワードの値は取得できません。
Request
| 型 | 有効化条件 | 必須 | デフォルト | 値の制限 | 説明 | |
|---|---|---|---|---|---|---|
| namespaceName | string | ✓ | ~ 128文字 | ネームスペース名 ネームスペース固有の名前。英数字および -(ハイフン) _(アンダースコア) .(ピリオド)で指定します。 | ||
| gameSession | GameSession | ✓ | GameSession | |||
| type | int | ✓ | 0 ~ 1024 | スロット番号 0から1024までの範囲で指定され、異なる引き継ぎ情報を区別します。 |
Result
| 型 | 説明 | |
|---|---|---|
| item | EzTakeOver | 引き継ぎ情報 |
実装例
var domain = gs2.Account.Namespace(
namespaceName: "namespace-0001"
).Me(
gameSession: GameSession
).TakeOver(
type: 0,
);
var item = await domain.ModelAsync(); var domain = gs2.Account.Namespace(
namespaceName: "namespace-0001"
).Me(
gameSession: GameSession
).TakeOver(
type: 0,
);
var future = domain.ModelFuture();
yield return future;
var item = future.Result; const auto Domain = Gs2->Account->Namespace(
"namespace-0001" // namespaceName
)->Me(
GameSession
)->TakeOver(
0, // type
);
const auto Future = Domain->Model();
Future->StartSynchronousTask();
if (Future->GetTask().IsError())
{
return false;
}値の変更イベントハンドリング
var domain = gs2.Account.Namespace(
namespaceName: "namespace-0001"
).Me(
gameSession: GameSession
).TakeOver(
type: 0,
);
// イベントハンドリングを開始
var callbackId = domain.Subscribe(
value => {
// 値が変化した時に呼び出される
// value には変更後の値が渡ってくる
}
);
// イベントハンドリングを停止
domain.Unsubscribe(callbackId); var domain = gs2.Account.Namespace(
namespaceName: "namespace-0001"
).Me(
gameSession: GameSession
).TakeOver(
type: 0,
);
// イベントハンドリングを開始
var callbackId = domain.Subscribe(
value => {
// 値が変化した時に呼び出される
// value には変更後の値が渡ってくる
}
);
// イベントハンドリングを停止
domain.Unsubscribe(callbackId); const auto Domain = Gs2->Account->Namespace(
"namespace-0001" // namespaceName
)->Me(
GameSession
)->TakeOver(
0, // type
);
// イベントハンドリングを開始
const auto CallbackId = Domain->Subscribe(
[](TSharedPtr<Gs2::Account::Model::FTakeOver> value) {
// 値が変化した時に呼び出される
// value には変更後の値が渡ってくる
}
);
// イベントハンドリングを停止
Domain->Unsubscribe(CallbackId);Warning
このイベントはSDKがもつローカルキャッシュの値が変更された時に呼び出されます。
ローカルキャッシュは SDK が持つ API の実行、または GS2-Gateway の通知を有効にした GS2-Distributor 経由でのスタンプシートの実行、または GS2-Gateway の通知を有効にした GS2-JobQueue の実行によって変化したもののみが対象となります。
そのため、これらの方法以外で値が変更されてもコールバックは呼び出されません。
getAuthorizationUrl
OpenID Connect の認証URLを取得する
Google や Apple などの外部ログインサービスの認証ページへリダイレクトするためのURLを取得します。
このURLにプレイヤーを誘導することで、OpenID Connect を使った引き継ぎ情報の登録や引き継ぎの実行を開始できます。
Request
| 型 | 有効化条件 | 必須 | デフォルト | 値の制限 | 説明 | |
|---|---|---|---|---|---|---|
| namespaceName | string | ✓ | ~ 128文字 | ネームスペース名 ネームスペース固有の名前。英数字および -(ハイフン) _(アンダースコア) .(ピリオド)で指定します。 | ||
| type | int | ✓ | 0 ~ 1024 | スロット番号 0から1024までの範囲で指定され、異なる引き継ぎ情報を区別します。 |
Result
| 型 | 説明 | |
|---|---|---|
| authorizationUrl | string | 認証URL |
実装例
var domain = gs2.Account.Namespace(
namespaceName: "namespace-0001"
).Me(
gameSession: GameSession
);
var result = await domain.GetAuthorizationUrlAsync(
type: 0
);
var authorizationUrl = result.AuthorizationUrl; var domain = gs2.Account.Namespace(
namespaceName: "namespace-0001"
).Me(
gameSession: GameSession
);
var future = domain.GetAuthorizationUrlFuture(
type: 0
);
yield return future;
if (future.Error != null)
{
onError.Invoke(future.Error, null);
yield break;
}
var authorizationUrl = future.Result.AuthorizationUrl; const auto Domain = Gs2->Account->Namespace(
"namespace-0001" // namespaceName
)->Me(
GameSession
);
const auto Future = Domain->GetAuthorizationUrl(
0 // type
);
Future->StartSynchronousTask();
if (Future->GetTask().IsError())
{
return false;
}
const auto Result = Future->GetTask().Result();
const auto AuthorizationUrl = Result->AuthorizationUrl;listTakeOverSettings
引き継ぎ情報の一覧を取得する
このプレイヤーに設定されている引き継ぎ情報の一覧を取得します。
セキュリティのため、引き継ぎ用パスワードの値は取得できません。
Request
| 型 | 有効化条件 | 必須 | デフォルト | 値の制限 | 説明 | |
|---|---|---|---|---|---|---|
| namespaceName | string | ✓ | ~ 128文字 | ネームスペース名 ネームスペース固有の名前。英数字および -(ハイフン) _(アンダースコア) .(ピリオド)で指定します。 | ||
| gameSession | GameSession | ✓ | GameSession | |||
| pageToken | string | ~ 1024文字 | データの取得を開始する位置を指定するトークン | |||
| limit | int | 30 | 1 ~ 1000 | データの取得件数 |
Result
| 型 | 説明 | |
|---|---|---|
| items | List<EzTakeOver> | 引き継ぎ情報のリスト |
| nextPageToken | string | リストの続きを取得するためのページトークン |
実装例
var domain = gs2.Account.Namespace(
namespaceName: "namespace-0001"
).Me(
gameSession: GameSession
);
var items = await domain.TakeOversAsync(
).ToListAsync(); var domain = gs2.Account.Namespace(
namespaceName: "namespace-0001"
).Me(
gameSession: GameSession
);
var it = domain.TakeOvers(
);
List<EzTakeOver> items = new List<EzTakeOver>();
while (it.HasNext())
{
yield return it.Next();
if (it.Error != null)
{
onError.Invoke(it.Error, null);
break;
}
if (it.Current != null)
{
items.Add(it.Current);
}
else
{
break;
}
} const auto Domain = Gs2->Account->Namespace(
"namespace-0001" // namespaceName
)->Me(
GameSession
);
const auto It = Domain->TakeOvers(
);
TArray<Gs2::UE5::Account::Model::FEzTakeOverPtr> Result;
for (auto Item : *It)
{
if (Item.IsError())
{
return false;
}
Result.Add(Item.Current());
}値の変更イベントハンドリング
var domain = gs2.Account.Namespace(
namespaceName: "namespace-0001"
).Me(
gameSession: GameSession
);
// イベントハンドリングを開始
var callbackId = domain.SubscribeTakeOvers(
() => {
// リストの要素が変化した時に呼び出される
}
);
// イベントハンドリングを停止
domain.UnsubscribeTakeOvers(callbackId); var domain = gs2.Account.Namespace(
namespaceName: "namespace-0001"
).Me(
gameSession: GameSession
);
// イベントハンドリングを開始
var callbackId = domain.SubscribeTakeOvers(
() => {
// リストの要素が変化した時に呼び出される
}
);
// イベントハンドリングを停止
domain.UnsubscribeTakeOvers(callbackId); const auto Domain = Gs2->Account->Namespace(
"namespace-0001" // namespaceName
)->Me(
GameSession
);
// イベントハンドリングを開始
const auto CallbackId = Domain->SubscribeTakeOvers(
[]() {
// リストの要素が変化した時に呼び出される
}
);
// イベントハンドリングを停止
Domain->UnsubscribeTakeOvers(CallbackId);Warning
このイベントはSDKがもつローカルキャッシュの値が変更された時に呼び出されます。
ローカルキャッシュは SDK が持つ API の実行、または GS2-Gateway の通知を有効にした GS2-Distributor 経由でのスタンプシートの実行、または GS2-Gateway の通知を有効にした GS2-JobQueue の実行によって変化したもののみが対象となります。
そのため、これらの方法以外で値が変更されてもコールバックは呼び出されません。
updateTakeOverSetting
引き継ぎ用パスワードを変更する
引き継ぎ情報のパスワードを変更します。
変更するには、現在設定されている古いパスワードの入力が必要です。
注意: このAPIを使ってセキュアなパスワード変更を実現する場合は、引き継ぎ情報を削除 するAPIへのアクセス権限を無効にしてください。
削除にはパスワード認証が不要なため、削除→再作成で実質的にパスワードを変更できてしまいます。
Request
| 型 | 有効化条件 | 必須 | デフォルト | 値の制限 | 説明 | |
|---|---|---|---|---|---|---|
| namespaceName | string | ✓ | ~ 128文字 | ネームスペース名 ネームスペース固有の名前。英数字および -(ハイフン) _(アンダースコア) .(ピリオド)で指定します。 | ||
| gameSession | GameSession | ✓ | GameSession | |||
| type | int | ✓ | 0 ~ 1024 | スロット番号 0から1024までの範囲で指定され、異なる引き継ぎ情報を区別します。 | ||
| oldPassword | string | ✓ | ~ 128文字 | 古いパスワード | ||
| password | string | ✓ | ~ 128文字 | パスワード セキュリティを考慮して、このパスワードは機密情報として扱われ、ハッシュ値のみ保存されAPIの応答には値が含まれません。 |
Result
| 型 | 説明 | |
|---|---|---|
| item | EzTakeOver | 更新した引き継ぎ情報 |
Error
このAPIには特別な例外が定義されています。
GS2-SDK for GameEngine ではゲーム内でハンドリングが必要そうなエラーは一般的な例外から派生した特殊化した例外を用意することでハンドリングしやすくしています。
一般的なエラーの種類や、ハンドリング方法は こちら のドキュメントを参考にしてください。
| 型 | 基底クラス | 説明 |
|---|---|---|
| PasswordIncorrectException | UnauthorizedException | パスワードの指定が不適切です |
実装例
try {
var domain = gs2.Account.Namespace(
namespaceName: "namespace-0001"
).Me(
gameSession: GameSession
).TakeOver(
type: 0,
);
var result = await domain.UpdateTakeOverSettingAsync(
oldPassword: "password-0001",
password: "password-1001"
);
var item = await result.ModelAsync();
} catch(Gs2.Gs2Account.Exception.PasswordIncorrectException e) {
// Incorrect password specified.
} var domain = gs2.Account.Namespace(
namespaceName: "namespace-0001"
).Me(
gameSession: GameSession
).TakeOver(
type: 0,
);
var future = domain.UpdateTakeOverSettingFuture(
oldPassword: "password-0001",
password: "password-1001"
);
yield return future;
if (future.Error != null)
{
if (future.Error is Gs2.Gs2Account.Exception.PasswordIncorrectException)
{
// Incorrect password specified.
}
onError.Invoke(future.Error, null);
yield break;
}
var future2 = future.Result.ModelFuture();
yield return future2;
if (future2.Error != null)
{
onError.Invoke(future2.Error, null);
yield break;
}
var result = future2.Result; const auto Domain = Gs2->Account->Namespace(
"namespace-0001" // namespaceName
)->Me(
GameSession
)->TakeOver(
0, // type
);
const auto Future = Domain->UpdateTakeOverSetting(
"password-0001", // oldPassword
"password-1001" // password
);
Future->StartSynchronousTask();
if (Future->GetTask().IsError())
{
auto e = Future->GetTask().Error();
if (e->IsChildOf(Gs2::Account::Error::FPasswordIncorrectError::Class))
{
// Incorrect password specified.
}
return false;
}
// obtain changed values / result values
const auto Future2 = Future->GetTask().Result()->Model();
Future2->StartSynchronousTask();
if (Future2->GetTask().IsError())
{
return Future2->GetTask().Error();
}
const auto Result = Future2->GetTask().Result();addPlatformIdSetting
プラットフォームIDを登録する
X(旧Twitter)、Instagram、Facebook などの外部サービスにおけるユーザーIDを、ゲームアカウントに紐づけて保存します。
タイプ(スロット番号)には 0〜1024 の数値を指定し、プラットフォームの種類を区別します。ユーザー識別子 には、各プラットフォームにおけるユーザーIDを指定します。
他のプレイヤーはタイプとユーザー識別子を指定して、そのプレイヤーを検索できるようになります。
たとえば、SNSのフレンドをゲーム内フレンドとして追加する機能を実装する際に利用できます。
Request
| 型 | 有効化条件 | 必須 | デフォルト | 値の制限 | 説明 | |
|---|---|---|---|---|---|---|
| namespaceName | string | ✓ | ~ 128文字 | ネームスペース名 ネームスペース固有の名前。英数字および -(ハイフン) _(アンダースコア) .(ピリオド)で指定します。 | ||
| gameSession | GameSession | ✓ | GameSession このプラットフォームIDにリンクされた GS2-Account のユーザーIDです。外部プラットフォームのIDと GS2 の匿名アカウントとの対応付けに使用されます。 | |||
| type | int | ✓ | 0 ~ 1024 | スロット番号 0から1024までの範囲で指定され、プラットフォームの種類を識別するために使用します。 | ||
| userIdentifier | string | ✓ | ~ 1024文字 | 各種プラットフォームにおけるユーザーID 外部プラットフォームにおけるユーザーの一意な識別子(例:ソーシャルメディアのユーザーIDやメールアドレス)です。スロット番号(type)と組み合わせて、特定のプラットフォームアカウントを識別するために使用されます。 |
Result
| 型 | 説明 | |
|---|---|---|
| item | EzPlatformId | 作成したプラットフォームID |
実装例
var domain = gs2.Account.Namespace(
namespaceName: "namespace-0001"
).Me(
gameSession: GameSession
).PlatformId(
type: 0,
userIdentifier: "123456"
);
var result = await domain.AddPlatformIdSettingAsync(
);
var item = await result.ModelAsync(); var domain = gs2.Account.Namespace(
namespaceName: "namespace-0001"
).Me(
gameSession: GameSession
).PlatformId(
type: 0,
userIdentifier: "123456"
);
var future = domain.AddPlatformIdSettingFuture(
);
yield return future;
if (future.Error != null)
{
onError.Invoke(future.Error, null);
yield break;
}
var future2 = future.Result.ModelFuture();
yield return future2;
if (future2.Error != null)
{
onError.Invoke(future2.Error, null);
yield break;
}
var result = future2.Result; const auto Domain = Gs2->Account->Namespace(
"namespace-0001" // namespaceName
)->Me(
GameSession
)->PlatformId(
0, // type
"123456" // userIdentifier
);
const auto Future = Domain->AddPlatformIdSetting(
);
Future->StartSynchronousTask();
if (Future->GetTask().IsError())
{
return false;
}
// obtain changed values / result values
const auto Future2 = Future->GetTask().Result()->Model();
Future2->StartSynchronousTask();
if (Future2->GetTask().IsError())
{
return Future2->GetTask().Error();
}
const auto Result = Future2->GetTask().Result();deletePlatformIdSetting
プラットフォームIDを削除する
登録済みのプラットフォームIDを削除します。
削除後は、そのプラットフォームIDを使ったプレイヤー検索ができなくなります。
Request
| 型 | 有効化条件 | 必須 | デフォルト | 値の制限 | 説明 | |
|---|---|---|---|---|---|---|
| namespaceName | string | ✓ | ~ 128文字 | ネームスペース名 ネームスペース固有の名前。英数字および -(ハイフン) _(アンダースコア) .(ピリオド)で指定します。 | ||
| gameSession | GameSession | ✓ | GameSession このプラットフォームIDにリンクされた GS2-Account のユーザーIDです。外部プラットフォームのIDと GS2 の匿名アカウントとの対応付けに使用されます。 | |||
| type | int | ✓ | 0 ~ 1024 | スロット番号 0から1024までの範囲で指定され、プラットフォームの種類を識別するために使用します。 |
Result
| 型 | 説明 | |
|---|---|---|
| item | EzPlatformId | 削除したプラットフォームID |
実装例
var domain = gs2.Account.Namespace(
namespaceName: "namespace-0001"
).Me(
gameSession: GameSession
).PlatformId(
type: 0,
userIdentifier: "123456"
);
var result = await domain.DeletePlatformIdSettingAsync(
); var domain = gs2.Account.Namespace(
namespaceName: "namespace-0001"
).Me(
gameSession: GameSession
).PlatformId(
type: 0,
userIdentifier: "123456"
);
var future = domain.DeletePlatformIdSettingFuture(
);
yield return future;
if (future.Error != null)
{
onError.Invoke(future.Error, null);
yield break;
} const auto Domain = Gs2->Account->Namespace(
"namespace-0001" // namespaceName
)->Me(
GameSession
)->PlatformId(
0, // type
"123456" // userIdentifier
);
const auto Future = Domain->DeletePlatformIdSetting(
);
Future->StartSynchronousTask();
if (Future->GetTask().IsError())
{
return false;
}
const auto Result = Future->GetTask().Result();findPlatformUser
プラットフォームIDからプレイヤーを検索する
プラットフォームの種類(タイプ)とユーザー識別子を指定して、そのプラットフォームIDに紐づいたゲームプレイヤーを検索します。
たとえば、SNSのフレンドリストからゲーム内のプレイヤーを見つける際に利用できます。
Request
| 型 | 有効化条件 | 必須 | デフォルト | 値の制限 | 説明 | |
|---|---|---|---|---|---|---|
| namespaceName | string | ✓ | ~ 128文字 | ネームスペース名 ネームスペース固有の名前。英数字および -(ハイフン) _(アンダースコア) .(ピリオド)で指定します。 | ||
| type | int | ✓ | 0 ~ 1024 | スロット番号 0から1024までの範囲で指定され、プラットフォームの種類を識別するために使用します。 | ||
| userIdentifier | string | ✓ | ~ 1024文字 | 各種プラットフォームにおけるユーザーID 外部プラットフォームにおけるユーザーの一意な識別子(例:ソーシャルメディアのユーザーIDやメールアドレス)です。スロット番号(type)と組み合わせて、特定のプラットフォームアカウントを識別するために使用されます。 |
Result
| 型 | 説明 | |
|---|---|---|
| item | EzPlatformUser | 各種プラットフォームにおけるユーザー情報 |
実装例
var domain = gs2.Account.Namespace(
namespaceName: "namespace-0001"
).Me(
gameSession: GameSession
).PlatformId(
type: 0,
userIdentifier: "123456"
);
var result = await domain.FindPlatformUserAsync(
);
var item = await result.ModelAsync(); var domain = gs2.Account.Namespace(
namespaceName: "namespace-0001"
).Me(
gameSession: GameSession
).PlatformId(
type: 0,
userIdentifier: "123456"
);
var future = domain.FindPlatformUserFuture(
);
yield return future;
if (future.Error != null)
{
onError.Invoke(future.Error, null);
yield break;
}
var future2 = future.Result.ModelFuture();
yield return future2;
if (future2.Error != null)
{
onError.Invoke(future2.Error, null);
yield break;
}
var result = future2.Result; const auto Domain = Gs2->Account->Namespace(
"namespace-0001" // namespaceName
)->Me(
GameSession
)->PlatformId(
0, // type
"123456" // userIdentifier
);
const auto Future = Domain->FindPlatformUser(
);
Future->StartSynchronousTask();
if (Future->GetTask().IsError())
{
return false;
}
// obtain changed values / result values
const auto Future2 = Future->GetTask().Result()->Model();
Future2->StartSynchronousTask();
if (Future2->GetTask().IsError())
{
return Future2->GetTask().Error();
}
const auto Result = Future2->GetTask().Result();getPlatformId
指定したタイプのプラットフォームIDを取得する
スロット番号(タイプ)を指定して、登録されているプラットフォームIDを1件取得します。
特定のプラットフォームに対して、どのユーザーIDが紐づけられているかを確認するのに使います。
Request
| 型 | 有効化条件 | 必須 | デフォルト | 値の制限 | 説明 | |
|---|---|---|---|---|---|---|
| namespaceName | string | ✓ | ~ 128文字 | ネームスペース名 ネームスペース固有の名前。英数字および -(ハイフン) _(アンダースコア) .(ピリオド)で指定します。 | ||
| gameSession | GameSession | ✓ | GameSession このプラットフォームIDにリンクされた GS2-Account のユーザーIDです。外部プラットフォームのIDと GS2 の匿名アカウントとの対応付けに使用されます。 | |||
| type | int | ✓ | 0 ~ 1024 | スロット番号 0から1024までの範囲で指定され、プラットフォームの種類を識別するために使用します。 |
Result
| 型 | 説明 | |
|---|---|---|
| item | EzPlatformId | プラットフォームID |
実装例
var domain = gs2.Account.Namespace(
namespaceName: "namespace-0001"
).Me(
gameSession: GameSession
).PlatformId(
type: 0,
userIdentifier: "123456"
);
var item = await domain.ModelAsync(); var domain = gs2.Account.Namespace(
namespaceName: "namespace-0001"
).Me(
gameSession: GameSession
).PlatformId(
type: 0,
userIdentifier: "123456"
);
var future = domain.ModelFuture();
yield return future;
var item = future.Result; const auto Domain = Gs2->Account->Namespace(
"namespace-0001" // namespaceName
)->Me(
GameSession
)->PlatformId(
0, // type
"123456" // userIdentifier
);
const auto Future = Domain->Model();
Future->StartSynchronousTask();
if (Future->GetTask().IsError())
{
return false;
}値の変更イベントハンドリング
var domain = gs2.Account.Namespace(
namespaceName: "namespace-0001"
).Me(
gameSession: GameSession
).PlatformId(
type: 0,
userIdentifier: "123456"
);
// イベントハンドリングを開始
var callbackId = domain.Subscribe(
value => {
// 値が変化した時に呼び出される
// value には変更後の値が渡ってくる
}
);
// イベントハンドリングを停止
domain.Unsubscribe(callbackId); var domain = gs2.Account.Namespace(
namespaceName: "namespace-0001"
).Me(
gameSession: GameSession
).PlatformId(
type: 0,
userIdentifier: "123456"
);
// イベントハンドリングを開始
var callbackId = domain.Subscribe(
value => {
// 値が変化した時に呼び出される
// value には変更後の値が渡ってくる
}
);
// イベントハンドリングを停止
domain.Unsubscribe(callbackId); const auto Domain = Gs2->Account->Namespace(
"namespace-0001" // namespaceName
)->Me(
GameSession
)->PlatformId(
0, // type
"123456" // userIdentifier
);
// イベントハンドリングを開始
const auto CallbackId = Domain->Subscribe(
[](TSharedPtr<Gs2::Account::Model::FPlatformId> value) {
// 値が変化した時に呼び出される
// value には変更後の値が渡ってくる
}
);
// イベントハンドリングを停止
Domain->Unsubscribe(CallbackId);Warning
このイベントはSDKがもつローカルキャッシュの値が変更された時に呼び出されます。
ローカルキャッシュは SDK が持つ API の実行、または GS2-Gateway の通知を有効にした GS2-Distributor 経由でのスタンプシートの実行、または GS2-Gateway の通知を有効にした GS2-JobQueue の実行によって変化したもののみが対象となります。
そのため、これらの方法以外で値が変更されてもコールバックは呼び出されません。
listPlatformIdSettings
登録済みのプラットフォームIDの一覧を取得する
このプレイヤーに紐づけられている外部サービスのID情報の一覧を取得します。
どのプラットフォームのIDが登録されているかを確認するのに使います。
Request
| 型 | 有効化条件 | 必須 | デフォルト | 値の制限 | 説明 | |
|---|---|---|---|---|---|---|
| namespaceName | string | ✓ | ~ 128文字 | ネームスペース名 ネームスペース固有の名前。英数字および -(ハイフン) _(アンダースコア) .(ピリオド)で指定します。 | ||
| gameSession | GameSession | ✓ | GameSession | |||
| pageToken | string | ~ 1024文字 | データの取得を開始する位置を指定するトークン | |||
| limit | int | 30 | 1 ~ 1000 | データの取得件数 |
Result
| 型 | 説明 | |
|---|---|---|
| items | List<EzPlatformId> | プラットフォームIDのリスト |
| nextPageToken | string | リストの続きを取得するためのページトークン |
実装例
var domain = gs2.Account.Namespace(
namespaceName: "namespace-0001"
).Me(
gameSession: GameSession
);
var items = await domain.PlatformIdsAsync(
).ToListAsync(); var domain = gs2.Account.Namespace(
namespaceName: "namespace-0001"
).Me(
gameSession: GameSession
);
var it = domain.PlatformIds(
);
List<EzPlatformId> items = new List<EzPlatformId>();
while (it.HasNext())
{
yield return it.Next();
if (it.Error != null)
{
onError.Invoke(it.Error, null);
break;
}
if (it.Current != null)
{
items.Add(it.Current);
}
else
{
break;
}
} const auto Domain = Gs2->Account->Namespace(
"namespace-0001" // namespaceName
)->Me(
GameSession
);
const auto It = Domain->PlatformIds(
);
TArray<Gs2::UE5::Account::Model::FEzPlatformIdPtr> Result;
for (auto Item : *It)
{
if (Item.IsError())
{
return false;
}
Result.Add(Item.Current());
}値の変更イベントハンドリング
var domain = gs2.Account.Namespace(
namespaceName: "namespace-0001"
).Me(
gameSession: GameSession
);
// イベントハンドリングを開始
var callbackId = domain.SubscribePlatformIds(
() => {
// リストの要素が変化した時に呼び出される
}
);
// イベントハンドリングを停止
domain.UnsubscribePlatformIds(callbackId); var domain = gs2.Account.Namespace(
namespaceName: "namespace-0001"
).Me(
gameSession: GameSession
);
// イベントハンドリングを開始
var callbackId = domain.SubscribePlatformIds(
() => {
// リストの要素が変化した時に呼び出される
}
);
// イベントハンドリングを停止
domain.UnsubscribePlatformIds(callbackId); const auto Domain = Gs2->Account->Namespace(
"namespace-0001" // namespaceName
)->Me(
GameSession
);
// イベントハンドリングを開始
const auto CallbackId = Domain->SubscribePlatformIds(
[]() {
// リストの要素が変化した時に呼び出される
}
);
// イベントハンドリングを停止
Domain->UnsubscribePlatformIds(CallbackId);Warning
このイベントはSDKがもつローカルキャッシュの値が変更された時に呼び出されます。
ローカルキャッシュは SDK が持つ API の実行、または GS2-Gateway の通知を有効にした GS2-Distributor 経由でのスタンプシートの実行、または GS2-Gateway の通知を有効にした GS2-JobQueue の実行によって変化したもののみが対象となります。
そのため、これらの方法以外で値が変更されてもコールバックは呼び出されません。