GS2-Account Deploy/CDK リファレンス

GS2-Deployのスタックを作成する際に使用するテンプレートのフォーマットと、CDKによる各種言語のテンプレート出力の実装例

エンティティ

Deploy処理で操作の対象となるリソース

Namespace

ネームスペース

ネームスペースは、一つのプロジェクト内で同じサービスを異なる用途で複数利用するためのエンティティです。
GS2 の各サービスはネームスペース単位で管理されます。ネームスペースが異なれば、同じサービスでも完全に独立したデータ空間として扱われます。

そのため、各サービスの利用を開始するにあたってネームスペースを作成する必要があります。

Request

リソースの生成・更新リクエスト

有効化条件必須デフォルト値の制限説明
namestring
~ 128文字ネームスペース名
ネームスペース固有の名前。英数字および -(ハイフン) _(アンダースコア) .(ピリオド)で指定します。
descriptionstring~ 1024文字説明文
transactionSettingTransactionSettingトランザクション設定
changePasswordIfTakeOverboolfalseアカウント引き継ぎ時にパスワードを変更するか
アカウント引き継ぎ時にパスワードを変更するかどうかを指定します。
この設定により、アカウント引き継ぎを実行した後に引き継ぎ前のデバイスからのログインを制限することができます。
differentUserIdForLoginAndDataRetentionboolfalseログインに使用するユーザーIDとデータの保持に使用するユーザーIDを異なるものにする
ログイン用ユーザーIDとデータ保持用ユーザーIDを分けるかどうかを指定します。
この設定により、プラットフォーマーが規定する個人情報保護の要件を少ない工数で満たせる可能性があります。

※このパラメータは、ネームスペースの作成時にのみ設定が可能です。
createAccountScriptScriptSettingアカウント新規作成したときに実行するスクリプト
アカウント作成のカスタムロジックを実装するのに使用されます。
Script トリガーリファレンス - createAccount
authenticationScriptScriptSetting認証したときに実行するスクリプト
認証プロセスのカスタマイズに役立ちます。
Script トリガーリファレンス - authentication
createTakeOverScriptScriptSetting引き継ぎ情報登録したときに実行するスクリプト
引き継ぎ情報を初めて登録した時に報酬を与えるために、GS2-Mission のカウンターを上昇するなどのカスタムロジックを追加するのに使用されます。
Script トリガーリファレンス - createTakeOver
doTakeOverScriptScriptSetting引き継ぎ実行したときに実行するスクリプト
引き継ぎ処理の追加ロジックを実装するのに役立ちます。
Script トリガーリファレンス - doTakeOver
banScriptScriptSettingアカウントBANステータスを追加したときに実行するスクリプト
Script トリガーリファレンス - ban
unBanScriptScriptSettingアカウントBANステータスを解除したときに実行するスクリプト
Script トリガーリファレンス - unBan
logSettingLogSettingログの出力設定
ログデータの出力設定を管理します。この型は、ログデータを書き出すために使用される GS2-Log のネームスペース情報を保持します。

GetAttr

!GetAttrタグで取得可能なリソースの生成結果

説明
ItemNamespace作成したネームスペース

実装例

Type: GS2::Account::Namespace
Properties:
  Name: namespace-0001
  Description: null
  TransactionSetting: null
  ChangePasswordIfTakeOver: false
  DifferentUserIdForLoginAndDataRetention: null
  CreateAccountScript: null
  AuthenticationScript: null
  CreateTakeOverScript: null
  DoTakeOverScript: null
  BanScript: null
  UnBanScript: null
  LogSetting: 
    LoggingNamespaceId: grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001
import (
    "github.com/gs2io/gs2-golang-cdk/core"
    "github.com/gs2io/gs2-golang-cdk/account"
)


SampleStack := core.NewStack()
account.NewNamespace(
    &SampleStack,
    "namespace-0001",
    account.NamespaceOptions{
        ChangePasswordIfTakeOver: false,
        LogSetting: &core.LogSetting{
            LoggingNamespaceId: "grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001",
        },
    },
)

println(SampleStack.Yaml())  // Generate Template
class SampleStack extends \Gs2Cdk\Core\Model\Stack
{
    function __construct() {
        parent::__construct();
        new \Gs2Cdk\Account\Model\Namespace_(
            stack: $this,
            name: "namespace-0001",
            options: new \Gs2Cdk\Account\Model\Options\NamespaceOptions(
                changePasswordIfTakeOver: false,
                logSetting: new \Gs2Cdk\Core\Model\LogSetting(
                    loggingNamespaceId: "grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001"
                )
            )
        );
    }
}

print((new SampleStack())->yaml());  // Generate Template
class SampleStack extends io.gs2.cdk.core.model.Stack
{
    public SampleStack() {
        super();
        new io.gs2.cdk.account.model.Namespace(
                this,
                "namespace-0001",
                new io.gs2.cdk.account.model.options.NamespaceOptions()
                        .withChangePasswordIfTakeOver(false)
                        .withLogSetting(new io.gs2.cdk.core.model.LogSetting(
                            "grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001"
                        ))
        );
    }
}

System.out.println(new SampleStack().yaml());  // Generate Template
public class SampleStack : Gs2Cdk.Core.Model.Stack
{
    public SampleStack() {
        new Gs2Cdk.Gs2Account.Model.Namespace(
            stack: this,
            name: "namespace-0001",
            options: new Gs2Cdk.Gs2Account.Model.Options.NamespaceOptions
            {
                changePasswordIfTakeOver = false,
                logSetting = new Gs2Cdk.Core.Model.LogSetting(
                    loggingNamespaceId: "grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001"
                )
            }
        );
    }
}

Debug.Log(new SampleStack().Yaml());  // Generate Template
import core from "@/gs2cdk/core";
import account from "@/gs2cdk/account";

class SampleStack extends core.Stack
{
    public constructor() {
        super();
        new account.model.Namespace(
            this,
            "namespace-0001",
            {
                changePasswordIfTakeOver: false,
                logSetting: new core.LogSetting(
                    "grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001"
                )
            }
        );
    }
}

console.log(new SampleStack().yaml());  // Generate Template
from gs2_cdk import Stack, core, account

class SampleStack(Stack):

    def __init__(self):
        super().__init__()
        account.Namespace(
            stack=self,
            name='namespace-0001',
            options=account.NamespaceOptions(
                change_password_if_take_over=False,
                log_setting=core.LogSetting(
                    logging_namespace_id='grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001',
                ),
            ),
        )

print(SampleStack().yaml())  # Generate Template

TransactionSetting

トランザクション設定

トランザクション設定は、トランザクションの実行方法・整合性・非同期処理・競合回避の仕組みを制御する設定です。
自動実行(AutoRun)、アトミック実行(AtomicCommit)、GS2-Distributor を利用した非同期実行、スクリプト結果の一括適用、GS2-JobQueue による入手アクションの非同期化などを組み合わせ、ゲームロジックに応じた堅牢なトランザクション管理を可能にします。

有効化条件必須デフォルト値の制限説明
enableAutoRunboolfalse発行したトランザクションをサーバーサイドで自動的に実行するか
enableAtomicCommitbool{enableAutoRun} == truefalseトランザクションの実行をアトミックにコミットするか
※ enableAutoRun が true であれば 有効
transactionUseDistributorbool{enableAtomicCommit} == truefalseトランザクションを非同期処理で実行する
※ enableAtomicCommit が true であれば 有効
commitScriptResultInUseDistributorbool{transactionUseDistributor} == truefalseスクリプトの結果コミット処理を非同期処理で実行するか
※ transactionUseDistributor が true であれば 有効
acquireActionUseJobQueuebool{enableAtomicCommit} == truefalse入手アクションを実行する際に GS2-JobQueue を使用するか
※ enableAtomicCommit が true であれば 有効
distributorNamespaceIdstring“grn:gs2:{region}:{ownerId}:distributor:default”~ 1024文字トランザクションの実行に使用する GS2-Distributor ネームスペース GRN
queueNamespaceIdstring“grn:gs2:{region}:{ownerId}:queue:default”~ 1024文字トランザクションの実行に使用する GS2-JobQueue のネームスペース GRN

ScriptSetting

スクリプト設定

GS2 ではマイクロサービスのイベントに関連づけて、カスタムスクリプトを実行することができます。
このモデルは、スクリプトの実行をトリガーするための設定を保持します。

スクリプトの実行方式は大きく2種類あり、それは「同期実行」と「非同期実行」です。
同期実行は、スクリプトの実行が完了するまで処理がブロックされます。
代わりに、スクリプトの実行結果を使って API の実行を止めたり、API のレスポンス内容を制御することができます。

一方、非同期実行ではスクリプトの完了を待つために処理がブロックされることはありません。
ただし、スクリプトの実行結果を利用して API の実行を停止したり、API の応答内容を変更することはできません。
非同期実行は API の応答フローに影響を与えないため、原則として非同期実行を推奨します。

非同期実行には実行方式が2種類あり、GS2-Script と Amazon EventBridge があります。
Amazon EventBridge を使用することで、Lua 以外の言語で処理を記述することができます。

有効化条件必須デフォルト値の制限説明
triggerScriptIdstring~ 1024文字API 実行時に同期的に実行される GS2-Script のスクリプト GRN
「grn:gs2:」ではじまる GRN 形式のIDで指定する必要があります。
doneTriggerTargetType文字列列挙型
enum {
  “none”,
  “gs2_script”,
  “aws”
}
“none”非同期スクリプトの実行方法
非同期実行で使用するスクリプトの種類を指定します。
「非同期実行のスクリプトを使用しない(none)」「GS2-Scriptを使用する(gs2_script)」「Amazon EventBridgeを使用する(aws)」が選択できます。
定義説明
“none”なし
“gs2_script”GS2-Script
“aws”Amazon EventBridge
doneTriggerScriptIdstring{doneTriggerTargetType} == “gs2_script”~ 1024文字非同期実行する GS2-Script スクリプト GRN
「grn:gs2:」ではじまる GRN 形式のIDで指定する必要があります。
※ doneTriggerTargetType が “gs2_script” であれば 有効
doneTriggerQueueNamespaceIdstring{doneTriggerTargetType} == “gs2_script”~ 1024文字非同期実行スクリプトを実行する GS2-JobQueue ネームスペース GRN
非同期実行スクリプトを直接実行するのではなく、GS2-JobQueue を経由する場合は GS2-JobQueue のネームスペースGRN を指定します。
GS2-JobQueue を利用する理由は多くはありませんので、特に理由がなければ指定する必要はありません。
※ doneTriggerTargetType が “gs2_script” であれば 有効

LogSetting

ログの出力設定

ログデータの出力設定を管理します。この型は、ログデータを書き出すために使用される GS2-Log ネームスペースの識別子(Namespace ID)を保持します。
ログネームスペースID(loggingNamespaceId)には、ログデータを収集し保存する GS2-Log のネームスペースを、GRNの形式で指定します。
この設定をすることで、設定されたネームスペース内で発生したAPIリクエスト・レスポンスのログデータが、対象の GS2-Log ネームスペース側へ出力されるようになります。
GS2-Log ではリアルタイムでログが提供され、システムの監視や分析、デバッグなどに利用できます。

有効化条件必須デフォルト値の制限説明
loggingNamespaceIdstring
~ 1024文字ログを出力する GS2-Log のネームスペース GRN
「grn:gs2:」ではじまる GRN 形式のIDで指定する必要があります。

CurrentModelMaster

現在アクティブな引き継ぎ情報タイプモデルのマスターデータ

現在ネームスペース内で有効な引き継ぎ情報タイプモデルの定義を記述したマスターデータです。
GS2ではマスターデータの管理にJSON形式のファイルを使用します。
ファイルをアップロードすることで、実際にサーバーに設定を反映することができます。

JSONファイルを作成する方法として、マネージメントコンソール内にマスターデータエディタを提供しています。
また、よりゲームの運営に相応しいツールを作成し、適切なフォーマットのJSONファイルを書き出すことでもサービスを利用可能です。

Request

リソースの生成・更新リクエスト

有効化条件必須デフォルト値の制限説明
namespaceNamestring
~ 128文字ネームスペース名
ネームスペース固有の名前。英数字および -(ハイフン) _(アンダースコア) .(ピリオド)で指定します。
mode文字列列挙型
enum {
  “direct”,
  “preUpload”
}
“direct”更新モード
定義説明
“direct”マスターデータを直接更新
“preUpload”マスターデータをアップロードしてから更新
settingsstring{mode} == “direct”
✓※
~ 5242880文字マスターデータ
※ mode が “direct” であれば必須
uploadTokenstring{mode} == “preUpload”
✓※
~ 1024文字事前アップロードで取得したトークン
アップロードしたマスターデータを適用するために使用されます。
※ mode が “preUpload” であれば必須

GetAttr

!GetAttrタグで取得可能なリソースの生成結果

説明
ItemCurrentModelMaster更新された現在アクティブな引き継ぎ情報タイプモデルのマスターデータ

実装例

Type: GS2::Account::CurrentModelMaster
Properties:
  NamespaceName: namespace-0001
  Mode: direct
  Settings: {
    "version": "2024-07-30",
    "takeOverTypeModels": [
      {
        "type": 0,
        "openIdConnectSetting":
          {
            "configurationPath": "https://accounts.google.com/.well-known/openid-configuration",
            "clientId": "695893071400-qelt0dsu8tkotl13psnq5d1ko7kki4sl.apps.googleusercontent.com",
            "clientSecret": "secret"
          },
        "metadata": "Google"
      },
      {
        "type": 1,
        "openIdConnectSetting":
          {
            "configurationPath": "https://appleid.apple.com/.well-known/openid-configuration",
            "clientId": "io.gs2.sample.auth",
            "appleTeamId": "9LX9LA85H8",
            "appleKeyId": "P937MLY6Z7",
            "applePrivateKeyPem": "-----BEGIN PRIVATE KEY-----\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\n-----END PRIVATE KEY-----"
          },
        "metadata": "Apple"
      }
    ]
  }
  UploadToken: null
import (
    "github.com/gs2io/gs2-golang-cdk/core"
    "github.com/gs2io/gs2-golang-cdk/account"
    "github.com/openlyinc/pointy"
)


SampleStack := core.NewStack()
account.NewNamespace(
    &SampleStack,
    "namespace-0001",
    account.NamespaceOptions{},
).MasterData(
    []account.TakeOverTypeModel{
        account.NewTakeOverTypeModel(
            0,
            account.NewOpenIdConnectSetting(
                "https://accounts.google.com/.well-known/openid-configuration",
                "695893071400-qelt0dsu8tkotl13psnq5d1ko7kki4sl.apps.googleusercontent.com",
                account.OpenIdConnectSettingOptions{
                    ClientSecret: pointy.String("secret"),
                },
            ),
            account.TakeOverTypeModelOptions{
                Metadata: pointy.String("Google"),
            },
        ),
        account.NewTakeOverTypeModel(
            1,
            account.NewOpenIdConnectSetting(
                "https://appleid.apple.com/.well-known/openid-configuration",
                "io.gs2.sample.auth",
                account.OpenIdConnectSettingOptions{
                    AppleTeamId: pointy.String("9LX9LA85H8"),
                    AppleKeyId: pointy.String("P937MLY6Z7"),
                    ApplePrivateKeyPem: pointy.String("-----BEGIN PRIVATE KEY-----\\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\\n-----END PRIVATE KEY-----"),
                },
            ),
            account.TakeOverTypeModelOptions{
                Metadata: pointy.String("Apple"),
            },
        ),
    },
)

println(SampleStack.Yaml())  // Generate Template
class SampleStack extends \Gs2Cdk\Core\Model\Stack
{
    function __construct() {
        parent::__construct();
        (new \Gs2Cdk\Account\Model\Namespace_(
            stack: $this,
            name: "namespace-0001"
        ))->masterData(
            [
                new \Gs2Cdk\Account\Model\TakeOverTypeModel(
                    type:0,
                    openIdConnectSetting:new \Gs2Cdk\Account\Model\OpenIdConnectSetting(
                        configurationPath: "https://accounts.google.com/.well-known/openid-configuration",
                        clientId: "695893071400-qelt0dsu8tkotl13psnq5d1ko7kki4sl.apps.googleusercontent.com",
                        options: new \Gs2Cdk\Account\Model\Options\OpenIdConnectSettingOptions(
                            clientSecret: "secret",
                        )
                    ),
                    options: new \Gs2Cdk\Account\Model\Options\TakeOverTypeModelOptions(
                        metadata:"Google"
                    )
                ),
                new \Gs2Cdk\Account\Model\TakeOverTypeModel(
                    type:1,
                    openIdConnectSetting:new \Gs2Cdk\Account\Model\OpenIdConnectSetting(
                        configurationPath: "https://appleid.apple.com/.well-known/openid-configuration",
                        clientId: "io.gs2.sample.auth",
                        options: new \Gs2Cdk\Account\Model\Options\OpenIdConnectSettingOptions(
                            appleTeamId: "9LX9LA85H8",
                            appleKeyId: "P937MLY6Z7",
                            applePrivateKeyPem: "-----BEGIN PRIVATE KEY-----\\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\\n-----END PRIVATE KEY-----",
                        )
                    ),
                    options: new \Gs2Cdk\Account\Model\Options\TakeOverTypeModelOptions(
                        metadata:"Apple"
                    )
                )
            ]
        );
    }
}

print((new SampleStack())->yaml());  // Generate Template
class SampleStack extends io.gs2.cdk.core.model.Stack
{
    public SampleStack() {
        super();
        new io.gs2.cdk.account.model.Namespace(
            this,
            "namespace-0001"
        ).masterData(
            Arrays.asList(
                new io.gs2.cdk.account.model.TakeOverTypeModel(
                    0,
                    new io.gs2.cdk.account.model.OpenIdConnectSetting(
                        "https://accounts.google.com/.well-known/openid-configuration",
                        "695893071400-qelt0dsu8tkotl13psnq5d1ko7kki4sl.apps.googleusercontent.com",
                        new io.gs2.cdk.account.model.options.OpenIdConnectSettingOptions()
                            .withClientSecret("secret")
                    ),
                    new io.gs2.cdk.account.model.options.TakeOverTypeModelOptions()
                        .withMetadata("Google")
                ),
                new io.gs2.cdk.account.model.TakeOverTypeModel(
                    1,
                    new io.gs2.cdk.account.model.OpenIdConnectSetting(
                        "https://appleid.apple.com/.well-known/openid-configuration",
                        "io.gs2.sample.auth",
                        new io.gs2.cdk.account.model.options.OpenIdConnectSettingOptions()
                            .withAppleTeamId("9LX9LA85H8")
                            .withAppleKeyId("P937MLY6Z7")
                            .withApplePrivateKeyPem("-----BEGIN PRIVATE KEY-----\\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\\n-----END PRIVATE KEY-----")
                    ),
                    new io.gs2.cdk.account.model.options.TakeOverTypeModelOptions()
                        .withMetadata("Apple")
                )
            )
        );
    }
}

System.out.println(new SampleStack().yaml());  // Generate Template
public class SampleStack : Gs2Cdk.Core.Model.Stack
{
    public SampleStack() {
        new Gs2Cdk.Gs2Account.Model.Namespace(
            stack: this,
            name: "namespace-0001"
        ).MasterData(
            new Gs2Cdk.Gs2Account.Model.TakeOverTypeModel[] {
                new Gs2Cdk.Gs2Account.Model.TakeOverTypeModel(
                    type: 0,
                    openIdConnectSetting: new Gs2Cdk.Gs2Account.Model.OpenIdConnectSetting(
                        configurationPath: "https://accounts.google.com/.well-known/openid-configuration",
                        clientId: "695893071400-qelt0dsu8tkotl13psnq5d1ko7kki4sl.apps.googleusercontent.com",
                        options: new Gs2Cdk.Gs2Account.Model.Options.OpenIdConnectSettingOptions
                        {
                            clientSecret = "secret"
                        }
                    ),
                    options: new Gs2Cdk.Gs2Account.Model.Options.TakeOverTypeModelOptions
                    {
                        metadata = "Google"
                    }
                ),
                new Gs2Cdk.Gs2Account.Model.TakeOverTypeModel(
                    type: 1,
                    openIdConnectSetting: new Gs2Cdk.Gs2Account.Model.OpenIdConnectSetting(
                        configurationPath: "https://appleid.apple.com/.well-known/openid-configuration",
                        clientId: "io.gs2.sample.auth",
                        options: new Gs2Cdk.Gs2Account.Model.Options.OpenIdConnectSettingOptions
                        {
                            appleTeamId = "9LX9LA85H8",
                            appleKeyId = "P937MLY6Z7",
                            applePrivateKeyPem = "-----BEGIN PRIVATE KEY-----\\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\\n-----END PRIVATE KEY-----"
                        }
                    ),
                    options: new Gs2Cdk.Gs2Account.Model.Options.TakeOverTypeModelOptions
                    {
                        metadata = "Apple"
                    }
                )
            }
        );
    }
}

Debug.Log(new SampleStack().Yaml());  // Generate Template
import core from "@/gs2cdk/core";
import account from "@/gs2cdk/account";

class SampleStack extends core.Stack
{
    public constructor() {
        super();
        new account.model.Namespace(
            this,
            "namespace-0001",
        ).masterData(
            [
                new account.model.TakeOverTypeModel(
                    0,
                    new account.model.OpenIdConnectSetting(
                        "https://accounts.google.com/.well-known/openid-configuration",
                        "695893071400-qelt0dsu8tkotl13psnq5d1ko7kki4sl.apps.googleusercontent.com",
                        {
                            clientSecret: "secret"
                        }
                    ),
                    {
                        metadata: "Google"
                    }
                ),
                new account.model.TakeOverTypeModel(
                    1,
                    new account.model.OpenIdConnectSetting(
                        "https://appleid.apple.com/.well-known/openid-configuration",
                        "io.gs2.sample.auth",
                        {
                            appleTeamId: "9LX9LA85H8",
                            appleKeyId: "P937MLY6Z7",
                            applePrivateKeyPem: "-----BEGIN PRIVATE KEY-----\\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\\n-----END PRIVATE KEY-----"
                        }
                    ),
                    {
                        metadata: "Apple"
                    }
                )
            ]
        );
    }
}

console.log(new SampleStack().yaml());  // Generate Template
from gs2_cdk import Stack, core, account

class SampleStack(Stack):

    def __init__(self):
        super().__init__()
        account.Namespace(
            stack=self,
            name="namespace-0001",
        ).master_data(
            take_over_type_models=[
                account.TakeOverTypeModel(
                    type=0,
                    open_id_connect_setting=account.OpenIdConnectSetting(
                        configuration_path='https://accounts.google.com/.well-known/openid-configuration',
                        client_id='695893071400-qelt0dsu8tkotl13psnq5d1ko7kki4sl.apps.googleusercontent.com',
                        options=account.OpenIdConnectSettingOptions(
                            client_secret='secret',
                        ),
                    ),
                    options=account.TakeOverTypeModelOptions(
                        metadata = 'Google'
                    ),
                ),
                account.TakeOverTypeModel(
                    type=1,
                    open_id_connect_setting=account.OpenIdConnectSetting(
                        configuration_path='https://appleid.apple.com/.well-known/openid-configuration',
                        client_id='io.gs2.sample.auth',
                        options=account.OpenIdConnectSettingOptions(
                            apple_team_id='9LX9LA85H8',
                            apple_key_id='P937MLY6Z7',
                            apple_private_key_pem='-----BEGIN PRIVATE KEY-----\\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\\n-----END PRIVATE KEY-----',
                        ),
                    ),
                    options=account.TakeOverTypeModelOptions(
                        metadata = 'Apple'
                    ),
                ),
            ],
        )

print(SampleStack().yaml())  # Generate Template

TakeOverTypeModel

引き継ぎ情報タイプモデル

引き継ぎ情報を定義するモデルです。

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

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

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

有効化条件必須デフォルト値の制限説明
takeOverTypeModelIdstring
~ 1024文字引き継ぎ情報タイプモデル GRN
※ サーバーが自動で設定
typeint
0 ~ 1024スロット番号
0から1024までの範囲で指定され、異なる引き継ぎ情報を区別します。
metadatastring~ 2048文字メタデータ
メタデータには任意の値を設定できます。
これらの値は GS2 の動作には影響しないため、ゲーム内で利用する情報の保存先として使用できます。
openIdConnectSettingOpenIdConnectSetting
OpenID Connect の設定
OpenID Connect 準拠の Identity Provider (IdP) と連携するための設定です。ディスカバリURL、クライアント認証情報、Apple Sign In パラメータなどのプラットフォーム固有の設定が含まれます。

OpenIdConnectSetting

OpenID Connect の設定

OpenID Connect 準拠の IdP の設定を登録することで、アカウントの引き継ぎ情報として IdP 連携を利用できるようになります。

有効化条件必須デフォルト値の制限説明
configurationPathstring
~ 1024文字OpenID Connect 設定 URL
OpenID Connect プロバイダーのディスカバリエンドポイント URL です。well-known 形式(例:https://example.com/.well-known/openid-configuration)に従う必要があります。
clientIdstring
~ 1024文字クライアントID
IdP に登録されたアプリケーションのクライアントIDです。
clientSecretstring{configurationPath} != “https://appleid.apple.com/.well-known/openid-configuration”
✓※
~ 1024文字クライアントシークレット
※ configurationPath が “https://appleid.apple.com/.well-known/openid-configuration” 以外の、その他の IdP 連携であれば 必須
appleTeamIdstring{configurationPath} == “https://appleid.apple.com/.well-known/openid-configuration”
✓※
~ 1024文字Apple Developer チームID
Apple Developer アカウントのチームIDです。Apple Sign In 認証に必要です。
※ configurationPath が “https://appleid.apple.com/.well-known/openid-configuration” であれば 必須
appleKeyIdstring{configurationPath} == “https://appleid.apple.com/.well-known/openid-configuration”
✓※
~ 1024文字Apple に登録済みのキーID
Sign in with Apple 用に Apple Developer アカウントに登録されたキーIDです。
※ configurationPath が “https://appleid.apple.com/.well-known/openid-configuration” であれば 必須
applePrivateKeyPemstring{configurationPath} == “https://appleid.apple.com/.well-known/openid-configuration”
✓※
~ 10240文字Apple から受け取った秘密鍵
Apple Developer ポータルからダウンロードした PEM 形式の秘密鍵です。Apple Sign In 認証に必要です。
※ configurationPath が “https://appleid.apple.com/.well-known/openid-configuration” であれば 必須
doneEndpointUrlstring~ 1024文字認証完了時に遷移するURL
未指定の場合 /authorization/done に遷移します。
Query String に id_token が付与されます。
additionalScopeValuesList<ScopeValue>[]0 ~ 10 itemsOpenID Connect で取得する追加のスコープ
デフォルトの OpenID Connect スコープに加えて IdP にリクエストする追加の OAuth スコープです。認証時に追加のユーザー情報を取得することができます。
additionalReturnValuesList<string>[]0 ~ 10 itemsOpenID Connect で取得する追加の返却値
ID トークンまたは UserInfo レスポンスから返却値に含める追加のクレーム名です。指定されたクレームが抽出され、標準の認証結果とともに返却されます。

ScopeValue

スコープ値

OpenID Connect 認証時に取得される追加の OAuth スコープ値を表すキーと値のペアです。標準の OpenID Connect クレーム以外に IdP から取得した追加データの保存に使用されます。

有効化条件必須デフォルト値の制限説明
keystring
~ 64文字名前
認証時に IdP に対してリクエストしたスコープ名です。
valuestring~ 51200文字
対応するスコープに対して IdP から返却された値です。