跳转到内容

实名认证与防沉迷

实名认证与防沉迷用于让游戏判断当前玩家是否可以继续游玩,以及是否需要根据平台返回状态执行限制、提示或退出。SDK 只提供状态,不代替游戏决定弹窗、存档、退出或切换账号流程。

IGP 支持两种处理方式:由平台在启动前拦截,或由游戏在游戏内处理登录与实名流程。希望用户不跳出游戏时,推荐使用“游戏内实名”方式:游戏调用 SDK 申请认证入口,在游戏内 WebView 打开;用户未登录时先完成 IGP 登录或注册,登录后如果尚未实名,页面会继续进入实名信息填写。游戏只承载 WebView 和处理回调,不接触用户身份凭证、姓名或身份证号。

  • 启动拦截:适用于希望平台在游戏启动前完成实名与防沉迷判断的项目。在开发者后台选择该方式后,不符合条件的用户会在进入游戏前被拦截,游戏通常不需要主动打开实名 WebView。
  • 游戏内实名:适用于希望用户留在游戏内完成登录、注册和实名的项目。游戏启动后读取状态;需要实名时调用 SDK 获取认证入口,在游戏内 WebView 打开;收到完成回调后刷新状态。

两种方式应在开发者后台按项目选择,不建议在同一版本中同时设计两套互相冲突的拦截流程。下方代码示例主要面向“游戏内实名”方式;如果项目选择“启动拦截”,游戏侧重点是正常启动后的状态读取和提示,不再自行拉起实名 WebView。

引擎状态说明
UnityPreview通过可选实名认证与防沉迷模块读取状态、监听变化,并处理游戏内实名流程。
GameMakerPreviewGameMaker Windows 版已提供当前状态、刷新和事件队列,适合配合启动拦截或状态展示。
Godot暂不支持当前 Godot 侧未提供实名认证与防沉迷入口。
  • 已完成 启动与连接
  • 本机 IGP 桌面客户端可用。
  • IGP 开发者后台已开启实名认证与防沉迷,并选择“启动拦截”或“游戏内实名”。
  • Unity 项目需要额外安装 cn.indiegp.sdk.unity.compliance
  • 游戏需要自行处理不可玩状态,例如提示、返回主菜单或退出。

Unity 需要在主包外额外安装 cn.indiegp.sdk.unity.compliance。下面示例面向“游戏内实名”方式;如果项目选择“启动拦截”,通常只需要保留状态刷新和阻断提示逻辑。

using UnityEngine;
using IGP.UnitySDK;
using IGP.UnitySDK.Compliance;
public sealed class IGPComplianceDriver : MonoBehaviour
{
[SerializeField] private IGPRuntimeManager runtimeManager;
private System.IDisposable subscription;
private void OnEnable()
{
subscription = IGPCompliance.SubscribeAntiAddictionEvents(
runtimeManager,
HandleComplianceEvent);
}
private void OnDisable()
{
subscription?.Dispose();
}
public async void Refresh()
{
var ev = await IGPCompliance.RefreshAntiAddictionEventAsync(runtimeManager);
HandleComplianceEvent(ev);
}
public async void OpenAccountVerification()
{
var webSession = await runtimeManager.CreateAntiAddictionRealNameWebSessionAsync();
OpenGameWebView(webSession.url);
}
public async void OnWebViewNavigation(string url)
{
if (!url.StartsWith("igp://anti-addiction/real-name-complete"))
{
return;
}
CloseGameWebView();
var ev = await IGPCompliance.RefreshAntiAddictionEventAsync(runtimeManager);
HandleComplianceEvent(ev);
}
private void HandleComplianceEvent(IGPAntiAddictionComplianceEvent ev)
{
if (ev.action == IGPAntiAddictionComplianceActions.Block)
{
// 根据 ev.reasonMessage 展示提示,或回到主菜单。
}
}
private void OpenGameWebView(string url) {}
private void CloseGameWebView() {}
}
引擎检查点
Unity启动拦截方式下,不符合条件的用户不会进入游戏主流程;游戏内实名方式下,未实名时能在游戏内 WebView 打开认证入口,完成后刷新状态。
GameMaker能读取 anti_addiction_status,刷新后能收到 anti_addiction_state_changed;如使用启动拦截方式,需要确认不符合条件的用户不会进入游戏主流程。
Godot当前不做实名认证与防沉迷验收。
  • Unity 找不到 IGPCompliance:确认已安装实名认证与防沉迷模块包。
  • 状态为空或保持默认值:先确认 IGP 桌面客户端是否连接成功。
  • 用户不应跳出游戏:使用游戏内 WebView 打开 SDK 返回的 url,不要直接交给系统浏览器。
  • 收到阻断状态:游戏应按返回原因处理,不要在 SDK 层硬编码放行逻辑。
  • GameMaker 没有状态变化事件:确认调用了 igp_update() 并轮询事件队列。