Windows
本文旨在介绍如何设置 Epic 身份验证,让您的游戏可以使用 Player Network 登录鉴权服务通过 Epic 渠道登录。
前提条件
- 在 Epic Developer Portal 上配置应用。
- 为组织添加开发者成员并赋予角色权限。
- 获取 Player Network 控制台登录账号。
- 为游戏创建新项目,或加入已有项目。
- 下载 SDK。
- 接入 SDK。
- 在 Player Network 控制台添加 Epic 为业务的登录鉴权方式。
步骤1:为 Epic 登录配置 SDK
在 Epic Developer Portal 选择您的产品。
点击 Product Settings 后选择 SDK Download & Credentials。
在 EOS SDK Credentials 下点击 Use credentials in header file,使用生成头文件功能。
完善必填信息,在确认显示的指示后点击 I understand。自动生成的信息可通过点击右上角的复制图标进行复制。
- Deployment:部署环境,推荐使用 Live,产品上线时无需重新配置
- Client:客户端名称
- Application:产品名称
将生成的信息配置到 INTLConfig.ini 文件。
[Epic]
EPIC_PRODUCT_NAME = {INTL_EPIC_PRODUCT_NAME}
EPIC_PRODUCT_VERSION = {INTL_EPIC_PRODUCT_VERSION}
EPIC_PRODUCT_ID = {INTL_EPIC_PRODUCT_ID}
EPIC_SANDBOX_ID = {INTL_EPIC_SANDBOX_ID}
EPIC_DEPLOYMENT_ID = {INTL_EPIC_DEPLOYMENT_ID}
EPIC_CLIENT_ID = {INTL_EPIC_CLIENT_ID}
EPIC_CLIENT_SECRET = {INTL_EPIC_CLIENT_SECRET}- 将
{INTL_EPIC_PRODUCT_NAME}
替换为产品名称。 - 将
{INTL_EPIC_PRODUCT_VERSION}
替换为表示产品版本号的自定义字符串,例如 "1.0"。 - 将
{INTL_EPIC_PRODUCT_ID}
替换为ProductId[]
的值。 - 将
{INTL_EPIC_SANDBOX_ID}
替换为SandBoxId[]
的值。 - 将
{INTL_EPIC_DEPLOYMENT_ID}
替换为DeploymentId[]
的值。 - 将
{INTL_EPIC_CLIENT_ID}
替换为ClientCredentialsId[]
的值。 - 将
{INTL_EPIC_CLIENT_SECRET}
替换为ClientCredentialsSecret[]
的值。
- 将
步骤2:添加 Epic 登录
如果项目还未在 Epic Games 平台发布,则登录时会显示警告。只有团队成员才能正常登录。
在 Epic Account Services 页面配置所需登录权限。更多信息,请参见 Epic 账号服务数据隐私和可见性。
- basic_profile:基本配置文件是检索 Epic 账号任何信息所需的最低访问级别。
- friends_list:应用程序可以通过好友列表访问权限访问 Epic 账号的好友列表。
- presence:存在访问级别允许应用程序访问账号的存在信息。
添加
UpdateSDK
调用,以确保 Epic 的异步回调功能正常运行。
PC 应用程序中的 Player Network SDK 仅支持 AccountPortal
登录模式。该模式下 Epic EOS SDK 将在系统浏览器中打开登录页面并使用本地存储的长期访问令牌进行网络登录。更多信息,请参见 Epic 账号用户在 Epic Games Launcher 之外的持久登录。
Epic 支持将登录状态从一个进程传递给子进程,因此子进程无需额外的用户输入即可获取登录到父进程的 Epic 账号的登录状态信息。这一过程由刷新令牌完成,更多信息请参见 EOS API reference page for EOS_ELoginCredentialType。
使用场景:如果游戏需要通过启动器启动,那么在启动器上登录 Epic 后,游戏将被打开。由于启动器和游戏属于不同的进程,因此游戏进程无法使用启动器中的 Epic 登录状态。如果游戏需要 Epic 登录状态(例如用于支付),它可以通过使用刷新令牌登录 Epic,而无需玩家的任何输入。
Player Network SDK 支持获取 Epic 渠道的刷新令牌。使用 Player Network SDK 登录 Epic 后,Player Network SDK 会在登录结果的 ChannelInfo
字段中返回 Epic 的刷新令牌。游戏进程从父进程获取刷新令牌后,就可以使用刷新令牌登录 Epic。
注册登录相关回调。
- Unity
- Unreal Engine
// Add callbacks
public void AddAuthObserver()
{
INTLAPI.AddAuthResultObserver(OnAuthResultEvent);
}
// Remove callbacks
public void RemoveAuthObserver()
{
INTLAPI.RemoveAuthResultObserver(OnAuthResultEvent);
}
// Process the INTLAuthResult callback
public void OnAuthResultEvent(INTLAuthResult ret)
{
Debug.Log($"MethodID: {ret.MethodId}");
string methodTag = "";
if (authRet.MethodId == (int)INTLMethodID.INTL_AUTH_LOGIN)
{
methodTag = "Login";
}
else if (authRet.MethodId == (int)INTLMethodID.INTL_AUTH_BIND)
{
methodTag = "Bind";
}
else if (authRet.MethodId == (int)INTLMethodID.INTL_AUTH_AUTOLOGIN)
{
methodTag = "AutoLogin";
}
else if (authRet.MethodId == (int)INTLMethodID.INTL_AUTH_QUERY_USER_INFO)
{
methodTag = "QueryUserInfo";
}
else if (authRet.MethodId == (int)INTLMethodID.INTL_AUTH_GET_AUTH_RESULT)
{
methodTag = "GetAuthResult";
}
}C++ Event Handling (above v1.15)
//configure callback
FINTLAuthEvent authEvent;
authEvent.AddUObject(this, &OnAuthResult_Implementation);
UINTLSDKAPI::SetAuthResultObserver(authEvent);
// Remove callbacks
UINTLSDKAPI::GetAuthResultObserver().Clear();void OnAuthResult_Implementation(FINTLAuthResult ret)
{
UE_LOG(LogTemp, Warning, TEXT("MethodID: %d"), ret.MethodId);
}Unreal Event Handling
void OnAuthResult_Implementation(FINTLAuthResult ret)
{
UE_LOG(LogTemp, Warning, TEXT("MethodID: %d"), ret.MethodId);
}调用
AutoLogin
接口自动登录。- Unity
- Unreal Engine
INTLAPI.AutoLogin();
UINTLSDKAPI::AutoLogin();
在自动登录失败时调用
Login
接口使玩家手动登录。- Unity
- Unreal Engine
string refreshToken; //refresh token from another proccess
StringBuilder Extra_Json = new StringBuilder();
Extra_Json.Append("{");
Extra_Json.Append("\"")
.Append("LoginMode")
.Append("\"")
.Append(":")
.Append("\"")
.Append("RefreshToken")
.Append("\",");
Extra_Json.Append("\"")
.Append("Token")
.Append("\"")
.Append(":")
.Append("\"")
.Append(refreshTokentoken)
.Append("\"");
Extra_Json.Append("}");
string channel = "Epic";
string permissions = "basic_profile,friends_list,presence"; //permissions for epic
string extraJson = Extra_Json.ToString();
INTLAPI.Login(channel, permissions, extraJson);FString RefreshToken;// refresh token from another proccess
const auto Permissions = TEXT("basic_profile,friends_list,presence"); //permissions for epic
FString Extra_JSON = TEXT("");
const TSharedRef<TJsonWriter<>> JsonWriter = TJsonWriterFactory<>::Create(&Extra_JSON);
JsonWriter->WriteObjectStart();
JsonWriter->WriteValue(TEXT("LoginMode"), TEXT("RefreshToken"));
JsonWriter->WriteValue(TEXT("Token"), RefreshToken);
JsonWriter->WriteObjectEnd();
JsonWriter->Close();
UINTLSDKAPI::Login(EINTLLoginChannel::kChannelEpic, Permissions, Extra_JSON);与游戏后台同步客户端身份验证状态,等待最终验证结果。
步骤3:验收登录功能
在 Player Network SDK 日志中搜索关键字 "AuthResult" 确认渠道名称和 OpenID 是否正确返回。如果正确,则表明集成配置成功,登录功能已成功添加。
如果接入过程中遇到问题,请参见 常见问题。