PS5
本文旨在介绍如何设置 PS5 身份验证,让您的游戏可以使用 Player Network 登录鉴权服务通过 PS5 渠道登录。
PS5 的开发一般不面向个人开发者,需要通过公司的商务联系 Sony 开通 PS5 开发权限。
前提条件
1. 在 PlayStation5 DevNet 设置游戏
申请 Client ID 和 Client Secret
成为开发者后,需要在 PlayStation5 DevNet 注册相应的游戏应用。
-
在 PlayStation5 DevNet,点击页面上方的 Titles > Titles and products 打开 Titles and Products 页面。
-
点击页面左上角的 New product。
-
在 Add a new product 弹窗,输入基本产品信息。
说明选择 App Server 为 Product 类型。
-
点击 Add Product 以添加一个新产品。
Add a New Service 页面将在产品添加成功后显示。 -
由于 Player Network SDK 使用 refresh token 进行 PS5 token 的刷新,在 Client ID 服务配置页面勾选 use refresh token 选项。
-
点击 Confirm Client ID configuration。
客户端 ID 服务配置页面被刷新以确认客户端 ID 信息。 -
点击 Request Client ID 完成新产品注册过程。
Sony 需要时间才能创建产品。在后端进程完成后,将显示注册产品的页面。 -
点击 Download Client Secret 下载产品的
Client Secret
。将Client ID
和Client Key
发给 Player Network 后台配置。
[可选] 开通 DUID
DUID(Device Unique ID)是标识 PS5 设备与登录用户无关的唯一 ID。使用 DUID 需要开通权限,游戏需手动提客单申请开通:
https://game.develop.playstation.net/support/newissue/gdtg-tokyo
从 Player Network SDK V1.22 开始,Player Network 支持获取 DUID。若游戏已开通 DUID 权限,可以通过 GetDeviceInfo
接口获取DUID。
步骤1:为 PS5 登录配置 SDK
在 INTLConfig.ini 文件中配置 PS5_CLIENT_ID
字段,填写 PlayStation5 DevNet 中申请到的 Client ID
。
Player Network SDK 默认会获取 DUID,如果游戏无需使用 DUID 可以通过修改 INTL_PS5_DUID_ENABLE
字段关闭。更多详情,请参见 开通 DUID。
[INTL PS5]
PS5_CLIENT_ID = {INTL_PS5_CLIENT_ID}
INTL_PS5_DUID_ENABLE = 0 //1: 启用 DUID,0: 禁用 DUID
步骤2:添加 PS5 登录
PS5 账号服务
PS5 系统软件允许多个用户同时登录系统,并允许轻松创建多人游戏。PlayStation 根据游戏人数将游戏分为三种,主要包括本地单人登录的游戏、本地多人登录的游戏和本地登录人数大于游戏手柄需要用户轮流玩的游戏。
对于本地单人登录的游戏,游戏就无需处理复杂的 PS 账号登录流程,可以将启动游戏的初始用户标识为当前游戏的登录用户。如果用户想切换其账号以登录游戏,则需要将当前账号注销并重新启动游戏应用程序。
当前 Player Network SDK 仅支持本地单人游戏。
权限字段
PS5 的游戏登录会调用 Login
或 Player Network SDK 的 LoginWithMappedChannel
接口。游戏登录时需要在权限字段中填写获取玩家信息的 scope
。scope
表示服务器可以获取玩家信息的范围。
scope
建议使用 psn:s2s openid id_token:psn.basic_claims
。
PS5 配置
为了保证 Player Network SDK 功能正常,需要在 param.json
进行如下设置:
-
由于 Player Network SDK 支持单人玩家登录,请确保打开
InitialUserAlwaysLoggedIn
标志。 -
由于使用下载数据区保存数据,因此需要设置
downloadDataSize
至少为 1MB。
获取 PS5 体系内的用户 ID
成功登录后,Unity 的 INTLAuthResult 和 UE 的 FINTLAuthResult 数据结构中包含 ChannelInfo
会有提供 userId
。
"{\"code\":\"v3.g21b1B\",\"issuerId\":1,\"userId\":281231663,\"map_info\":{\"sacc_uid\":\"56908591234\",\"sacc_token\":\"3RY3JXA2nT9gJlsi5J8S7SKklLQ@1U_ILn1234563ejYPBzH1o81OYAJNXsgVSSZCkwYjl_m1nOF6ZwfUzHalw==\",\"sacc_account_plat_type\":25},\"access_token\":\"d6013ba2-679c-4f21-99ca-3b57123456b4\",\"uid\":\"4574198251123456590\",\"expire_ts\":1637329774,\"refresh_token\":\"7470a803-51a1-4120-ad29-e488c2111199\"}"
-
注册登录相关回调。
- 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();