C++ インテグレーション

以下のセクションでは、Unreal Engine のサブシステム を使用して Authentication SDK を統合する方法を示します。Blueprint API では、この機能を公開するために Authentication サブシステムが提供されています。

Authentication SDK を依存関係として追加する

先に進む前に、Authentication をモジュールのパブリック依存関係として追加し、プラグインのヘッダーファイルをクラスに加えます。

Authentication をモジュールの依存関係として Unreal プロジェクトのビルドファイルに追加します。

PublicDependencyModuleNames.AddRange(new string[] { "Core", "CoreUObject", "Engine", "InputCore", "Authentication" });

アクセスしたいプラグインのヘッダーファイルを自分のクラスに加えます。

#include "AuthenticationSubsystem.h"

Authentication サブシステム

Authentication サブシステムには、Unity Authentication サーバーと通信し、プレイヤープロファイル情報を保持し、ローカルストレージからプレイヤー設定をロード/アンロードするためのインターフェースが含まれています。このサブシステムは、認証ライフサイクルを管理し、プロジェクトに必要な重要な認証情報を保存する役割を担います。

Authentication サブシステムにアクセスするには、UGameInstance からリファレンスを取得します。

UWorld* GameWorld = GetWorld();
UGameInstance* GameInstance = GameWorld->GetGameInstance();
UAuthenticationSubsystem* AuthenticationSubsystem = GameInstance->GetSubsystem<UAuthenticationSubsystem>();

SignInAnonymously

SignInAnonymously() メソッドを使用すると、匿名で認証を行う ことができます。これは、ユーザー情報を必要とせず、外部プロバイダーとのインタラクションも不要な簡単な認証方法です。成功すると、Unity Authentication サーバーから返される認証情報で現在のプレイヤープロファイルが更新されます。

SignInAnonymously() は、サインインの実行方法を変更するパラメーターとして FAuthenticationSignInOptions 構造体を受け取ります。これらのパラメーターの詳細については、Unity API サービスのドキュメントページ を参照してください。

SDK からの応答は応答ハンドラーで処理できます。その際、FAuthenticationResponse を出力ピンとして受け取る必要があります。

// Create sign-in options body
FAuthenticationSignInOptions SignInOptions;
SignInOptions.bCreateAccount = true;
SignInOptions.Nonce = TEXT("abc123");

AuthenticationSubsystem->SignInAnonymously(SignInOptions, THandler<FAuthenticationResponse>::CreateLambda([this](
FAuthenticationResponse Response)
{
	// Your response logic here
}));

GetUserInfo

GetUserInfo() メソッドを使用すると、現在認証されているユーザーに関する情報を取得できます。これには、ユーザー ID、認証タイムスタンプ、およびそのセッションにリンクされている外部 ID プロバイダーが含まれます。

SDK からの応答は応答ハンドラーで処理できます。その際、FAuthenticationUserResponse を出力ピンとして受け取る必要があります。

AuthenticationSubsystem->GetUserInfo(
THandler<FAuthenticationUserResponse>::CreateLambda([this](
FAuthenticationUserResponse Response)
{
	// Your response logic here
}));

DeleteUser

DeleteUser() メソッドを使用すると、現在認証されているプレイヤーに関連するすべての情報を削除できます。このメソッドは、プレイヤーをサインアウトし、プレイヤーの設定やプロファイルもすべて削除します。

ノート: デフォルトプロファイルを使用しているときに DeleteUser() が呼び出されると、プロファイル情報が消去されますが、プロファイル自体は保持されます。

SDK からの応答は応答ハンドラーで処理できます。その際、bool を出力ピンとして受け取る必要があります。削除が成功した場合は true、それ以外の場合は false が返されます。

AuthenticationSubsystem->DeleteUser(
THandler<bool>::CreateLambda([this](bool bResponse)
{
	// Your response logic here
}));

RegisterStateChangedCallback

RegisterStateChangedCallback() メソッドを使用すると、サブシステムの状態 が変化した際に呼び出されるコールバック関数を割り当てることができます。例えば、プレイヤーが認証に成功してサブシステムの状態が Authorized に変化した際に、割り当てた関数が実行されます。

SDK からの応答は応答ハンドラーで処理できます。その際、AuthenticationStateChangedResponse を出力ピンとして受け取る必要があります。

AuthenticationSubsystem->RegisterStateChangedCallback(
THandler<AuthenticationStateChangedResponse>::CreateLambda([this](
AuthenticationStateChangedResponse Response)
{
	// Your response logic here
}));

SignOut

SignOut() メソッドを使用すると、現在認証されているプレイヤープロファイルからサインアウトできます。これにより、現在のプレイヤープロファイルが削除され、デフォルトのプロファイルに切り替わります。このメソッドには、プレイヤーに関連付けられた保存済みの認証情報を削除する、オプションのパラメーターもあります。

ノート: デフォルトプロファイルを使用しているときに SignOut() が呼び出されると、プロファイル情報が消去されますが、プロファイル自体は保持されます。

AuthenticationSubsystem->SignOut(true); // Clear player credentials

SwitchProfile

SwitchProfile() メソッドを使用すると、プレイヤープロファイルを切り替えたり、新しいプロファイルを作成したりできます。

ノート: SwitchProfile() は、サインアウト状態のときにのみ呼び出すことができます。認証された状態のときにプロファイルの切り替えが試みられた場合は、警告が記録され、何も実行されません。

FString NewProfileName = FString(TEXT("new_profile_123"));
AuthenticationSubsystem->SwitchProfile(NewProfileName);

ProfileExists

ProfileExists() メソッドを使用すると、指定したプロファイルが現在のセッションに存在するかどうかを確認できます。

ノート: 前のセッションで作成され、現在のセッションでは再作成されていないプロファイルがある場合、ProfileExists() でそれらを検出することはできません。

FString ProfileToCheckFor = FString(TEXT("new_profile_123"));
bool bExists = AuthenticationSubsystem->ProfileExists(ProfileToCheckFor);

GetCurrentProfileName

GetCurrentProfileName() メソッドを使用すると、現在のプレイヤープロファイルの名前を取得できます。

FString ProfileName = AuthenticationSubsystem->GetCurrentProfileName();

GetProfileNames

GetCurrentProfileName() メソッドを使用すると、現在のセッションで使用されているすべてのプレイヤープロファイル名のリストを取得できます。

TArray<FString> ProfileNames = AuthenticationSubsystem->GetProfileNames();

RegisterProfileChangedCallback

RegisterProfileChangedCallback() メソッドを使用すると、プレイヤープロファイルが変更された際に呼び出されるコールバック関数を割り当てることができます。例えば、SwitchProfile が正常に実行されたときに、割り当てた関数が実行されます。

SDK からの応答は応答ハンドラーで処理できます。その際、AuthenticationPlayerProfileChangedResponse を出力ピンとして受け取る必要があります。

AuthenticationSubsystem->RegisterPlayerProfileChangedCallback(
THandler<AuthenticationPlayerProfileChangedResponse>::CreateLambda([this](
AuthenticationPlayerProfileChangedResponse Response)
{
	// Your response logic here
}));

RegisterProfileDeletedCallback

RegisterProfileChangedCallback() メソッドを使用すると、プレイヤープロファイルが現在のセッションから削除された際に呼び出されるコールバック関数を割り当てることができます。例えば、SignOut が正常に実行されたときに、割り当てた関数が実行されます。

SDK からの応答は応答ハンドラーで処理できます。その際、AuthenticationPlayerProfileChangedResponse を出力ピンとして受け取る必要があります。

AuthenticationSubsystem->RegisterPlayerProfileChangedCallback(
THandler<AuthenticationPlayerProfileChangedResponse>::CreateLambda([this](
AuthenticationPlayerProfileChangedResponse Response)
{
	// Your response logic here
}));

IsSignedIn

IsSignedIn() メソッドを使用すると、現在のプレイヤープロファイルがサインインしているかどうかを確認できます。"サインインしている" とは、Authorized (認証済み) または Expired (有効期限切れ) のいずれかの状態であることを意味します。

bool bSignedIn = AuthenticationSubsystem->IsSignedIn();

IsAnonymous

IsAnonymous() メソッドを使用すると、現在のプレイヤープロファイルが匿名でサインインしているかどうかを確認できます。SignInAnonymously が正常に実行されると、true が返されます。

bool bAnonymous = AuthenticationSubsystem->IsAnonymous();

IsAuthorized

IsAuthorized() メソッドを使用すると、現在のプレイヤープロファイルがサインインしており、現在も認証されているかどうかを確認できます。サインインメソッドが正常に実行され、有効期限がまだ切れていなければ、true が返されます。

bool bAuthorized = AuthenticationSubsystem->IsAuthorized();

IsExpired

IsExpired() メソッドを使用すると、現在のプレイヤープロファイルのセッションが有効期限切れかどうかを確認できます。サインイン成功時の応答で返された有効期限を過ぎている場合は、true が返されます。

bool bExpired = AuthenticationSubsystem->IsExpired();

SessionTokenExists

SessionTokenExists() メソッドを使用すると、現在のプレイヤープロファイルのプレイヤー設定にセッショントークンが存在するかどうかを確認できます。

bool bTokenExists = AuthenticationSubsystem->SessionTokenExists();

GetUnityProjectId

GetUnityProjectId() メソッドを使用すると、現在の認証セッションに関連付けられている Unity プロジェクト ID を取得できます。

FGuid ProjectId = AuthenticationSubsystem->GetUnityProjectId();

GetUnityEnvironmentName

GetUnityEnvironmentName() メソッドを使用すると、現在の認証セッションに関連付けられている Unity 環境 ID を取得できます。

FString EnvironmentId = AuthenticationSubsystem->GetUnityEnvironmentName();

GetAccessToken

GetAccessToken() メソッドを使用すると、現在のセッションのアクセストークンを取得できます。当該の文字列が存在しない場合は、空の文字列が返されます。

FString AccessToken = AuthenticationSubsystem->GetAccessToken();

GetSessionToken

GetSessionToken() メソッドを使用すると、現在のセッションのセッショントークンを取得できます。当該の文字列が存在しない場合は、空の文字列が返されます。

FString SessionToken = AuthenticationSubsystem->GetSessionToken();

GetUserId

GetUserId() メソッドを使用すると、現在のセッションのユーザー ID を取得できます。当該の文字列が存在しない場合は、空の文字列が返されます。

ノート: これは プレイヤープロファイル名 とは異なります。ユーザー ID は、Unity Authentication System から返される一意のユーザー識別子です。

FString UserId = AuthenticationSubsystem->GetUserId();

GetState

GetState() メソッドを使用すると、認証セッションの現在の状態を取得できます。

EAuthenticationState UserId = AuthenticationSubsystem->GetUserId();

SetUnityProjectId

SetUnityProjectId() メソッドを使用すると、現在の認証セッションに対して Unity プロジェクト ID を設定できます。これが実行されると、プロジェクト設定で設定された Unity プロジェクト ID がオーバーライドされます。

FGuid NewProjectId = FGuid(TEXT("00000000-1234-1234-000000000000"));
AuthenticationSubsystem->SetUnityProjectId(NewProjectId);

SetUnityEnvironmentName

SetUnityEnvironmentName() メソッドを使用すると、現在の認証セッションに対して Unity 環境名を設定できます。これが実行されると、プロジェクト設定で設定された Unity 環境名がオーバーライドされます。

FString NewEnvironmentName = FString(TEXT("testenv2"));
AuthenticationSubsystem->SetUnityEnvironmentName(NewEnvironmentName );