Unreal Engine
Unreal Plugin 基本説明
この文書はプラグイン方式を使用してUnreal Engine 4, 5の開発環境で既存のSDK適用方式より簡単に適用できる方法を提供するために作成されました。
Plugin ダウンロード及び設置
Unreal Pluginを設置して、Unreal Engine 4, 5でプロジェクトを構成する方法は以下のようになります。
-
GameGuard for Mobile マネージャーサーバーに接続して Download > Unreal Pluings を選択して最新バージョンをダウンロードします。
-
ダウンロードされた
AppGuardUnrealPlugin.zipファイルの内 /AppGuardSDK フォルダが存在、該当 AppGuardSDK フォルダを Project/Plugins/ 経路内にコピーします。 -
Project/Source/ProjectName/ 経路内の
APPNAME.Build.csファイルを開けて 以下のように"AppGuardSDK"を追加してUnrealプロジェクト内GameGuard for Mobile SDK が設置できます。
PublicDependencyModuleNames.AddRange(new string[]
{
"Core", "CoreUObject", "Engine", "InputCore", "AppGuardSDK"
});
GameGuard for Mobile Config ファイルダウンロード及び設定
-
GameGuard for Mobileマネージャーサーバーに接続して Applying Security > ダウンロード > CHAPTER 2. nProtect GameGuard for Mobile CONFIG ファイルダウンロード > CONFIG FILE DOWNLOAD を選択してダウンロードします。
-
ダウンロードされた Config ファイルを圧縮解除時GameGuard for Mobile Config ファイルは
appguard,appguard.crt,appguard.mf,appguard1060004つのファイルに構成されています。 -
上記の4つのファイルを以下の経路にコピーします。
Copy To : Project/Binaries/IOS/Payload/APPNAME.app/
Unreal EditorでまだIOSビルドが行われていない場合、 Project/Binaries/IOS フォルダーが存在しないことがあります。 この場合、IOSビルドを一回行った上、上記の作業を遂行してください。
AppGuardSDK Unreal Plugin適用
Delegateにコールバック登録及びGameGuard for Mobile初期化関数を呼び出 し
App実行時にセキュリティポリシー違反行為が検出された場合、Callbackを通じてイベントを受けるには、Delegateにコールバックを登録する必要があります。
また、GameGuard for Mobile初期化作業のためには、UAppGuardSDKBlueprintLibrary::Start(); 関数を必ず呼び出さなければなりません。
この時、該当関数の呼び出し時点は、アプリ実行時に最初に実行される時点 に適用する必要があります。
#include “AppGuardSDKPlugin.h”
#include “AppGuardSDKBlueprintLibrary.h”
void ASampleProjectGameMode::InitGame(const FString& MapName, const FString& Options, FString& ErrorMessage) {
//. セキュリティ 検知用のコールバック関数登録
FAppGuardSDKModule::OnDetected.AddUObject(this, &ASampleProject::OnDetected); // コールバック登録
//. サーバー認証用コールバック関数登録
FAppGuardSDKModule::OnS2AuthCompleted.AddUObject(this, &ASampleProject::OnS2AuthCompleted);
//. AppGuardCore.framework 使用のための GameGuard for Mobile初期化
UAppGuardSDKBlueprintLibrary::Start();
}
/* キュリティ検知用のコールバック関数サンプル */
void ASampleProjectGameMode::OnDetected (int data) {
bool killed = data > 0;
int code = data > 0 ? data : data * -1;
/*Dataの値が正数の場合、GameGuard for Mobileは30秒後に終了処理されます。
以下のサンプルコードを使用して、ユーザーに表示される画面に出力するようにする必要があります。
*/
if (killed) {
//. 終了通知ウィンドウを表示して、ゲームが終了されることをユーザーに通知します。
//. 終了通知ウィンドウは確認ボタンをクリック解きアプリが終了されるように構成する必要があります。
}
}
/* サーバー認証用のコールバック関数サンプル */
void ASampleProjectGameMode::OnS2AuthCompleted (int value, FString data) {
//. サーバー認証用のコールバック関数の具現部分は [サーバー認証の適用] 段階を参照
}
実際サービスのRelease時、上記の セキュリティ検知用のコールバック関数とサーバー認証洋のコールバック関数内のローグ出力関数を必ず除去してください。
UserID 設定
政策違反見地の際ローグサーバーにUser IDを転送するための SetUserId() メソッドを提供します。
以下のサンプルコードのように、 userID 部分に実際の当該セッションのユーザIDを FString 形式のデータで転送して使用することができます。
#include “AppGuardSDKPlugin.h”
#include “AppGuardSDKBlueprintLibrary.h”
UAppGuardSDKBlueprintLibrary::SetUserId(TEXT("userID"));
サーバー認証の適用(選択)
本採用はサーバー認証の使用時必要な内容で、サーバー認証を使用しない場合は以下の内容は無関係です。
サーバー認証用のコールバック関数の具現
サーバー認証関連のコールバックは Delegateにコールバック登録及びGameGuard for Mobile初期化関数を呼び出し 部分で作成された OnS2AuthCompleted() コールバックメソッドを通じてサーバー認証動作イベントが転送されます。
以下のサンプルコードのようにサーバー認証状態の結果を OnS2AuthCompleted() コールバックメソッドを通じて確認できます。
#include “AppGuardSDKPlugin.h”
#include “AppGuardSDKBlueprintLibrary.h”
// サ ーバー認証用のコールバック関数サンプル
void ASampleProjectGameMode::OnS2AuthCompleted (int value, FString data)
{
switch (value)
{
case AppGuardEventType::S2Auth::S2AUTH_RESULT_SUCCESS:
/*
サーバー認証に成功され、正常に認証が完了されました。
*/
break;
case AppGuardEventType::S2Auth::S2AUTH_RESULT_RETRY:
/*
サーバー認証が失敗し、再認証を試みます。 一時的なクライアントネットワーク障害またはサーバー障害の可能性があり、
該当再試行は内部メカニズムによって最大3分間実行されることができます。
*/
break;
case AppGuardEventType::S2Auth::S2AUTH_RESULT_FAIL:
/*
サーバー認証に完全に失敗され、これ以上のサーバー認証を試みません。
*/
break;
}
}
以下の サーバー認証開始 説明のように UAppGuardSDKBlueprintLibrary::SetUniqueClientId() メソッドを呼び出せば
該当時点からGameGuard for Mobileセキュリティーモジュールがサーバー認証を試みして、上記のサンプルコードに例示されたように、3つの状態コードをコールバック メソッドで転送します。
実際サービスReleaseの際は上記の サーバー認証用のコールバック関数内ローグ出力関数を必ず消去 してください。
サーバー認証開始
クライアントからサーバー認証を始まるためには以下のサンプルコードのようにサーバーで受信沙汰該当ユーザーのセッションに対する UniqueClientID を以下のようなメソッドを使って使用できます。
#include “AppGuardSDKPlugin.h”
#include “AppGuardSDKBlueprintLibrary.h”
UAppGuardSDKBlueprintLibrary::SetUniqueClientId(TEXT("Formatted-Unique-Client-Id", 180));
上記関数の最初の因子として与えられた Formatted-Unique-Client-Id の規則及び生成方法は [主要API] を参考にしてください。