跳到主要内容

Windows

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

注意

玩家必须在设备上安装 Steam 客户端并登录 Steam 账号,才能通过 Steam 登录您的 Windows 游戏。

前提条件​

1. 在 Steam 官方网站上配置 Steam 应用
1. 注册 Steamworks 开发者账号
  1. 创建一个 Steam 账号。

    当您首次注册为 Steamworks 开发者时,需要完成一系列数字文档。其中一个步骤包括支付 Steam Direct 费用。您可以根据所在的国家/地区,使用 Steam 支持的任何付款方式进行支付。

    付款过程将在 Steam 商店完成,之后您将返回 Steamworks 网站继续填写其他文档。有关更多信息,请参考 准备进行 Steamworks 注册。

  2. 登录 Steamworks。

    图片:创建应用

2. 创建 Steam 应用
  1. 登录 Steamworks 后,点击主页面上的 View Dashboard,进入 Dashboard 页面。

    图片:创建应用

  2. 确保您有足够的应用额度 (App Credit),然后点击 Create new app...。

    图片:创建应用

  3. 参考 Steam 应用程序 填写游戏的基本信息。

    图片:创建应用

  4. 点击 Create Now,并在弹窗中确认应用已成功创建。

3. 获取 App ID
  1. 在 Steamworks 成功创建应用后,点击 Dashboard 页面上的 View All Apps。

    图片:创建应用

  2. 点击您创建的应用,进入该应用的主页。

    图片:创建应用

  3. App ID 将显示在游戏标题旁边,例如下图中的 "3461180"。

    每个应用程序都有一个唯一的 ID,称为 App ID。

    图片:创建应用

4. 获取 Steam Web API 密钥
  1. 在 Steamworks 登录有管理员权限的账号后,点击 Users & Permissions > Manage Groups。

    图片:Steamworks 应用主页面

  2. 选择 Everyone。

    图片:选择用户组

  3. 在 Edit group 下,点击 Create WebAPI Key 创建密钥。

    Image: 创建 Steam WebAPI 密钥

  1. 获取 Player Network 控制台登录账号。
  2. 为游戏创建新项目,或加入已有项目。
  3. 下载 SDK。
  4. 接入 SDK。
  5. 在 Player Network 控制台添加 Steam 为业务的登录鉴权方式。

步骤1:为 Steam 登录配置 SDK​

注意

在游戏开发阶段,INTLConfig.ini 里面不需要配置 Steam 账号信息,包括 STEAM_APPID。

1. 创建 steam_appid.txt 文件​

在游戏开发阶段,如果游戏尚未获准在 Steamworks 控制台发布,需要创建一个内容为 480 的 steam_appid.txt 文件,并放在可执行文件目录内。一般情况下目录为游戏的 Binaries/Win64/ 文件夹,如果使用的是 Unreal Engine 则将文件放在运行 UE4Editor.exe(或 UnrealEditor.exe)的同一目录下,即 yourEnginePath/Engine/Binaries/Win64 目录。

steam_appid.txt 内容只需写入 480 即可,除 480 外不应该有任何的字符或者空行。当游戏在 Steamworks 中设置为 即将推出 时请删除 steam_appid.txt 文件。

更多信息,请参见 Steamworks API 概览中的 初始化与关闭。

2. 选择 Steam 登录方式​

注意

Player Network SDK V1.16 及之后的版本,Player Network SDK 新增支持使用 INTLWebView 登录 Steam。
Player Network SDK V1.21 及之后的版本,Player Network SDK 新增支持使用系统浏览器进行登录。

  • 如果游戏要上架 Steam,建议使用连接 Steam 客户端的方式进行登录。由于 Player Network SDK 需要调用 Steam 客户端进行身份验证,用户在执行 Player Network SDK 身份验证之前必须打开登录 Steam 应用程序。

    注意

    若游戏登录 Steam 账号时提示 "SteamAPI_Init failed. Please check your Steam client status",请检查 Steam 客户端是否已启动并登录。

  • 如果游戏上架除 Steam 之外的渠道,建议使用 INTLWebView 或系统浏览器(Player Network SDK V1.21 及之后版本支持)进行登录。使用 INTLWebView 或系统浏览器登录进行 Steam 登录,用户无需打开 Steam 客户端。

    警告

    在 PC 端的 Editor 模式下使用 INTLWebView 登录 Steam 时可能会出现崩溃。此问题仅在 Editor 模式下出现,PC 版本打包后不会出现此问题。

    要启用 INTLWebView 或浏览器登录 Steam 功能,请在 INTLConfig.ini 中进行配置,具体可以参照以下配置:

    # 使用 INTLWebView 登录
    STEAM_WEBVIEW_LOGIN_ENABLE = 1
    # 使用系统浏览器登录
    STEAM_BROWSER_LOGIN_ENABLE = 1
    • 如果 STEAM_WEBVIEW_LOGIN_ENABLE 和 STEAM_BROWSER_LOGIN_ENABLE 都设置成 1,则只有 STEAM_WEBVIEW_LOGIN_ENABLE 的配置生效,即使用 INTLWebView 进行 Steam 登录。
    • 如果 STEAM_WEBVIEW_LOGIN_ENABLE 和 STEAM_BROWSER_LOGIN_ENABLE 都不设置或者都设置成 0,Player Network SDK 将连接 Steam 客户端进行登录。

步骤2:添加 Steam 登录​

  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 接口使玩家手动登录。

    INTLAPI.Login(INTLChannel.Steam); 
  4. 登录 Steam 渠道后,在返回的 AuthResult 里的 ChannelInfo 获取头像。

    channelInfo : {"picture_path":"/path/to/image.png"}

    在 INTLConfig.ini 中设置 STEAM_AVATAR_RAW_RGBA_ENABLE 为1,会返回 RAW RGBA 数据。

    channelInfo : {"picture_path":"/path/to/image.json"}
  5. 与游戏后台同步客户端身份验证状态,等待最终验证结果。

步骤3:验收登录功能​

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

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

步骤4:发行游戏​

更多关于在 Steam 平台上架游戏的信息,请参见 Steamworks 开发者计划。

  1. 删除游戏可执行文件目录下的 steam_appid.txt,否则有可能会影响游戏登录 Steam 平台。

  2. 将 Player Network 控制台中 Steam 渠道的 AppID 修改为游戏的 App ID,AppKey 修改为 Steam 账号的 Steam Web API 密钥,Player Network SDK 才会正确拉起 Steam 登录。

  3. [可选] 完成 SDK 下载后在 Player Network 控制台内修改配置,修改不会同步到 INTLConfig.ini 文件中。若要确保游戏是从 Steam 客户端启动,可以在 INTLConfig.ini 配置好 STEAM_APPID 字段,详见 SteamAPI_RestartAppIfNecessary。
    配置该字段后启动游戏:

    • 如果游戏不是从 Steam 客户端安装的目录下启动,初始化 Steam 相关功能将会失败。
    • 如果 Steam 客户端没有启动,将会拉起 Steam 客户端,并跳转到游戏的相应页面。
    • 若登录时提示 "Please launch app by Steam Client",说明游戏不是从 Steam 客户端正常启动,可以删除STEAM_APPID 字段后重试。
[Steam]
STEAM_APPID = {INTL_STEAM_APP_ID}

替换 {INTL_STEAM_APP_ID} 为业务申请的 Steam app ID。