跳到主要内容

Windows

本文旨在介绍如何设置 Epic 身份验证,让您的游戏可以使用 Player Network 登录鉴权服务通过 Epic 渠道登录。

前提条件

  1. 在 Epic Developer Portal 上配置应用。
  2. 为组织添加开发者成员并赋予角色权限
  3. 获取 Player Network 控制台登录账号
  4. 为游戏创建新项目,或加入已有项目
  5. 下载 SDK
  6. 接入 SDK
  7. 在 Player Network 控制台添加 Epic 为业务的登录鉴权方式

步骤1:为 Epic 登录配置 SDK

  1. 在 Epic Developer Portal 选择您的产品。

  2. 点击 Product Settings 后选择 SDK Download & Credentials

  3. EOS SDK Credentials 下点击 Use credentials in header file,使用生成头文件功能。 Epic Generate Head File

  4. 完善必填信息,在确认显示的指示后点击 I understand。自动生成的信息可通过点击右上角的复制图标进行复制。

    • Deployment:部署环境,推荐使用 Live,产品上线时无需重新配置
    • Client:客户端名称
    • Application:产品名称

    Epic Generate Head File Result

  5. 将生成的信息配置到 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 平台发布,则登录时会显示警告。只有团队成员才能正常登录。
Image: Epic Unverified Application

  • Epic Account Services 页面配置所需登录权限。更多信息,请参见 Epic 账号服务数据隐私和可见性

    • basic_profile:基本配置文件是检索 Epic 账号任何信息所需的最低访问级别。
    • friends_list:应用程序可以通过好友列表访问权限访问 Epic 账号的好友列表。
    • presence:存在访问级别允许应用程序访问账号的存在信息。 Epic_Permission_SettingEpic_Modify_Permission
  • 添加 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。

  1. 注册登录相关回调。

    // 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";
    }
    }
  2. 调用 AutoLogin 接口自动登录。

    INTLAPI.AutoLogin();
  3. 在自动登录失败时调用 Login 接口使玩家手动登录。

    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);
  4. 与游戏后台同步客户端身份验证状态,等待最终验证结果。

步骤3:验收登录功能

在 Player Network SDK 日志中搜索关键字 "AuthResult" 确认渠道名称和 OpenID 是否正确返回。如果正确,则表明集成配置成功,登录功能已成功添加。

如果接入过程中遇到问题,请参见 常见问题