Windows
本文旨在介绍如何设置 Steam 身份验证,让您的游戏可以使用 Player Network 登录鉴权服务通过 Steam 渠道登录。
玩家必须在设备上安装 Steam 客户端并登录 Steam 账号,才能通过 Steam 登录您的 Windows 游戏。
前提条件
1. 在 Steam 官方网站上配置 Steam 应用
1. 注册 Steamworks 开发者账号
-
当您首次注册为 Steamworks 开发者时,需要完成一系列数字文档。其中一个步骤包括支付 Steam Direct 费用。您可以根据所在的国家/地区,使用 Steam 支持的任何付款方式进行支付。
付款过程将在 Steam 商店完成,之后您将返回 Steamworks 网站继续填写其他文档。有关更多信息,请参考 准备进行 Steamworks 注册。
-
登录 Steamworks。
2. 创建 Steam 应用
-
登录 Steamworks 后,点击主页面上的 View Dashboard,进入 Dashboard 页面。
-
确保您有足够的应用额度 (App Credit),然后点击 Create new app...。
-
参考 Steam 应用程序 填写游戏的基本信息。
-
点击 Create Now,并在弹窗中确认应用已成功创建。
3. 获取 App ID
4. 获取 Steam Web API 密钥
-
登录 Steam Web API 密钥 页面。
-
填写 域名名称,可以根据业务网站或游戏服务器的域名填写。
-
点击 注册,并在弹窗中确认密钥已成功创建。
-
在成功创建密钥后,可通过 Steam Web API 密钥 页面获取密钥。
- 获取 Player Network 控制台登录账号。
- 为游戏创建新项目,或加入已有项目。
- 下载 SDK。
- 接入 SDK。
- 在 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 新增支持使用系统浏览器进行登录。
- Player Network SDK 1.16 及之后版本
- Player Network SDK 1.16 之前版本
-
如果游戏要上架 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 客户端进行登录。
- 如果
Player Network SDK 需要调用 Steam 客户端进行身份验证。因此,用户在执行 Player Network SDK 身份验证之前必须打开登录 Steam 应用程序。
若游戏登录 Steam 账号时提示 "SteamAPI_Init failed. Please check your Steam client status",请检查 Steam 客户端是否已启动并登录。
步骤2:添加 Steam 登录
-
注册登录相关回调。
- 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
INTLAPI.Login(INTLChannel.Steam);
UINTLSDKAPI::Login(EINTLLoginChannel::kChannelSteam);
-
登录 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"}
-
与游戏后台同步客户端身份验证状态,等待最终验证结果。
步骤3:验收登录功能
在 Player Network SDK 日志中搜索关键字 "AuthResult" 确认渠道名称和 OpenID 是否正确返回。如果正确,则表明集成配置成功,登录功能已成功添加。
如果接入过程中遇到问题,请参见 常见问题。
步骤4:发行游戏
更多关于在 Steam 平台上架游戏的信息,请参见 Steamworks 开发者计划。
-
删除游戏可执行文件目录下的
steam_appid.txt
,否则有可能会影响游戏登录 Steam 平台。 -
将 Player Network 控制台中 Steam 渠道的
AppID
修改为游戏的 App ID,AppKey
修改为 Steam 账号的 Steam Web API 密钥,Player Network SDK 才会正确拉起 Steam 登录。 -
[可选] 完成 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。