Windows
本文旨在介绍如何设置 Steam 身份验证,让您的游戏可以使用 Player Network 登录鉴权服务通过 Steam 渠道登录。
前提条件
Steam Web API 的请求限制为每天 100,000 次。有关 Steam 请求限制的更多信息,请参见 Steam Web API 使用条款。
调用 Steam 登录时,必须确保您的主机上已安装 Steam 客户端软件,并且您已登录 Steam。
- 在 Steam 官方网站 申请开发者账号,设置游戏并获取游戏的 App ID。
- 获取 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
修改为游戏本身的AppID
,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。