C++ 集成
Learn how to implement authentication using C++ in Unreal Engine.
阅读时间7 分钟最后更新于 4 天前
以下部分展示如何使用 Unreal Engine 子系统与 Authentication SDK 集成。Blueprint API 提供了 Authentication 子系统来公开此功能。
将 Authentication SDK 添加为依赖项
继续下一步前,请将AuthenticationAuthentication将希望访问的插件头文件包含到您自己的类中:PublicDependencyModuleNames.AddRange(new string[] { "Core", "CoreUObject", "Engine", "InputCore", "Authentication" });
#include "AuthenticationSubsystem.h"
Authentication 子系统
Authentication 子系统包含用于与 Unity Authentication 服务器通信、保存玩家配置文件信息以及从本地存储中加载/卸载玩家偏好设置的接口。它负责处理身份验证生命周期并存储项目的重要身份验证信息。 您可以通过从 UGameInstance 获取引用来访问 Authentication 子系统。UWorld* GameWorld = GetWorld();UGameInstance* GameInstance = GameWorld->GetGameInstance();UAuthenticationSubsystem* AuthenticationSubsystem = GameInstance->GetSubsystem<UAuthenticationSubsystem>();
SignInAnonymously
使用 SignInAnonymously() 方法进行匿名验证。这是一种无需任何用户信息即可进行身份验证的快速方法,并且不需要与外部提供商进行交互。如果成功,这将使用从 Unity Authentication 服务器返回的凭据填充当前玩家配置文件。 SignInAnonymously() 采用FAuthenticationSignInOptionsFAuthenticationResponse// Create sign-in options bodyFAuthenticationSignInOptions SignInOptions;SignInOptions.bCreateAccount = true;SignInOptions.Nonce = TEXT("abc123");AuthenticationSubsystem->SignInAnonymously(SignInOptions, THandler<FAuthenticationResponse>::CreateLambda([this](https://docs.unity.com/ugs/zh-cn/manual/authentication/manual/unreal-engine-sdk/%0AFAuthenticationResponse%20Response){ // Your response logic here}));
GetUserInfo
使用 GetUserInfo() 方法检索有关当前经过身份验证的用户的信息。这包括他们的用户 ID、身份验证时间戳以及与他们的会话关联的任何外部身份提供商。 SDK 的响应可以在需要接受FAuthenticationUserResponseAuthenticationSubsystem->GetUserInfo(THandler<FAuthenticationUserResponse>::CreateLambda([this](https://docs.unity.com/ugs/zh-cn/manual/authentication/manual/unreal-engine-sdk/%0AFAuthenticationUserResponse%20Response){ // Your response logic here}));
DeleteUser
使用 DeleteUser() 方法删除与当前经过身份验证的玩家相关的所有信息。此方法还会使玩家注销,并删除与该玩家关联的所有玩家首选项和配置文件。
SDK 的响应可以在需要接受
booltruefalseAuthenticationSubsystem->DeleteUser(THandler<bool>::CreateLambda([this](https://docs.unity.com/ugs/zh-cn/manual/authentication/manual/unreal-engine-sdk/bool%20bResponse){ // Your response logic here}));
RegisterStateChangedCallback
使用 RegisterStateChangedCallback() 方法分配一个回调函数,该函数在子系统的状态更改时调用。例如,当玩家成功进行身份验证并且子系统状态更改为AuthorizedAuthenticationStateChangedResponseAuthenticationSubsystem->RegisterStateChangedCallback(THandler<AuthenticationStateChangedResponse>::CreateLambda([this](https://docs.unity.com/ugs/zh-cn/manual/authentication/manual/unreal-engine-sdk/%0AAuthenticationStateChangedResponse%20Response){ // Your response logic here}));
SignOut
使用 SignOut() 方法注销当前经过身份验证的玩家配置文件。这将移除当前玩家配置文件并切换到默认配置文件。此方法还有一个可选参数,用于移除任何先前存储的与该玩家相关的凭据。AuthenticationSubsystem->SignOut(true); // Clear player credentials
SwitchProfile
使用 SwitchProfile() 方法切换到或创建玩家配置文件。FString NewProfileName = FString(TEXT("new_profile_123"));AuthenticationSubsystem->SwitchProfile(NewProfileName);
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](https://docs.unity.com/ugs/zh-cn/manual/authentication/manual/unreal-engine-sdk/%0AAuthenticationPlayerProfileChangedResponse%20Response){ // Your response logic here}));
RegisterProfileDeletedCallback
使用 RegisterProfileChangedCallback() 方法分配一个回调函数,该函数在删除玩家配置文件时调用。例如,当调用 SignOut 或 DeleteUser 时,将调用分配的函数。 SDK 的响应可以在需要接受 AuthenticationPlayerProfileChangedResponse 的响应处理程序中处理。AuthenticationSubsystem->RegisterPlayerProfileChangedCallback(THandler<AuthenticationPlayerProfileChangedResponse>::CreateLambda([this](https://docs.unity.com/ugs/zh-cn/manual/authentication/manual/unreal-engine-sdk/%0AAuthenticationPlayerProfileChangedResponse%20Response){ // Your response logic here}));
IsSignedIn
使用 IsSignedIn() 方法检查当前玩家配置文件是否已登录。“Signed-In(已登录)”状态的定义为 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 Project ID。FGuid ProjectId = AuthenticationSubsystem->GetUnityProjectId();
GetUnityEnvironmentName
使用 GetUnityEnvironmentName() 方法检索当前的 Unity 环境名称。FString EnvironmentId = AuthenticationSubsystem->GetUnityEnvironmentName();
GetAccessToken
使用 GetAccessToken() 方法获取当前会话的访问令牌。如果不存在,此函数返回一个空字符串。FString AccessToken = AuthenticationSubsystem->GetAccessToken();
GetSessionToken
使用 GetSessionToken() 方法获取当前会话的会话令牌。如果不存在,此函数返回一个空字符串。FString SessionToken = AuthenticationSubsystem->GetSessionToken();
GetUserId
使用 GetUserId() 方法获取当前会话的用户 ID。如果不存在,此函数返回一个空字符串。FString UserId = AuthenticationSubsystem->GetUserId();
GetState
使用 GetState() 方法获取身份验证会话的当前状态。EAuthenticationState UserId = AuthenticationSubsystem->GetUserId();
SetUnityProjectId
使用 SetUnityProjectId() 方法设置当前身份验证会话的 Unity Project ID。这将覆盖在项目设置中配置的 Unity Project ID。FGuid NewProjectId = FGuid(TEXT("00000000-1234-1234-000000000000"));AuthenticationSubsystem->SetUnityProjectId(NewProjectId);
SetUnityEnvironmentName
使用 SetUnityEnvironmentName() 方法设置当前身份验证会话的 Unity 环境名称。这将覆盖在项目设置中配置的 Unity 环境名称。FString NewEnvironmentName = FString(TEXT("testenv2"));AuthenticationSubsystem->SetUnityEnvironmentName(NewEnvironmentName );