正版校验
正版校验用于确认当前玩家是否在 IGP 平台上合法持有这款游戏。建议尽早接入启动流程,避免玩家进入主要玩法后才处理失败结果。
| 引擎 | 状态 | 说明 |
|---|---|---|
| Unity | Preview | 通过 IGPRuntimeManager 自动接入桌面客户端授权流程。 |
| GameMaker | Preview | 通过 Windows runtime 和本机桌面客户端完成授权。 |
| Godot | 暂未暴露独立入口 | 当前 Godot 侧主要覆盖启动票据、房间和成就,尚未提供独立正版校验 API。 |
- 已完成 启动与连接。
- 已配置 IGP 分配的
appId。 - 本机 IGP 桌面客户端可用。
- 需要验证正式游戏时,后台授权配置必须和当前
appId对齐。
Unity 项目通常只需配置 appId,运行时会处理授权流程。业务侧主要监听状态变化;如果授权失败,IGPRuntimeManager 会通过 onAuthorizationFailed / onError 暴露失败,并默认显示 SDK 自带的保底提示层。
using UnityEngine;using IGP.UnitySDK;
public sealed class IGPAuthorizationView : MonoBehaviour{ [SerializeField] private IGPRuntimeManager runtimeManager;
private void OnEnable() { runtimeManager.onAuthorizationStateChanged.AddListener(OnAuthorizationChanged); runtimeManager.onAuthorizationFailed.AddListener(OnAuthorizationFailed); }
private void OnDisable() { runtimeManager.onAuthorizationStateChanged.RemoveListener(OnAuthorizationChanged); runtimeManager.onAuthorizationFailed.RemoveListener(OnAuthorizationFailed); }
private void OnAuthorizationChanged(IGPAuthorizationState state) { Debug.Log($"IGP authorization: {state}");
if (runtimeManager.IsAuthorized) { // 允许进入主菜单或继续游戏。 } }
private void OnAuthorizationFailed(string message) { Debug.LogError($"IGP authorization failed: {message}"); }}默认失败提示可以在 IGPConfig 里改文案,也可以完全关掉后自己接管:
igpConfig.authorizationFailureFallbackTitle = "无法启动游戏";igpConfig.authorizationFailureFallbackMessage = "当前无法确认你的游戏访问权限。";igpConfig.authorizationFailureFallbackHint = "请打开 IGP Desktop,重新登录后再试。";igpConfig.authorizationFailureFallbackButtonText = "关闭";igpConfig.showAuthorizationFailureFallback = false;runtimeManager.onAuthorizationFailed.AddListener(message =>{ // 在这里打开你自己的弹窗、遮罩、跳转或退出逻辑。});如果默认提示已经显示,也可以手动收起:
runtimeManager.DismissAuthorizationFailureFallback();如需完成最小验证,请先执行 Unity Quick Start。
GameMaker 侧需要先初始化 runtime,再在每帧更新并读取授权状态。
// Createglobal.igp_app_id = YOUR_APP_ID;igp_init(global.igp_app_id, { desktop_auto_attach: true});// Stepigp_update();
var state = igp_get_authorization_state();if (state == "authorized_online" || state == "authorized_offline"){ // 允许进入游戏。}
var evt = igp_poll_event();while (!is_undefined(evt)){ if (evt.type == "authorization_state_changed") { show_debug_message("IGP authorization: " + string(evt.state)); }
evt = igp_poll_event();}完整接入顺序见 GameMaker Quick Start。
Godot 当前没有独立正版校验入口。开发中版本可以从命令行读取启动票据并进入联机流程,但不应将其视为正式的正版校验 API。
| 引擎 | 检查点 |
|---|---|
| Unity | 监听到 AuthorizedOnline 或 AuthorizedOffline,失败时能看到失败原因。 |
| GameMaker | igp_get_authorization_state() 从 pending 进入 authorized_online、authorized_offline 或 failed。 |
| Godot | 当前不做独立正版校验验收。 |
常见问题 / 排查
Section titled “常见问题 / 排查”- 授权持续处于
pending:先确认桌面客户端连接是否已成功。 - 授权失败但连接正常:检查
appId和后台配置是否匹配。 - Unity Editor 中验证桌面能力失败:按 Unity 调试 配置 Editor 调试项。
- GameMaker 没有事件:确认每帧调用了
igp_update(),并持续轮询igp_poll_event()。