メインコンテンツまでスキップ
バージョン: 1.10.x

Unity

Unity Plugin基本説明


この文書はプラグイン方式を使用してUnity開発の環境で既存SDK適用方式よりより簡単に適用できる方法を提供するために作成されました。


Pluginダウンロード及び設置

Unity Pluginを設置して、Unityからプロジェクトを構成する方法は以下になります。

  1. GameGuard for Mobile マネージャーサーバに接続して Download > Unity Pluings を選択、最新バージョンをダウンロードします。

  2. ダウンロードされた AppGuardUnityPlugin.zipファイルを圧縮解除すれば内部に Assets フォルダーが存在し、
    内部のAppGuardPostProcessBuild.csAppGuardUnityManager.csファイルと /Plugins フォルダーを Project/Asset/ 経路の中にコピーします。

注意

もしコンパイルの際 Assets/ AppGuardUnityManager.cs のみ存在して /Assets/Plugins/ * フォルダーがコピーされない場合、 エラー("Error: Symbol(s) not found for a architecture arm64")が発生される可能性がありますのでご注意ください。


GameGuard for Mobile Config ファイルダウンロード及び設定

  1. GameGuard for Mobileマネージャーサーバに接続して Applying Security > ダウンロード> CHAPTER 2. nProtect AppGuard CONFIGファイルダウンロード> CONFIG FILE DOWNLOAD を選択してダウンロードします。

  2. ダウンロードされたConfigファイルを圧縮解除すればAppGuard Configファイルはappguard, appguard.crt, appguard.mf, appguard106000 4つのファイルで構成されています。

  3. 上記の4つのファイルを以下の経路にコピーします。
    Copy To : Project/Assets/


AppGuardPostProcessBuild.cs 説明

AppGuardPostProcessBuild.csは Unity Editorから提供するPostProcessBuild機能を使用してUnityから生成されるXcode Projectで以下の機能を遂行します。

  • GameGuard for Mobile SDK駆動に必要なビルド環境ファイルの設定作業
  • GameGuard for Mobile SDK駆動に必要な環境ファイルの設定作業
  • Unityから選択されたTarget SDK別 AppGuardCore.xcframework リンク設定作業

但し、Unityから生成されるXcode Projectの場合xcframewrokフォーマットを正常に認識していない状態です。 これはUnity自体からサポートされていない部分と判断されます。

これに対する対応策として、インカインターネットではAppGuardPostProcessBuild.csファイルを通じてUnityで選択したTargetSDKによって必要なframeworkをリンクする機能を提供しています。

注記

GaneGuard for Mobile for iOS SDK v1.8.6 からはiOS用SDKの配信方式が既存単一frameworkから多重frameworkをサポートする
xcframework フォーマットに配信されます。

従って、GameGuard for Mobile for iOS SDKの名称がAppGuardCore.frameworkから AppGuardCore.xcframeworkに変更され、 AppGuardCore.xcframeworkはUnityの Device SDKと Simulator SDKのビルド及び実行を全てサポートします。

ヒント

xcframework は多重プラットフォーム支援のためのframework配信のためにアップルが推奨するフォーマットです。

GameGuard for Mobile 1.8.6 バージョン未満及びXcode 13.3.3バージョン未満の環境を使用するお客様の場合 AppGuardCore.xcframework/ios-arm64_armv7/ AppGuardCore.frameworkProject/Assets/Plugins/AppGuardCore.xcframework/ios-arm64/ フォルダーにコピーして使用すれば既存と同じ方式で使うことができます。

GameGuard for Mobile 1.8.6 バージョン以上及び Xcode 13.3.3 バージョン以上の環境を使用するお客様の場合 AppGuardCore.xcframework/ios-arm64/ AppGuardCore.frameworkを使用すれば既存と同じ方式で使うことができます。

注意

AppGuardPostProcessBuild.csファイルを確認して、お客様の環境と異なる場合は修正が必要になる場合があります。


AppGuardUnityManager.cs 説明

構成ファイルの Assets/ フォルダーの AppGuardUnityManager.csはサーバ認証のためのUnity Pluginサンプルで、 該当 *.cs ファイル内の存在されるクラス名及びメソッド名は維持される必要があり、 以下のメソッドを使用若しくは修正して使用できます。


Setメソッド

メソッド説明
public void setUserId(string userid)セキュリティー政策為犯検知時ログサーバーに転送すユーザー識別子
(UserID)を設定します。
public void setUniqueClientId(string uniqueId, long retryTimeSec = 180)サーバー認証に使用するセッションの唯一の識別子を設定します。

Callbackメソッド

構成ファイル及びフォルダー説明
public void onViolationCallback(string data)セキュリティー政策為犯検関連のイベントCallbackを受けるメソッドでセキュリティー政策違反が
検知時、GameGuard for Mobileは該当メソッドを呼び出しして状態情報を転送します。
public void onS2AuthTryCallback(string data)サーバ認証関連イベントのCallbackを受けるメソッドでサーバ認証が進行される場合
GameGuard for Mobileは該当メソッドを呼び出しして状態情報を転送します。
注意

AppGuardUnityManager.cs はともに追加配信されるSDK又はFrameworkを使用する方法に対しるサンプルを提供します。


GameGuard for Mobile SDK Unity Plugin適用


GameGuard for Mobile初期化関数の呼び出し

GameGuard for Mobile と通信のためのアプリのコールバック関数をGameGuard for Mobileに登録するためのstart()メソッドを提供します。 該当関数の呼び出し時点は、アプリ実行時に一番最初に実行される時点に適用するために、 Unityプロジェクトの最初の場面(Scene)クラスの```Awake()````メソッドで呼び出しされなければなりません。

以下のサンプルコードのようにAwake() 関数内AppGuardUnityManager.Instance.start()を呼び出して適用ができます。

Main.cs
void Awake() {
AppGuardUnityManager.Instance.start();
}

onViolationCallback コールバック修正

該当*.csファイルが適用され、ビルドされたIPAをGameGuard for Mobile マネージャーWEBサービスを通じてApp署名を遂行した状態の場合、 App実行の際セキュリティー政策違反行為が検知されると、以下のCallbackメソッドを通じてイベントが転送されます。 従って、コールバックメソッドを修正してイベント状態による行動が定義できます。 但し、基本的にセキュリティポリシー違反による措置事項をGameGuard for Mobileに委任した場合、該当メソッドを以下のように空いた(Empty)ルーチンで処理してください。

以下のサンプルコードのように、当該data因子値が正数である場合、設定されたポリシーの設定値に従ってGameGuard for Mobileは約30秒後に強制終了を行い、 ユーザーにアプリが終了されるというメッセージをその位置から露出するコードがonViolationCallback()メソッド内に実装して使用することができます。

AppGuardUnityManager.cs
public void onViolationCallback(string data) {
bool killed = (int.Parse(data) > 0);

if (killed) {
int code = Mathf.Abs(int.Parse(data));
switch (code) {
case AppGuardEventType.Detect.DETECT_RUNNING_BAD_APPLICATION:
Debug.Log("DETECT_RUNNING_BAD_APPLICATION");
break;
default:
Debug.Log ("ViolationCallback: " + data);
break;
}
}
}
注意

実際サービスのReleaseの際はサンプルに含まれた Debug.Log(“-Debug Message-“); コードを必ず除去 してください。


UserID 設定

AppGuardUnityManager.cs サンプルには、GameGuard for Mobileでポリシー違反を検出した場合、ログサーバにUSER IDを一緒に登録するためのsetUserId()メソッドを提供します。

以下のサンプルコードのように"userID"部分に実際該当セッションのユーザーIDをstring 形のデータで一緒に呼び出して使用できます。

Main.cs
AppGuardUnityManager.Instance.setUserId("userID");

サーバー認証の適用(選択)


本内容はサーバ認証を使用する際必要な内容で、サーバ認証を使用しない場合は以下の内容は無視しても大丈夫です。

onS2AuthTryCallback コールバック修正

該当 *.cs ファイルが適用され、ビルドされたIPAをGameGuard for Mobile マネージャーWEBサービスを通じてApp署名を行った状態である場合 以下のCallbackメソッドを通じてサーバ認証の動作イベントが転送されます。 従って、コールバックメソッドを修正してイベント状態による行動を定義することができます。

以下のサンプルコードのようにサーバー認証状態の結果をonS2AuthTryCallback()コールバックメソッドを通じて確認できます。

AppGuardUnityManager.cs
public void onS2AuthTryCallback(string data) {
// サーバー認証の状態による特別処置事項
string[] args = data.Split(',');

switch (int.Parse(args[0])) {
case AppGuardEventType.S2Auth.S2AUTH_RESULT_SUCCESS:
/*
サーバー認証が成功され、正常に認証が完了されました。
*/
Debug.Log ("S2AUTH_RESULT_SUCCESS(UniqueID: " + args[1] + ")");
break;

case AppGuardEventType.S2Auth.S2AUTH_RESULT_RETRY:
/*
サーバー認証に失敗され、再認証を試みます。
一時的なクライアントのネットワーク障害又はサーバー障害の可能性があり、
この再試行は内部メカニズムによって最大3分間実行する場合があります。
*/
Debug.Log ("S2AUTH_RESULT_RETRY");
break;

case AppGuardEventType.S2Auth.S2AUTH_RESULT_FAIL:
/*
サーバー認証が完全に失敗せれ、これ以上サーバー認証を試みません。
*/
Debug.Log ("S2AUTH_RESULT_FAIL");
break;
}
}
ヒント

サーバー認証の状態による特別な処置事項がない場合は、該当メソッドを以下のように空いた(Empty)ルーチンに処理してください。 以下の [AppGuardUnityManager.csのサーバー認証の開始] 説明のように AppGuardUnityManager.Instance() の呼び出しを通じて生成されたオブジェクトから setUniqueClientId() メソッドを呼び出せば該当時点からGameGuard for Mobileのセキュリティーモジュールがサーバー認証を試み、上記のサンプルコードのように三つのサーバー認証状態をコールバックメソッドで転送します。

注意

実際サービスReleaseの際はサンプルに含まれた Debug.Log(“-Debug Message-“);コードを必ず除去 してください。


サーバー認証の開始

クライアントからサーバー認証を始まるためには以下のサンプルコードのようにサーバーから受けた該当ユーザーのセッションに対する Unique Client ID を以下のようなメソッドを呼び出して使用できます。

AppGuardUnityManager.cs
AppGuardUnityManager.Instance.setUniqueClientId("Formatted-Unique-Client-Id", 180);
ヒント

上記の関数の最初の因子として与えられたFormatted-Unique-Client-Idの規則及び生成方法は [サーバー認証] を参照してください。