跳到主要内容

Windows

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

前提条件

注意

Steam Web API 的请求限制为每天 100,000 次。有关 Steam 请求限制的更多信息,请参见 Steam Web API 使用条款

调用 Steam 登录时,必须确保您的主机上已安装 Steam 客户端软件,并且您已登录 Steam。

  1. Steam 官方网站 申请开发者账号,设置游戏并获取游戏的 App ID。
  2. 获取 Player Network 控制台登录账号
  3. 为游戏创建新项目,或加入已有项目
  4. 下载 SDK
  5. 接入 SDK
  6. 在 Player Network 控制台添加 Steam 为业务的登录鉴权方式

步骤1:为 Steam 登录配置 SDK

注意

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

1. 创建 steam_appid.txt 文件

在游戏开发阶段,如果游戏尚未获准在 Steamworks 控制台发布,需要创建一个内容为 480steam_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_ENABLESTEAM_BROWSER_LOGIN_ENABLE 都设置成 1,则只有 STEAM_WEBVIEW_LOGIN_ENABLE 的配置生效,即使用 INTLWebView 进行 Steam 登录。
    • 如果 STEAM_WEBVIEW_LOGIN_ENABLESTEAM_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 修改为游戏本身的 AppID,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。