実名認証とアンチアディクション
実名認証とアンチアディクションは、現在のプレイヤーがプレイを継続できるか、またプラットフォームから返された状態に基づいて制限、通知、終了などを行う必要があるかをゲームが判断するためのものです。SDK は状態のみを提供します。ポップアップ、セーブ、終了、アカウント切り替えなどの判断はゲーム側で行います。
IGP は 2 つの処理方式をサポートしています。プラットフォーム側で起動前にブロックする方式と、ゲーム内でログインと実名認証を進める方式です。ユーザーをゲーム内に留めたい場合は「ゲーム内実名認証」方式を推奨します。ゲームは SDK に認証入口を要求し、ゲーム内 WebView で開きます。未ログインの場合は同じ WebView 内で IGP ログインまたは登録を行い、ログイン後に未認証であればそのまま実名情報入力へ進みます。ゲームは WebView とコールバックのみを扱い、認証情報、実名、身分証番号を受け取りません。
- 起動ブロック: ゲーム起動前に、プラットフォーム側で実名認証とアンチアディクション判定を完了したい場合に使います。開発者コンソールでこの方式を選択すると、条件を満たさないユーザーはゲームに入る前にブロックされるため、通常はゲーム側で実名認証 WebView を開く必要はありません。
- ゲーム内実名認証: ユーザーをゲーム内に留めたまま、ログイン、登録、実名認証を完了したい場合に使います。ゲームは起動後に状態を読み取り、認証が必要な場合は SDK から認証入口を取得してゲーム内 WebView で開き、完了コールバック後に状態を更新します。
処理方式はプロジェクトごとに開発者コンソールで 1 つ選択してください。同じリリース内で互いに矛盾する 2 つのブロックフローを設計しないでください。下のコード例は主に「ゲーム内実名認証」方式向けです。「起動ブロック」方式を使う場合、ゲーム側では正常起動後の状態読み取りと通知が中心になり、実名認証 WebView はゲーム側で開きません。
サポートしているエンジン
Section titled “サポートしているエンジン”| エンジン | 状態 | 説明 |
|---|---|---|
| Unity | Preview | 任意のコンプライアンスモジュールで状態を読み取り、変化を監視し、ゲーム内実名認証フローを扱います。 |
| GameMaker | Preview | GameMaker 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() {}}GameMaker では、直近のローカル状態を読み取ることも、状態を明示的に更新することもできます。現在の GameMaker 版ではゲーム内実名認証 WebView 入口を提供していないため、「起動ブロック」方式での状態読み取りと通知に適しています。
// Step またはボタン操作var status = igp_refresh_anti_addiction_status(global.igp_app_id);
if (!is_undefined(status) && !status.canPlayNow){ show_debug_message("IGP anti-addiction blocked: " + string(status.reasonMessage));}状態変化はイベントキューからも受け取れます。
var evt = igp_poll_event();while (!is_undefined(evt)){ if (evt.type == "anti_addiction_state_changed") { var status = evt.anti_addiction_status; show_debug_message("IGP anti-addiction: " + string(status.state)); }
evt = igp_poll_event();}Godot は現在、実名認証とアンチアディクション入口をサポートしていません。
セルフテスト
Section titled “セルフテスト”| エンジン | 確認項目 |
|---|---|
| Unity | 起動ブロック方式では、条件を満たさないユーザーがゲームのメインフローに入らない。ゲーム内実名認証方式では、必要時にゲーム内 WebView で認証入口を開き、完了後に状態を更新できる。 |
| GameMaker | anti_addiction_status を読み取れ、更新後に anti_addiction_state_changed を受け取れる。起動ブロック方式では、条件を満たさないユーザーがゲームのメインフローに入らないことを確認する。 |
| Godot | 現時点では実名認証とアンチアディクションの検証は行いません。 |
よくある問題
Section titled “よくある問題”- Unity で
IGPComplianceが見つからない: 実名認証とアンチアディクションモジュールパッケージがインストールされているか確認してください。 - 状態が空、またはデフォルトのまま: まず IGP デスクトップクライアント接続が成功しているか確認してください。
- ユーザーをゲーム外へ出したくない場合: SDK が返す
urlはシステムブラウザーではなく、ゲーム内 WebView で開いてください。 - ブロック状態を受け取った: 返された理由に基づいてゲーム側で処理してください。SDK 層にハードコードされた回避ロジックを入れないでください。
- GameMaker で状態変化イベントがない:
igp_update()を呼び、イベントキューをポーリングしているか確認してください。