防沉迷接入指南
防沉迷接入指南
1. 基本概念
按照国家新闻出版署《关于防止未成年人沉迷网络游戏的通知》 和《切实防止未成年人沉迷网络游戏的通知》,各游戏出版运营企业均须在游戏内落实游戏实名认证和防沉迷新策略。《通知》中要求, 实行网络游戏账号实名注册制度,严格控制未成年人使用网络游戏时段时长,规范向未成年人提供付费服务等。
本文向开发者提供了“检查当前玩家能否继续游戏”,“检查玩家充值消费金额是否受限”和“上报玩家充值金额”功能,实现防沉迷需求。
根据国家相关规定,主要限制内容为:
- 周五、周六、周日及法定节假日 20 点 - 21 点之外为健康保护时段,未成年账号在该时段无法游玩;
- 未满8周岁:不提供付费服务;8-16周岁以下:单笔付费不超过50元,每个组织每月累计不超过200元;16-18周岁以下:单笔付费不超过100元,每个组织每月累计不超过400元。
3. 在 Unity 中接入 SDK
在接入 SDK 前,请确保在代码中引入了 Passport 的命名空间:
using Unity.Passport.Runtime;接入用户登录模块
外部账号系统登录
参考 「外部账号系统登录」 正确接入外部ID系统。 确保在调用 防沉迷 相关方法之前 已完成外部ID系统的接入
Passport登录
- 参考 「Passport 登录」 正确接入 Passport Login,确保在调用 防沉迷 相关方法之前 用户已经登录完成。
- 安装并初始化 Feature SDK
- 在 UOS Launcher 服务列表中,找到 Passport Feature, 点击 「Install SDK」,将服务 SDK 安装到当前项目中
- 初始化 Feature SDK
try { await PassportFeatureSDK.Initialize(); } catch (PassportException e) { Debug.Log($"failed to initialize sdk: {e.Message}"); throw; }
- 在 UOS Launcher 服务列表中,找到 Passport Feature, 点击 「Install SDK」,将服务 SDK 安装到当前项目中
1. 检查当前玩家能否继续游戏
var playable = await PassportFeatureSDK.AntiAddiction.CheckPlayable();返回示例
class CheckPlayableResponse
{
// 用户ID
public string UserId;
// 用户昵称
public string DisplayName;
// 用户类型:adult(成年人),minor(未成年人)
public string UserType;
// 是否在可游戏时间内
public bool Playable;
// 原因:游戏时间不受限制(成年人),允许游戏时间(未成年人且在可游戏时间内),非游戏时间(未成年人且不在可游戏时间内)
public string Reason;
// 剩余可游戏时间(单位为秒)
public uint RemainingTimeInSecond;
// 未成年人游玩时间规则提醒,若在可游戏时间内则会附上:今日游戏剩余时间;若非游戏时间则会附上:当前时间段无法游玩
public string Description;
}2. 检查玩家充值消费金额是否受限
var amount = 1000; //int类型,单位为分
var payable = await PassportFeatureSDK.AntiAddiction.CheckPayable(amount);返回示例
class CheckPayableResponse
{
// 用户ID
public string UserId;
// 用户昵称
public string DisplayName;
// 用户类型:adult(成年人),minor(未成年人)
public string UserType;
// 是否可充值
public bool Approved;
// 充值受限时,根据用户年龄区间返回国家对应相关规定
public string Reason;
// 未成年用户当前月份已经成功充值的总金额(单位为分)
public uint MonthlyConsumption;
// 用户年龄区间
public UserAgeGroup.Types.Enum AgeGroup;
// 不可充值原因类型
public PayableFailedType PayableFailedType;
// 该年龄段对应的单次充值上限,单位为分
public uint TimelyChargeLimit;
// 该年龄段对应的每月充值上限,单位为分
public uint MonthlyChargeLimit;
// 未成年用户当日已经成功充值的总金额,单位为分
public uint DailyConsumption;
}3. 上报玩家充值金额
var amount = 1000; //int类型,单位为分
var payment = await PassportFeatureSDK.AntiAddiction.SubmitPayment(amount);4. 附录
核心类和接口
namespace Unity.Passport.Runtime
{
public partial class PassportFeatureSDK
{
public class AntiAddiction
{
// 检查当前玩家能否继续游戏
// 建议在登录操作后调用
public static async Task<CheckPlayableResponse> CheckPlayable(){}
// 检查玩家充值消费金额是否受限
// 建议在充值之前调用
// amount: 金额数值, 单位为分
public static async Task<CheckPayableResponse> CheckPayable(uint amount){}
// 上报玩家充值金额
// 建议充值成功后调用
// amount: 金额数值, 单位为分
public static async Task<Empty> SubmitPayment(uint amount){}
}
}
}