본문으로 건너뛰기

Unreal Engine 멤버십

요구사항​

Platform SDK를 사용하기 위한 요구 사항은 아래와 같습니다.

  • OS : Windows
  • Enreal Engine : 5.2.1
  • Visual Studio 2022 Version 17.9.6
정보

플랫폼 SDK는 언리얼 플러그인으로 제공되고 있습니다.

연동 준비​

SDK 설치​

언리얼 엔진에서 Platform SDK를 사용하기 위해서는 배포된 플러그인을 프로젝트의 Plugins 복사합니다.

위험

UnrealStarter 샘플 프로젝트
플랫폼SDK 플러그인을 적용한 언리얼 샘플 프로젝트를 제공합니다.

UnrealStarter_x.x.x.zip 파일을 압축해제 한 후 UnrealStarter.uproject 파일을 사용하세요.
또는 UnrealStarter.uproject 파일을 이용해서 Visual Studio 프로젝트를 생성 후 visual studio 솔루션 파일을 통해 빌드 후 확인할 수 있습니다.

image-20240430-101116.png

Visual Studio에서 디버깅하기
프로젝트 속성 > Debugging > Command Arguments 를 아래와 같이 설정 한 후 빌드합니다.

"$(SolutionDir)UnrealStarter.uproject" -game

빌드 설정​

ProjectName.Build.cs 파일에 SDK 플러그인 모듈 사용을 추가합니다.

// HybePlatform Plugin 사용설정
PrivateDependencyModuleNames.AddRange(new string[] { "WebBrowser", "HybePlatform" });
정보

플랫폼 SDK는 다음 1개의 외부 라이브러리를 사용합니다.

  • Steamworks SDK


Binaries/Win64 폴더에 steam_api64.dll 이 위치해야 합니다.

스팀 설정​

스팀 연동D정보를 DefaultEngine.ini에 SteamAppId를설정한합니.

Config/DefaultEngine.ini
[HybeGamePlatform]
SteamAppId=스팀앱ID
정보

스팀 Overlay 지원

언리얼 에디터 모드에서 게임을 실행하는 경우 스팀 Overlay 가 지원되지 않습니다.

실행모드를 Standalone Game으로 설정 후 실행하세요.

API 연동​

API Flow​

  1. API 초기화
    1. SDK 설정 및 Steam App 계정 연동
  2. 플랫폼 로그인
    1. Steam
  3. 로그인 결과 이벤트 수신
  4. 게임 서버 접속
    1. 로그인 Verify Token 이용

플러그인 기본 구조​

  • HybePlatformAgent
    • 게임 플랫폼 메인 Agent.
    • Platform의 모든 기능을 통합해서 제공합니다.
  • HybePlatformAuthAgent
    • 인증(Auth) 연동 이벤트를 제공하는 클래스.
    • 게임 클라이언트에서 상속한 클래스를 제공해야 합니다.
  • HybePlatformWebviewAgent
    • 인증 과정에서 발생하는 웹뷰 이벤트를 제공하는 클래스
    • 게임 클라이언트에서 상속한 클래스를 제공해야 합니다.

초기화​

게임의 초기화 프로세스에서 플러그인 초기화를 수행합니다.

  • 플랫폼 Agent 등록
    • 플랫폼 이벤트 리스너 Agent 구현
      • HybePlatformAuthAgent 클래스를 상속받은 클래스 구현
    • 웹뷰 이벤트 리스너 Agent 구현
      • HybePlatformWebviewAgent 클래스를 상속받은 클래스 구현
  • 설정 정보 구성
  • Mount() 호출
  • 플랫폼 Agent 구현
    • HybePlatformAuthAgent 클래스를 상속 받은 클래스 구현
    • HybePlatformWebviewAgent 클래스를 상속 받은 클래스 구현
  • Webview 구현
    • 언리얼 Webview 플러그인 UWebBrowser 클래스를 상속 받은 클래스 구현
  • 설정 정보 구성
  • Mount() 호출

```cpp
//1. 게임플랫폼 플러그인에 Agent를 등록한다.
HybePlatformAgent::Instance().SetPlatformAuthAgent(NewObject<UStarterPlatformAuthAgent>());
HybePlatformAgent::Instance().SetPlatformWebviewAgent(NewObject<UStarterPlatformWebviewAgent>());

//2. 설정 정보와 함께 플랫폼 초기화를 시도한다.
std::string configJson = R"(\{
"BuildEnv": "qa",
"SteamAppID": 2691730,
"ProjectId": "1006",
"SteamIdentity": "ds-qa-10060021"
\})";

//3. 클라이언트에서 사용하는언어를 설정한다.
HybePlatformAgent::Instance().SetClientLanguage(TEXT("ko"));

//4. 플랫폼 SDK 초기화를 수행한다.
HybePlatformAgent::Instance().Mount(FString(configJson.c_str()));

#### HybePlatformAuthAgent

게임 클라이언트에서는 **`HybePlatformAuthAgent`** 클래스를 상속 받은 이벤트 리스너를 제공해야 합니다.

#### HybePlatformAuthAgent &#x20;

`HybePlatformAuthAgent` 클래스를 상속받은 이벤트 리스너를 제공해야 합니다.

```cpp
class HYBEPLATFORM_API HybePlatformAuthAgent
{
public:
virtual void OnLoginSuccess(const FString& resultJson);
virtual void OnLoginFailure(const FString& resultJson);
virtual void OnLogoutSuccess();
virtual void OnLogoutFailure(const FString& resultJson);
virtual void OnWithDraw();
virtual void OnMount(bool mounted);
virtual void OnRefreshVerifyToken(const FString& token);
};

HybePlatformWebviewAgent​

웹뷰가 필요할 때 호출되는 이벤트를 처리하는 HybePlatformWebviewAgent 를 상속받은 이벤트 리스너를 제공해야한다.

class HYBEPLATFORM_API HybePlatformWebviewAgent
{
public:
virtual void OnCloseWebview();
virtual void OnShowWebview(const FString& url);

void EvalMethod(const FString& actionJson, std::function<void(const FString&)> callback);
};

실행 환경 정보 구성​

플랫폼 초기화 함수(HybePlatformAgent::Mount)에 전달하는 실행 환경 JSON 정보는 다음과 같습니다.

플랫폼 초기화 함수(HybePlatformAgent::Mount)에 전달하는 실행 환경 JSON 정보는 다음과 같습니다.

{
"BuildEnv": "qa",
"SteamAppID": 00000000,
"ProjectId": "0000",
"SteamIdentity": "sample-qa-00000000"
}
Key설명예시
BuildEnv개발 환경qa, prod
SteamAppID기술PM에게 전달 받은 SteamAppID
ProjectId기술PM에게 전달 받은 ProjectID
SteamIdentity스팀 ID 토큰 (개발사에서 발급)

HybePlatformAgent​

게임 플랫폼의 서비스를 제공하는 메인 클래스로 게임 플랫폼이 제공하는모든 기능은 HybePlatformAgent를 통해서 제공됩니다.

Agent 등록​

플랫폼 인증 과정에서 발생하는 이벤트를 수신하기 위해서는 Agent를 제공해야 합니다.

HybePlatformAgent::SetPlatformAuthAgent​

HybePlatformAuthAgent을 상속받은 Agent 클래스를 등록합니다.

void SetPlatformAuthAgent(HybePlatformAuthAgent* authAgent)

파라미터

  • authAgent HybePlatformAuthAgent을 상속 받은 클래스 인스턴스

HybePlatformAgent::SetPlatformWebviewAgent​

HybePlatformAuthAgent을 상속받은 Agent 클래스를 등록합니다.

void SetPlatformWebviewAgent(HybePlatformWebviewAgent* webviewAgent)

파라미터

  • webviewAgentHybePlatformWebviewAgent을 상속 받은 클래스 인스턴스
Agent 등록 예
HybePlatformAgent::Instance().SetPlatformAuthAgent(new PlatformAuthAgent());
HybePlatformAgent::Instance().SetPlatformWebviewAgent(new UMyGamePlatformWebviewAgent());
정보

등록된 Agent는 플러그인에서 관리되며 클라이언트 종료 시 삭제됩니다.

1. 플러그인 초기화​

HybePlatformAgent::Mount​

플랫폼 SDK 플러그인 초기화를 수행합니다.

void HybePlatformAgent::Mount(const FString& configJson) const

파라미터

  • configJson 설정 정보를 담고있는 JSON 문자열

초기화 결과는 HybePlatformAuthAgent 를 상속 받은 Agent로 전달됩니다.

초기화 결과는 HybePlatformAuthAgent 상속받은 클래스의 OnMount 이벤트로 전달됩니다.

void UMyGamePlatformAuthAgent::OnMount(bool mounted)
{
UE_LOG(LogTemp, Warning, TEXT("Platform Mounted : %d"), mounted);
}

2. 로그인​

HybePlatformAgent::Login​

플랫폼 로그인을 수행합니다.

void HybePlatformAgent::Login(const FString& signinMethod) const

파라미터

  • signinMethod 로그인 종류 (STEAM, GOOGLE, APPLE)


스팀 계정을 이용한 플랫폼 로그인 예

HybePlatformAgent::Instance().Login(TEXT("STEAM"));

플랫폼 로그인(Signin)은 백그라운드에서 수행되고 등록한 HybePlatformAuthAgent로 결과 이벤트가 전달됩니다.

3. 로그인 취소​

HybePlatformAgent::CancelLogin​

플랫폼 로그인을 프로세스를 중단합니다.

정보

웹뷰를 이용한 서비스 이용 약관 동의 과정 등에서 사용 할 수 있습니다.
웹뷰에서 제공하는 닫기 버튼을 클릭한 경우 로그인 과정을 중단할 수 있습니다.

void CancelLogin()

4. 플랫폼 로그인 이벤트​

플랫폼 로그인은 백그라운드에서 수행되며 등록한 HybePlatformAuthAgent로 결과가 전달됩니다.

정보

백그라운드에서 호출되는 이벤트는 메인(게임) 스레드가 아니기 때문에
게임 오브젝트를 직접 호출하지 않도록 주의 해야 합니다.

HybePlatformAuthAgent::OnLoginSuccess​

플랫폼 로그인이 정상적으로 완료된 경우에 호출됩니다.

void OnLoginSuccess(const FString& resultJson)

파라미터

  • resultJson 로그인 결과 JSON
{
"imid": "LUDLJKU29PSYL5PMPJJM",
"loginVerifyToken": "eyJhbGciOiJIUzI1NiJ9.eyJpbUlkIjoiTFVETEpLVTI5"
}
Key설명
imid플랫폼 계정 ID
loginVerifyToken플랫폼 백엔드 인증에 사용되는 로그인 Token

HybePlatformAuthAgent::OnLoginFailure​

플랫폼 로그인이 실패한 경우에 호출됩니다.

void OnLoginFailure(const FString& resultJson)

파라미터

  • resultJson 로그인 실패 결과 JSON
{
"code": 2,
"message": "Unknown login error"
}

에러 코드는 다음과 같습니다.

enum class Code
{
UNKNOWN_ERROR = 0,
NO_INITIALIZE = 1,
SIGNIN_FAIL = 2, // Google/Apple Signin Fail
PLATFORM_LOGIN_FAIL = 3, // 플랫폼 로그인 실패
AUTO_LOGIN_FAIL = 4, // 자동 로그인 실패
WITHDRAW_ACCOUNT = 5, // 계정 탈퇴 회원
SIGNUP_FAIL = 6, // 회원가입 실패
};
정보

message는 개발 과정에서 참조 목적으로 제공되며 다국어를 지원하지 않기 때문에 유저에게 표시하는 용도로 사용하지 않습니다.

HybePlatformAuthAgent::OnLogoutSuccess​

경고

스팀 연동은 로그아웃을 지원하지 않습니다.

void OnLogoutSuccess()

HybePlatformAuthAgent::OnLogoutFailure​

플랫폼 로그아웃이 실패한 경우에 호출됩니다.

경고

스팀 연동은 로그아웃을 지원하지 않습니다.

void OnLogoutFailure(std::string resultJson)

PlatformAuthAgent::OnWithDraw​

계정 탈퇴 시 호출되는 이벤트입니다.

정보

향후 기능 추가 예정입니다.

OnRefreshVerifyToken(const FString& token)

HybePlatformAuthAgent::OnMount​

플랫폼 SDK 초기화 완료 시 호출됩니다.

void OnMount(bool mounted)

파라미터

  • mounted 초기화 결과

HybePlatformAuthAgent::OnRefreshVerifyToken​

게임서버 로그인에 필요한 인증 토큰 요청 시 호출됩니다 (게임서버인증연동 참고)

게임 클라이언트는 수신한 인증 토큰을 게임 서버에 전달해야 합니다.

void OnMount(bool mounted)

파라미터

  • mounted 초기화 결과

HybePlatformAuthAgent::OnWithDraw​

계정 탈퇴 시 호출되는 이벤트입니다.

정보

탈퇴한 유저는 더 이상 플레이되지 않도록 조치해야 합니다.

void OnWithDraw()

5. 게임 서버 인증 연동​

클라이언트는 게임 서버에 접속하기 위해서는 플랫폼 로그인 후 수신한 로그인 인증 토큰을 게임 서버에 전달하여야 합니다. 게임 서버는 수신한 인증 토큰을 플랫폼 백엔드를 통해 변조 여부를 검증 합니다.

HybePlatformAgent::RefreshVerifyTokenAsync​

게임 서버 로그인에 필요한 인증 토큰을 요청합니다.

백그라운드에서 수행되면 인증 토큰은 HybePlatformAuthAgent::OnRefreshVerifyToken() 이벤트로 전달 됩니다.

void RefreshVerifyToken()

파라미터

  • 없음
경고

로그인 성공 이벤트(OnLoginSuccess)에 인증 토큰(verifyToken) 과 유저 식별정보(IMID)가전달됩니다.

성공 이벤트에 전달되는 토큰을 게임 서버에 전달하는 것도 가능하지만 인증 토큰은 만료 시간을 가지고 있습니다. (1시간)

플랫폼 로그인과 게임 서버 접속이 분리되어 있는 경우 장시간 대기 중 게임서버에 접속하는 경우 인증 실패가 발생할 수 있습니다.
이러한 이유로, 게임 서버에 전달하는 인증 토큰은 반드시 RefreshVerifyToken()로 갱신한 후 사용해야 합니다.

정보

로그인 성공 이벤트(OnLoginSuccess)로 수신한 유저 식별정보(이하IMID)가 전달됩니다.
IMID는 개발 목적으로 제공되며, 인증토큰을 게임 서버에 전달 한 후 게임 서버로 부터 IMID를 수신하여 사용해야 합니다.

6. 회원 가입 웹뷰 연동​

경고

HybePlatform 플러그인은 UI를 제공하지 않습니다.
UI 가 필요한 경우 해당되는 이벤트를 클라이언트가 수신하도록 제공하며 이벤트를 수신한 클라이언트에 명세에 맞도록 UI를 노출시키고, 결과를 Platform 플러그인에게 제공해야 합니다.

게임 플랫폼 연동 과정에서 다양한 목적으로 유저에게 웹뷰를 팝업합니다 (다국어 지원)

  • 로그인 프로세스에서 신규 회원인 경우 서비스 이용 동의
  • 회원 탈퇴 요청
  • 구글/애플/이메일 로그인 (지원하는 서비스의 경우)

언리얼에서 제공하는 WebBrowser 플러그인을 활용하여 연동하는 방법 다음과 같습니다.

  1. Webview 플러그인 활성화

    1. Plugins > Webview 체크
  2. ProjectName.Build.cs 에서 WebBrowser 플러그인 모듈을 추가합니다.


    PrivateDependencyModuleNames.AddRange(new string[] { "WebBrowser" });
    PrivateDependencyModuleNames.AddRange(new string[] { "Slate", "SlateCore" });

  3. UWebBrower를 상속받을 C++ 클래스를 추가합니다.
    아래는 플랫폼 연동에 필요한 기능한 구현된 샘플 Webbrower 소스입니다.
    아래 메소드는 반드시 구현 되어야 합니다.
    - PostMessage : JavaScript → SDK 통신 시 호출되는 이벤트 핸들러
    - PrepareJsBridge : 웹뷰의 JavaScript 와 언리얼 통신 설정

    //UMyGameWebview.h
    UCLASS()
    class UMyGameWebview : public UWebBrowser
    {
    GENERATED_BODY()

    public:
    UFUNCTION(BlueprintCallable)
    void PostMessage(FString jsonResponse);
    void PrepareJsBridge();
    void ShowWebview(const FString& url);
    void CloseWebview();

    protected:
    virtual TSharedRef<SWidget> RebuildWidget() override;
    };


    // UMyGameWebview.cpp
    /**
    * @brief JavaScript -> Unreal 함수 호출을 처리하는 이벤트 핸들러
    * @param jsonMethod JSON 형태의 메소드 호출 포맷
    */
    void UMyGameWebview::PostMessage(FString jsonMethod)
    {
    HybePlatformAgent::Instance().GetWebviewAgent()->EvalMethod(jsonMethod, [this](const FString& resultJson) {
    if (resultJson.IsEmpty() == false)
    {
    FString js = FString::Printf(TEXT("window.unityEventHandler(%s);"), *resultJson);
    ExecuteJavascript(js);
    }
    });
    }

    /**
    * @brief 웹뷰(JavaScript)에서 언리얼 오브젝트를 호출하도록 설정한다.
    */
    void UMyGameWebview::PrepareJsBridge()
    {
    FString linkName = TEXT("webbridge");
    WebBrowserWidget->BindUObject(linkName, this, true); //true : URL이 변경되어도 계속 바이딩 유지
    }

    void UMyGameWebview::ShowWebview(const FString& url)
    {
    WebBrowserWidget->LoadURL(url);
    SetVisibility(ESlateVisibility::Visible);
    }

    void UMyGameWebview::CloseWebview()
    {
    SetVisibility(ESlateVisibility::Hidden);
    }
  4. HybePlatformWebviewAgent 상속 클래스에서 OnShowWebview(url) 이벤트 수신 시 웹 브라우저를 화면에 띄웁니다.

7. 계정 탈퇴​

HybePlatformAgent::Withdraw​

계정 탈퇴를 요청합니다.
계정 탈퇴는 웹뷰를 통해서 진행되며 완료 시 OnWithDraw 이벤트가 전달됩니다.

void Withdraw()

파라미터

  • 없음

8. 로그 연동​

게임 클라이언트는 플레이 과정에서 발생하는 유저의 행동 로그를 수집하여 전달해야 합니다.
전달하는 로그의 명세는 별도로 전달되는 로그 명세서를 참고하세요.

로그 전송 과정은 2 단계로 구분할 수 있습니다.

  • 로그 데이터 수집 : 로그 JSON 생성
  • 로그 전송

로그 데이터(JSON) 수집​

로그 JSON은 로그 명세서를 참고하여 직접 생성하거나, 플러그인에서 제공하는 기능을 사용할 수 있습니다.

  • LogneticAgent
    • 공통 로그 등록 및 로그 전송
  • LogneticEvent
    • 로그 JSON 생성
정보

LogneticEvent 로그 JSON을 생성하는 편의를 제공하고 있습니다.

각 프로젝트 별로 로그 JSON을 생성하는 별도의 기능이 있는 경우 사용하면 됩니다.

로그 속성 종류

로그 속성설명예
공통 속성모든 로그에 추가되는 공통 속성os_type
service_id
자동 생성 속성로그 JSON 생성시 현재 시간(UTC)으로 자동 추가(ISO8601)cre_time
클라이언트 생성 속성로그 명세서에 따른 클라이언트 로그log_type

아래 포맷의 JSON 로그를 생성하는 경우

{
"log_type": "LOGIN_COMP",
"os_type" : 1,
"service_id" : "10060000",
"external_device_type" : 0,
"external_device_id" : "b845158f4d599d791ca22790151cd473",
"cre_time" : "2024-06-13T08:02:27.014000Z"
}

공통 속성 등록

공통 속성은 1회 등록하면 LogneticEvent를 사용하는 경우 자동으로 JSON 생성 시 추가됩니다.

Lognetic().SetCommon(TEXT("os_type"), 1);
Lognetic().SetCommon(TEXT("service_id"), TEXT("10060000"));
Lognetic().SetCommon(TEXT("external_device_type"), 0);
Lognetic().SetCommon(TEXT("external_device_id"), FPlatformMisc::GetLoginId());

개별 속성 등록

LogneticEvent()
.Set(TEXT("log_type"), TEXT("LOGIN_COMP"))

로그 JSON 생성

JSON 생성 시 등록된 공통 속성과 생성 시간(cre_time) 속성이 자동으로 추가 됩니다.

FString logJson = LogneticEvent()
.Set(TEXT("log_type"), TEXT("LOGIN_COMP"))
.ToJson();

로그 JSON 생성 및 전송

Send() 메소드는 JSON을 생성 한 후 로그 서버로 전송을 수행합니다.

1개의 로그를 전송하는 경우에 사용합니다.

LogneticEvent()
.Set(TEXT("log_type"), TEXT("LOGIN_COMP"))
.Send();

중첩 구조 로그를 생성하는 경우

{
"log_type": "LOGOUT",
"os_type": 1,
"service_id": "10060000",
"external_device_type": 0,
"external_device_id": "b845158f4d599d791ca22790151cd473",
"cre_time": "2024-06-13T08:02:27.015000Z",
"online_play": {
"play_cnts": 5,
"play_details": [
{
"dungeon_type": "10",
"dungeon_id": "1",
"scale": 2
},
{
"dungeon_type": "20",
"dungeon_id": "2",
"scale": 5
}
]
}
}

AddObject() 메소드를 호출하여 하위 속성 이벤트 객체를 추가할 수 있습니다.

AddArray() 메소스를 호출하여 배열 속성을 추가할 수 있습니다.


```cpp
LogneticEvent logoutLog;
logoutLog.Set(TEXT("log_type"), TEXT("LOGOUT"));

auto& onlinePlay = logoutLog.AddObject(TEXT("online_play"));
onlinePlay.Set(TEXT("play_cnts"), 5);
onlinePlay.AddArray(TEXT("play_details")) // online_play/play_details[0]
.Set(TEXT("dungeon_type"), TEXT("10"))
.Set(TEXT("dungeon_id"), TEXT("1"))
.Set(TEXT("scale"), 2);
onlinePlay.AddArray(TEXT("play_details")) // online_play/play_details[1]
.Set(TEXT("dungeon_type"), TEXT("20"))
.Set(TEXT("dungeon_id"), TEXT("2"))
.Set(TEXT("scale"), 5);
logoutLog.Send();

#### JSON 로그 전송

1개 이상의 수집한 로그를 전송하는 기능을 제공합니다.

**단일 로그를 생성하면서 전송하는 경우**

LogneticEvent 사용

```cpp
LogneticEvent()
.Set(TEXT("log_type"), TEXT("LOGIN_COMP"))
.Send();

LogneticAgent 사용

FString logJson = LogneticEvent()
.Set(TEXT("log_type"), TEXT("LOGIN_COMP"))
.ToJson();
Lognetic().SendEvent(logJson)

1개 이상 로그를 전송하는 경우

FString logJson = LogneticEvent()
.Set(TEXT("log_type"), TEXT("LOGIN_COMP"))
.ToJson();
FString logJson2 = LogneticEvent()
.Set(TEXT("log_type"), TEXT("LOGOUT"))
.ToJson();
TArray<FString> logs = {logJson, logJson2};
Lognetic().SendEvent(logs)

LogneticEvent::Set​

속성을 추가합니다.

template<typename T>
LogneticEvent& Set(const FString& key, T value)

파라미터

  • key 속성명
  • value 속성 값. int, usingined int, int64_t, uint64_64, float, double, FString 지원

리턴

  • LogneticEvent 객체

LogneticEvent::AddObject​

하위 로그 이벤트 객체를 생성합니다. 지정된 키(key)에 하위를 등록합니다.

LogneticEvent& AddObject(const FString& key)

파라미터

  • key 하위 이벤트 키 값

리턴

  • 추가된 하위 이벤트 객체
LogneticEvent().Set(TEXT("log_type"), TEXT("LOGOUT"))
.AddObject(TEXT("online_play"))
.Set(TEXT("play_cnts"), 5)
.ToJson();
JSON 생성 결과
{
"log_type": "LOGOUT",
"cre_time": "2024-06-13T08:02:27.015000Z",
"online_play": {
"play_cnts": 5
}
}
경고

AddObject()는 새로 추가된 이벤트 객체를 리턴합니다.

체이닝(chaning) 형식으로 호출하는 경우 리턴된 이벤트에 속성이 추가됩니다.

2번 호출하는 경우 새로 추가된 이벤트의 하위 속성으로 추가되기 때문에 주의가 필요합니다.

LogneticEvent().Set(TEXT("log_type"), TEXT("LOGOUT"))
.AddObject(TEXT("online_play"))
.Set(TEXT("play_cnts"), 5)
.AddObject(TEXT("item_info")) //online_play 하위에 item_info가생성된다.
.Set(TEXT("type"), "bag")
.ToJson();
JSON 생성 결과
{
"log_type": "LOGOUT",
"cre_time": "2024-06-13T08:02:27.015000Z",
"online_play": {
"play_cnts": 5,
"item_info": {
"type": "bag"
}
}
}

동일 경로의 하위 이벤트를 추가하는 경우

LogneticEvent logoutLog;
logoutLog.Set(TEXT("log_type"), TEXT("LOGOUT"));

auto& onlinePlay = logoutLog.AddObject(TEXT("online_play"));
onlinePlay.Set(TEXT("play_cnts"), 5);
auto& itemInfo = logoutLog.AddObject(TEXT("item_info")); //루트에 생성된다.
itemInfo .Set(TEXT("type"), "bag");

logoutLog.ToJson();
JSON 생성 결과
{
"log_type": "LOGOUT",
"cre_time": "2024-06-13T08:02:27.015000Z",
"online_play": {
"play_cnts": 5,
},
"item_info": {
"type": "bag"
}
}

LogneticEvent::AddArray​

배열에 추가되는 로그 이벤트 객체를 생성합니다. 지정된 키(key)의 하위를 등록되며 지정된 키의 배열의 마지막 아이템으로 등록됩니다.

동일한 키(key) 로 호출할 때마다 배열에 새로운 이벤트 객체가 추가 됩니다.

LogneticEvent& LogneticEvent::AddArray(const FString& key)

파라미터

  • key 하위 이벤트 키 값

리턴

  • 추가된 하위 이벤트 객체
배열 1개 이벤트 추가
LogneticEvent log
log.Set(TEXT("log_type"), TEXT("LOGOUT"))
.AddArray(TEXT("play_details")) // online_play/play_details[0]
.Set(TEXT("dungeon_type"), TEXT("10"))
.Set(TEXT("scale"), 2);
log.ToJson().Send();
JSON 생성 결과
{
"log_type": "LOGOUT",
"play_details": [
{
"dungeon_type": "10",
"dungeon_id": "1",
"scale": 2
}
]
}
}

동일한 키(key)로 호출할 때마다 배열에 새로운 이벤트 객체가 추가 됩니다.

배열 2개 이벤트 추가
LogneticEvent log
log.Set(TEXT("log_type"), TEXT("LOGOUT"))
.AddArray(TEXT("play_details")) // online_play/play_details[0]
.Set(TEXT("dungeon_type"), TEXT("10"))
.Set(TEXT("scale"), 2);
log.AddArray(TEXT("play_details")) // online_play/play_details[1]
.Set(TEXT("dungeon_type"), TEXT("20"))
.Set(TEXT("scale"), 5);

log.ToJson().Send();
JSON 생성 결과
{
"log_type": "LOGOUT",
"play_details": [
{
"dungeon_type": "10",
"scale": 2
},
{
"dungeon_type": "20",
"scale": 5
}
]
}
}

LogneticEvent::Send​

로그를 서버에 전송합니다. 아래의 추가 작업을 수행합니다.

  • 공통 속성 추가
  • 로그 생성 시간 추가 (cre_time)
void Send()

등록된 속성을 JSON으로 변환 후에 로그 서버에 전송합니다.

파라미터

  • 없음

LogneticAgent::SendEvent​

JSON 로그를 서버에 전송합니다.

경고

LogneticEvent를 사용하지 않고, 로그 JSON을 직접 생성하는 경우에 사용할 수 있습니다.

void SendEvent(const FString& json)
void SendEvent(TArray<FString> jsons)

파라미터

  • json 전송할 json 로그
  • jsons 전송할 json 로그 배열
FString myLog = BuildCustomLog();
LogneticAgent::Instance().SendEvent(myLog); // 동일 Lognetic().SendEvent(myLog);
정보

1개 이상의 로그 전송이 필요한 경우.

로그 전송은 요청 시 마다 개별로 서버에 전송합니다.

여러 개의 로그를 한꺼번에 요청하는 것이 효과적입니다.

1개 이상 로그 전송하기
FString myLog = BuildCustomLog();
FString myLog2 = BuildCustomLog2();
FArray logs = {myLog, myLog2};
LogneticAgent::Instance().SendEvent(logs); // 동일 Lognetic().SendEvent(logs);

9. 기타​

HybePlatformAgent::SetClientLanguage​

게임 클라이언트에서 사용하는 언어를 SDK에 전달합니다.

지정된 언어 정보를 이용해서 플랫폼 연동 과정에서 출력되는 웹뷰의 다국어가 적용됩니다.

void SetClientLanguage(const FString& language)

파라미터

  • language ISO 639-1 언어코드( ko, en, ja, zh-tw).
    웹뷰에 보여지는 컨텐츠는 지원 국가 외에는 영문(en)으로 출력 됩니다.

HybePlatformAgent::GetLocationCode​

현재 사용자의 접속 국가 코드를 반환합니다

FString HybePlatformAgent::GetLocationCode()

리턴

  • ISO 3166-1 alpha-2 국가 코드, ex) KR, US

HybePlatformAgent::GetSteamInfo PC​

연동된 스팀 정보를 조회합니다. Mount 호출이 정상적으로 수행된 후에 사용할 수 있습니다.

HybePlatform::SteamInfo HybePlatformAgent::GetSteamInfo()

리턴

  • SteamInfo 객체
class SteamInfo
{
public:
UINT64 Id; // User ID
FString Language; // (결제)스팀 API 호출시 사용되는 언어코드(ISO 639-1)
FString Currency; // (결제)통화코드 ex) KRW, USD
INT AppBuildId; // 앱빌드ID
};

Troubleshooting​

플러그인 초기화 실패가 발생합니다.​

해결
steam_api64.dll 파일이 실행 폴더에 위치하는지 확인합니다. (가이드 참고)