본문으로 건너뛰기
버전: 1.10.x

Unity

New Version


Unity Plugin 기본 설명

해당 문서는 플러그인 방식을 사용하여 Unity 개발 환경에서 기존 SDK 적용 방식보다 보다 손쉽게 적용하는 방법을 제공하기 위하여 작성되었습니다.


iOS 요구 사항

  • Xcode15.X
  • AppGuard for iOS SDK v1.10.1.2 이상
  • AppGuard for Unity Plugin v1.1.1 이상

AppGuard Unity Plugin 폴더 구성

AppGuard for Unity Plugin v1.1.1 이상 버전은 아래와 같이 구성되어 있습니다.

  • Assets/AppGuard/ 폴더 구성

    폴더명파일명설명Platform
    EditorAssets/AppGuard/Editor/
    AppGuardPostProcessBuild.cs
    Unity에서 iOS용 Xcode Project 생성 시
    필수 환경 설정
    Only iOS
    PluginsAssets/AppGuard/Plugins/iOS/
    AppGuardClientUnityBride.mm, AppGuardCore.framework
    iOS Native ModuleOnly iOS
    ScriptAssets/AppGuard/Script/
    AppGuardUnityManager.cs, AppGuardSecureStream.cs
    Unity와 AppGuard Native간의 Communication 관리iOS/AOS

AppGuard for Unity Plguin v1.1.1 미만을 사용 하던 고객사 Migration 적용 전 기존의 적용한 Unity Plugins의 파일(AppGuardPostProcessBuild.cs, AppGuardSecureStream.cs, AppGuardClientUnityBride.mm)들을 미리 백업하기를 권장드립니다.
백업 완료 시 해당 파일들을 유니티 프로젝트에서 삭제 후 진행해주시길 바랍니다.


AppGuardPostProcessBuild.cs 설명

AppGuardPostProcessBuild.cs는 Unity Editor에서 제공하는 PostProcessBuild 기능을 사용하여 Unity에서 생성하는 Xcode Project에 아래의 기능을 수행합니다.

  • AppGuard SDK 구동에 필요한 빌드 환경파일 설정 작업
  • AppGuard SDK 구동에 필요한 환경파일 설정 작업
주의

AppGuardPostProcessBuild.cs 파일을 꼭 확인하시고, 고객사의 환경과 다른 경우 수정이 필요할 수 있습니다.


AppGuardCore.framework 설명

AppGuard 구동 및 기능을 사용할 수 있는 SDK 형식의 .framework입니다.
추가 사항으로 AppGuard for Unity Plugin v1.1.1 이상부터 AppGuard SDK 형식이 xcframework 에서 arm64 아키텍처의 framework 형식만을 지원하는 형태로 변경되었습니다.

주의

따라서, Simulator 지원되지 않으므로 주의 및 참고바랍니다.


AppGuardUnityManager.cs 설명

구성 파일인 Assets/AppGuard/Scripts/ AppGuardUnityManager.cs는 AppGuard Native Module과의 통신을 위한 모듈입니다.
해당 *.cs 파일 내의 존재하는 클래스명 및 메서드 명은 유지되어야 하며, 아래는 주요 Method에 대한 설명입니다. 아래 나열된 메서드를 수정 및 사용하실 수 있습니다.

Set 메서드

메서드설명
public void setUserId(string userid)보안 정책 위반 탐지 시 로그 서버로 전송함 사용자 식별자(UserID)를 설정합니다
public void setUniqueClientId(string uniqueId, long retryTimeSec = 180)서버 인증에 사용할 세션 유일 식별자를 설정합니다.

Callback 메서드

메서드설명
public void setAppGuardS2AuthCallback(Action<int, string> callback)AppGuard Native Module에서 수행한 서버인증 결과를 수신할 고객사의 callback method(Action<int, string> callback)를 설정합니다.
public void setAppGuardDetectCallback(Action<string> callback)AppGuard Native Module에서 수행한 보안 정책 위반 탐지 결과를 수신할 고객사의 callback method(Action< string> callback)를 설정합니다.
public void setUserId(string userid)보안 정책 위반 탐지 시 로그 서버로 전송할 사용자 식별자(UserID)를 설정합니다.
public void setUniqueClientId(string uniqueId, long retryTimeSec = 180)서버 인증에 사용할 세션 유일 식별자를 설정합니다.

Unity Project 적용 사항


AppGuard for Unity Plugin 다운로드 및 설정

AppGuard for Unity Plugin v1.1.1이상 버전을 설치하고, Unity에서 프로젝트를 구성하는 방법은 다음과 같습니다.

  1. AppGuard 매니저 서버에 접속하여 Download > Unity Pluings 를 선택하여 최신 버전으로 다운로드합니다.

  2. 다운로드된 AppGuardUnityPlugin.zip 파일을 압축해제 시 내부에 Assets 폴더가 존재합니다.

  3. 압축해제된 Assets 폴더 내 AppGuard/ 폴더를 Unity Project/Asset/ 경로 내에 복사합니다.


AppGuard Config 파일 다운로드 및 설정

  1. AppGuard 매니저 서버에 접속하여 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/AppGuard/Plugins/iOS/

AppGuard for Unity Plguin v1.1.1 미만을 사용하던 고객사 Migration 안내로는 기존 appguard, appguard106000, appguard.mf, appguard.crt파일은 Assets/AppGuard/Plugins/iOS/ 위치로 이동해주시길 바랍니다.


보안 정책 위반 탐지 관련 이벤트용 콜백 함수 등록 및 사용(필수)

보안 정책 위반 탐지관련 이벤트 통신을 위한 앱의 콜백 함수를 설정하기 위해 Unity 프로젝트의 첫번째 장면(Scene) 클래스의 Awake() 메서드에서 아래 샘플 코드와 같이 작업합니다. 빌드된 IPA를 AppGuard 매니저 웹 서비스를 통하여 앱서명을 수행한 상태일 경우 App 실행 시 보안 정책 위반 행위가 탐지될 때 아래 언급된 setAppGuardDetectCallback() 함수에 등록한 AppGuardDetectCallback() 콜백 함수로 이벤트가 전달됩니다.

AppGuard for Unity Plguin v1.1.1 미만을 사용 하던 고객사 Migration 안내로는 기존 AppGuardUnityManager의 onViolationCallback() 메소드에 추가하여 사용하던 코드는 보안 정책 탐지 결과 수신을 위해 새로 작성한 고객사의 callback method로 이동하여주시길 바랍니다.


아래 샘플 코드와 같이 사용자는 우선적으로 AppGuard 보안 탐지 및 등록을 위한 AppGuardDetectCallback() 함수를 구현합니다. 해당 AppGuardDetectCallback() 콜백 함수에서 보안 탐지 결과에 따른 처리할 수 있습니다.

Main.cs
public class testMain : MonoBehaviour
{
void Awake() {
//. AppGuard 보안 정책 위반 탐지관련 이벤트 통신을 위한 Callback Method를 설정합니다.
AppGuardUnityManager.Instance.setAppGuardDetectCallback((data) => {
bool killed = (int.Parse(data) > 0);

if(killed) {
//. 수신한 보안 정책 위반 탐지 값이 양수인 경우 앱을 종료 처리합니다.
int code = Mathf.Abs(int.Parse(data));
//. 이곳에 종료 메세지 처리를 위한 코드를 추가해줍니다.
}
});
}
}

또는 아래와 같이 보안 정책 탐지관련 이벤트 CallBack 메소드를 따로 구현 후 등록하는 방법도 가능함으로 참고바랍니다.

Main.cs
public class testMain : MonoBehaviour
{
void Awake() {
//. 보안 정책 탐지 결과를 수신할 Callback Method를 설정합니다.
//. AppGuard 초기화 함수 호출 전 보안 정책 탐지 결과 Callback 함수를 우선적으로 등록하는 것을 권장합니다.
AppGuardUnityManager.Instance.setAppGuardDetectCallback(AppGuardDetectCallback);
}

//. 보안 정책 탐지 결과를 수신할 Callback Method를 아래와 같이 작성합니다.
//. Callback Method의 명칭은 parammeter값을 유지한다면, 자유롭게 작성하셔도 무방합니다.
void AppGuardDetectCallback(string data) {
bool killed = (int.Parse(data) > 0);

if(killed) {
//. killed 값이 true인 경우 앱을 종료 처리합니다.
int code = Mathf.Abs(int.Parse(data));
//. 이곳에 종료 메세지 처리를 위한 코드를 추가해줍니다.
}
}
}
주의

실제 서비스 Release 시 샘플에 포함된 Debug.Log(“-Debug Message-“); 코드를 반드시 제거해 주시기 바랍니다.


서버인증 이벤트용 콜백 함수 등록 및 사용 (선택)

본 내용은 서버인증 사용시 필요한 내용이며, 서버인증 미사용 시 아래의 내용은 무관한 내용임을 알려드립니다.

빌드된 IPA를 AppGuard 매니저 웹 서비스를 통하여 앱서명을 수행한 상태일 경우 App 실행 시 서버인증 결과를 아래 언급된 setAppGuardS2AuthCallback() 함수에 등록한 AppGuardS2AuthCallback() 콜백 함수로 이벤트가 전달됩니다.

AppGuard for Unity Plguin v1.1.1 미만을 사용 하던 고객사 Migration 안내로는 기존 AppGuardUnityManager의 onS2AuthTryCallback() 메소드에 추가하여 사용하던 코드는 서버인증 결과 수신을 위해 새로 작성한 고객사의 callback method로 이동하여주시길 바랍니다.


아래 샘플 코드와 같이 사용자는 AppGuard 서버인증 및 등록을 위한 AppGuardS2AuthCallback() 함수를 구현합니다.
해당 AppGuardS2AuthCallback() 콜백 함수에서 서버인증 상태 결과에 따른 처리할 수 있습니다.

Main.cs
public class testMain : MonoBehaviour
{
void ExampleServerAuthRequest(string uniqueId) {
//. 서버인증 결과를 수신하기 위한 Callback Method를 설정합니다.
AppGuardUnityManager.Instance.setAppGuardS2AuthCallback((result, uniqueClientId) => {
switch (result) {
case AppGuardEventType.S2Auth.S2AUTH_RESULT_SUCCESS:
//. 서버 인증이 성공하였으며, 정상적으로 인증이 완료되었습니다.
Debug.Log ("[TESTMAIN] S2AUTH_RESULT_SUCCESS (UniqueID: " + uniqueClientId + ")");
break;

case AppGuardEventType.S2Auth.S2AUTH_RESULT_RETRY:
//. 서버 인증이 실패하였으며, 재인증을 시도할 것입니다.
//. 일시적인 클라이언트 네트워크 장애 또는 서버 장애일 수 있으며,
//. 해당 재시도는 내부 메커니즘에 따라 최대 3분동안 수행될 수 있습니다.
Debug.Log ("[TESTMAIN] S2AUTH_RESULT_RETRY");
break;

case AppGuardEventType.S2Auth.S2AUTH_RESULT_FAIL:
//. 서버 인증이 완전히 실패하였으며, 더 이상 서버 인증을 시도하지 않습니다.
Debug.Log ("[TESTMAIN] S2AUTH_RESULT_FAIL");
break;
}
});
//. 고객사의 서버인증용 아이디를 사용하여 서버인증을 수행합니다.
AppGuardUnityManager.Instance.setUniqueClientId(uniqueId,180);
}
}

또는 아래와 같이 서버인증 결과관련 이벤트 CallBack 메소드를 따로 구현 후 등록하는 방법도 가능함으로 참고바랍니다.

Main.cs
public class testMain : MonoBehaviour
{
void Awake() {
//. 서버인증 상태 결과를 수신할 Callback Method를 설정합니다.
//. AppGuard 초기화 함수 호출 전 서버인증 Callback 함수를 우선적으로 등록하는 것을 권장합니다.
AppGuardUnityManager.Instance.setAppGuardS2AuthCallback(AppGuardS2AuthCallback);
}

void AppGuardS2AuthCallback(int type, string id) {
switch (type) {
case AppGuardEventType.S2Auth.S2AUTH_RESULT_SUCCESS:
//. 서버 인증이 성공하였으며, 정상적으로 인증이 완료되었습니다.
Debug.Log ("[TESTMAIN] S2AUTH_RESULT_SUCCESS (UniqueID: " + id + ")");
break;

case AppGuardEventType.S2Auth.S2AUTH_RESULT_RETRY:
//. 서버 인증이 실패하였으며, 재인증을 시도할 것입니다.
//. 일시적인 클라이언트 네트워크 장애 또는 서버 장애일 수 있으며,
//. 해당 재시도는 내부 메커니즘에 따라 최대 3분동안 수행될 수 있습니다.
Debug.Log ("[TESTMAIN] S2AUTH_RESULT_RETRY");
break;

case AppGuardEventType.S2Auth.S2AUTH_RESULT_FAIL:
//. 서버 인증이 완전히 실패하였으며, 더 이상 서버 인증을 시도하지 않습니다.
Debug.Log ("[TESTMAIN] S2AUTH_RESULT_FAIL");
break;
}
}

void OnGUI () {
if (GUI.Button (new Rect (10,550,200,80), "Server Auth Test")) {
//. 서버인증 결과를 수신할 Callback Method를 설정합니다.
AppGuardUnityManager.Instance.setAppGuardS2AuthCallback(AppGuardS2AuthCallback);

//. 고객사의 게임서버에서 서버인증용 아이디를 수신합니다.
//. getReciveUniqueIdFromGameServer() method는 예제를 위해
//. 작성된 method이며, 실제 존재하는 method가 아닙니다.
string uniqueId = getReciveUniqueIdFromGameServer();

//. AppGuard for Unity Plugin의 서버인증 method를 호출하여 서버 인증을 수행합니다.
AppGuardUnityManager.Instance.setUniqueClientId(uniqueId, 180);
}
}
}
주의

실제 서비스 Release 시 샘플에 포함된 Debug.Log(“-Debug Message-“); 코드를 반드시 제거해 주시기 바랍니다.


서버 인증 시작하기

클라이언트에서 서버 인증을 시작하기 위해서는 아래 샘플 코드와 같이 서버에서 수신한 해당 사용자의 세션에 대한 Unique Client ID를 아래와 같은 메서드를 호출하여 사용할 수 있습니다.

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

setUniqueClientId() 함수의 첫번째 인자로 주어진 Formatted-Unique-Client-Id의 규칙 및 생성 방법은 [서버인증] 를 참고하여 주시기 바랍니다.

정보

여기까지 적용 작업 진행 완료하신 경우 iOS 플랫폼 빌드를 진행해주시길 바랍니다.


Xcode Project 확인 사항


AppGuard SDK 확인

  • Xcode Project를 열고, Xcode Project > TARGETS:UnityFramework > General > Frameworks and LibrariesAppGuardCore.xcframework 속성이 Do not Embded 로 설정되었는지 확인해주시길 바랍니다.
정보

Xcode Project에 AppGuardCore.xcframework를 정상 추가된 경우 최근 애플 정책 및 Xcode 15.x 호환 및 Privacy Manifests 적용을 위해 아래 [AppGuard SDK Privacy Manifests 적용] 사항을 참고하여 진행해주시길 바랍니다.


AppGuard SDK Privacy Manifests 적용

해당 가이드는 Privacy Manifests 적용을 위해서는 AppGuard SDK v1.10.1.2이상을 사용해야합니다.

AppGuardCore.framework의 모듈은 AppGuardCore.framework를 Link하는 TARGETS에 병합되고 배포됩니다.

Apple Privacy Manifests 관련한 PrivacyInfo.xcprivacyAppGuard SDK를 Link한 TARGETS의 PrivacyInfo.xcprivacy에 AppGuardCore.framework의 PrivacyInfo.xcprivacy 내용이 명시되어야 합니다.

정보

Unity Engine & Privacy Manifests

An Apple Unity application can contain multiple frameworks (eg Ads or Social SDKs). Each framework can contain a single Privacy Manifest file. Out of the box, Unity applications have a single framework for the Unity project, called UnityFramework. Multiple Privacy Manifest files coming from different plugins, packages integrated into your Unity project, or first-party (your Unity project) will have to be combined into a single Privacy Manifest file inside of Unity Framework. Future Unity versions will do this automatically, but Unity developers with projects stuck on older Unity versions will have to do this manually.

위 Unity Engine & Privacy Manifests 안내에 따라 Unity의 경우 UnityFramework.framework에서 자체적인 PrivacyInfo.xcprivacy 파일이 추가되어야 합니다.

AppGuard SDK의 PrivacyInfo.xcprivacy 의 내용이 UnityFramework.framework 내부의 PrivacyInfo.xcprivacy 에 병합되어야 합니다.

따라서, PrivacyInfo.xcprivacy에 AppGuardCore.framework 관련 내용이 명시하기 위해 아래 가이드를 참고하여 병합 작업을 수행하여 주시길 바랍니다.

  • AppGuard SDK를 Link한 TARGETS(ex:UnityFramework)에서 이미 사용 중인 PrivacyInfo.xcprivacy파일이 존재하는 경우

    • AppGuardCore.framework 내부의 PrivacyInfo.xcprivacy 파일의 내용과 기존의 사용 중인 PrivacyInfo.xcprivacy과 비교하여 누락된 부분을 확인합니다.
    • 누락된 부분을 찾은 경우 누락된 부분을 TARGETS에서 이미 사용중이신 PrivacyInfo.xcprivacy 파일에 추가 및 병합하여 주시기 바랍니다.
  • AppGuard SDK를 Link한 TARGETS(ex:UnityFramework)에서 PrivacyInfo.xcprivacy파일이 존재하지 않는 경우

    • AppGuardCore.framework 내부의 PrivacyInfo.xcprivacy 파일을 복사하여 Xcode Project 내 추가합니다.

    • 프로젝트를 열고 Project > TARGETS:UnityFramework > Build Phases > Copy Bundle Resources 를 차례로 선택하고, 하단의 추가[+] 버튼 클릭합니다.

    • [Choose items to add:] 창에서 하단의 [Add Other] 버튼을 클릭합니다.

    • 다음 화면으로 프로젝트 내부로 복사한 PrivacyInfo.xcprivacy 파일을 선택하고, [Open] 버튼을 클릭합니다.

    • [Choose options for adding these files:] 창에서 [Destination:Copy items if needed] "ON"으로 체크, [Added folders:Create groups] 으로 체크한 후, 우측 하단의 [Finish] 버튼을 클릭합니다.

    • 프로젝트 내 [Copy Bundle Resources]PrivacyInfo.xcprivacy 파일이 추가되었음을 확인할 수 있습니다.

AppGuard for iOS SDK v1.10.1.2 이상에서는 AppGuardCore.framework 명칭으로 배포되며, 해당 SDK는 static framework로 제작되고, 배포됩니다.

AppGuard for iOS SDK v1.10.1.2 이상에서는 Apple 요구한 Privacy Manifest에서 명시한 Required reason API 항목NSPrivacyAccessedAPICategoryUserDefaults 외 다른 API는 사용하지 않은 점 참고바랍니다.

static framewrok로 링크되는 타사의 SDK의 경우 AppGuard SDK와 마찬가지로 고객사의 PrivacyInfo.xcprivacy에 병합되는 작업이 필요할 수 있습니다.

여기까지 적용한 완료한 경우 AppGuard SDK 적용이 완료되었습니다.


Old Version


Unity Plugin 기본 설명

해당 문서는 플러그인 방식을 사용하여 Unity 개발 환경에서 기존 SDK 적용 방식보다 보다 손쉽게 적용하는 방법을 제공하기 위하여 작성되었습니다.


AppGuard for Unity Plugin 다운로드 및 설정

Unity Plugin을 설치하고, Unity에서 프로젝트를 구성하는 방법은 다음과 같습니다.

  1. AppGuard 매니저 서버에 접속하여 Download > Unity Pluings 를 선택하여 최신 버전으로 다운로드합니다.

  2. 다운로드된 AppGuardUnityPlugin.zip 파일을 압축해제 시 내부에 Assets 폴더가 존재합니다.

  3. 압축해제된 Assets 폴더 내 AppGuardPostProcessBuild.cs, AppGuardUnityManager.cs파일과 Plugins/ 폴더를 Project/Asset/ 경로 내에 복사합니다.

주의

만약 컴파일 시 Assets/ AppGuardUnityManager.cs 만 존재하고 /Assets/Plugins * 폴더가 복사되지 않을 경우 오류("Error: Symbol(s) not found for a architecture arm64")가 발생할 수 있음을 주의해야 합니다.


AppGuard Config 파일 다운로드 및 설정

  1. AppGuard 매니저 서버에 접속하여 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에 아래의 기능을 수행합니다.

  • AppGuard SDK 구동에 필요한 빌드 환경파일 설정 작업
  • AppGuard SDK 구동에 필요한 환경파일 설정 작업
  • Unity에서 선택한 Target SDK별 AppGuardCore.xcframework 링크 설정 작업

하지만, Unity에서 생성되는 Xcode Project의 경우 xcframewrok 포맷을 정상적으로 인식하지 못하는 상태입니다. 이는 Unity 자체에서 미지원되는 부분으로 판단됩니다.

이에 대한 대응 방안으로 잉카인터넷에서는 AppGuardPostProcessBuild.cs 파일을 통해 Unity에서 선택한 Target SDK에 따라 필요한 framework를 링크하는 기능을 제공하고 있습니다.

정보

AppGuard for iOS SDK v1.8.6 부터는 iOS용 SDK의 배포 방식이 기존 단일 framework 방식에서 다중 framework를 지원하는
xcframework 포맷으로 배포됩니다.

따라서, AppGuard for iOS SDK의 명칭이 AppGuardCore.framework에서 AppGuardCore.xcframework로 변경되었으며, AppGuardCore.xcframework는 Unity의 Device SDK와 Simulator SDK 빌드 및 실행을 모두 지원합니다.

xcframework는 다중 플랫폼 지원을 위한 framework 배포를 위해 애플에서 권장하는 포맷입니다.

AppGuard 1.8.6 버전 미만 및 Xcode 13.3.3 버전 미만 환경을 사용하는 고객사의 경우 AppGuardCore.xcframework/ios-arm64_armv7/ AppGuardCore.frameworkProject/Assets/Plugins/AppGuardCore.xcframework/ios-arm64/ 폴더로 복사하여 사용하시면 기존과 같은 방식으로 사용하실수 있습니다.

AppGuard 1.8.6 버전 이상 및 Xcode 13.3.3 버전 이상 환경을 사용하는 고객사의 경우 AppGuardCore.xcframework/ios-arm64/ AppGuardCore.framework를 사용하시면 기존과 같은 방식으로 사용하실수 있습니다.

주의

AppGuardPostProcessBuild.cs 파일을 꼭 확인하시고, 고객사의 환경과 다른 경우 수정이 필요할 수 있습니다.


AppGuardUnityManager.cs 설명

구성 파일인 Assets/ AppGuardUnityManager.cs는 AppGuard Native Module과의 통신을 위한 모듈입니다. 해당 *.cs 파일 내의 존재하는 클래스명 및 메서드 명은 유지되어야 하며, 아래는 주요 Method에 대한 설명입니다. 아래 나열된 메서드를 수정 및 사용하실 수 있습니다.

Set 메서드

메서드설명
public void setUserId(string userid)보안 정책 위반 탐지 시 로그 서버로 전송함 사용자 식별자(UserID)를 설정합니다
public void setUniqueClientId(string uniqueId, long retryTimeSec = 180)서버 인증에 사용할 세션 유일 식별자를 설정합니다.

Callback 메서드

구성 파일 및 폴더설명
public void onViolationCallback(string data)보안 정책 위반 탐지 관련 이벤트 Callback을 수신 받는 메서드로 보안 정책 위반 탐지 시 AppGuard는 해당 메소드를 호출하며 상태정보를 전달합니다.
public void onS2AuthTryCallback(string data)서버 인증 관련 이벤트 Callback을 수신 받는 메서드로 서버 인증이 진행되면 AppGuard는 해당 메소드를 호출하며 상태 정보를 전달합니다.
주의

AppGuardUnityManager.cs은 함께 추가로 배포되는 SDK 또는 Framework를 사용하는 방법에 대한 샘플을 제공합니다.


AppGuard SDK Unity Plugin 적용


AppGuard 초기화 함수 호출하기

AppGuard와 통신을 위한 앱의 콜백 함수를 AppGuard에 등록하기 위한 start() 메소드를 제공합니다.
해당 함수의 호출 시점은 앱 실행 시 가장 먼저 실행되는 시점에 적용하기 위하여
Unity 프로젝트의 첫번째 장면(Scene) 클래스의 Awake() 메서드에서 호출되어야 합니다.

아래 샘플 코드와 같이 Awake() 함수 내 AppGuardUnityManager.Instance.start()를 호출하여 적용할 수 있습니다.

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

onViolationCallback 콜백 수정하기

해당 *.cs 파일이 적용되고, 빌드된 IPA를 AppGuard 매니저 웹 서비스를 통하여 앱서명을 수행한 상태일 경우 App 실행 시 보안 정책 위반 행위가 탐지될 때 아래 언급된 Callback 메서드를 통하여 이벤트가 전달됩니다. 따라서, 콜백 메서드를 수정하여 이벤트 상태에 따른 행동을 정의할 수 있습니다. 하지만 기본적으로 보안 정책 위반에 따른 조치 사항을 AppGuard에 위임한 경우 해당 메서드를 아래와 같이 빈(Empty) 루틴으로 처리하시면 됩니다.

아래 샘플 코드와 같이 해당 data 인자 값이 양수를 가지면 설정된 정책 설정값에 따라 AppGuard는 약 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 샘플에는 AppGuard에서 정책 위반 탐지 시 로그 서버에 User ID를 함께 등록하기 위한 setUserId() 메소드를 제공합니다.

아래 샘플 코드와 같이 "userID" 부분에 실재 해당 세션의 사용자 ID를 string 형태의 데이터로 함께 호출하여 사용할 수 있습니다.

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

서버인증 이벤트용 콜백 함수 등록 및 사용 (선택)


본 내용은 서버인증 사용시 필요한 내용이며, 서버인증 미사용 시 아래의 내용은 무관한 내용임을 알려드립니다.

onS2AuthTryCallback 콜백 수정하기

해당 *.cs 파일이 적용되고, 빌드된 IPA를 AppGuard 매니저 웹 서비스를 통하여 앱서명을 수행한 상태일 경우 아래 언급된 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() 메서드를 호출하면 해당 시점부터 AppGuard 보안 모듈이 서버 인증을 시도하며, 위 샘플 코드에 예시된 것과 같이 3가지의 서버인증 상태를 콜백 메서드로 전달합니다.

주의

실제 서비스 Release 시 샘플에 포함된 Debug.Log(“-Debug Message-“); 코드를 반드시 제거해 주시기 바랍니다.


서버 인증 시작하기

클라이언트에서 서버 인증을 시작하기 위해서는 아래 샘플 코드와 같이 서버에서 수신한 해당 사용자의 세션에 대한 Unique Client ID를 아래와 같은 메서드를 호출하여 사용할 수 있습니다.

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

위 함수의 첫번째 인자로 주어진 Formatted-Unique-Client-Id의 규칙 및 생성 방법은 [서버인증] 를 참고하여 주시기 바랍니다.