Game > Gamebase > Unreal SDK 사용 가이드 > ETC

Additional Features

Gamebase에서 지원하는 부가 기능을 설명합니다.

Device Language

  • 단말기에 설정된 언어 코드를 리턴합니다.
  • 여러 개의 언어가 등록된 경우, 우선권이 가장 높은 언어만을 리턴합니다.

API

Supported Platforms UNREAL_IOS UNREAL_ANDROID

FString GetDeviceLanguageCode() const;

Display Language

  • Gamebase에서 제공하는 UI 및 SystemDialog에 표시되는 언어를 단말기에 설정된 언어가 아닌 다른 언어로 변경할 수 있습니다.
  • Gamebase는 클라이언트에 포함되어 있는 메시지를 표시하거나 서버에서 받은 메시지를 표시합니다.
  • DisplayLanguage를 설정하면 사용자가 설정한 언어코드(ISO-639)에 적합한 언어로 메시지를 표시합니다.
  • 원하는 언어셋을 추가할 수 있습니다. 추가할 수 있는 언어코드는 다음과 같습니다.

[참고]

Gamebase의 클라이언트 메시지는 영어(en), 한글(ko), 일본어(ja)만 포함합니다.

Gamebase에서 지원하는 언어코드의 종류

Code Name
de German
en English
es Spanish
fi Finish
fr French
id Indonesian
it Italian
ja Japanese
ko Korean
pt Portuguese
ru Russian
th Thai
vi Vietnamese
ms Malay
zh-CN Chinese-Simplified
zh-TW Chinese-Traditional

해당 언어코드는 GamebaseDisplayLanguageCode 클래스에 정의되어 있습니다.

[주의]

Gamebase에서 지원하는 언어코드는 대소문자를 구분합니다. 'EN'이나 'zh-cn'과 같이 설정하면 문제가 발생할 수 있습니다.

namespace GamebaseDisplayLanguageCode
{
    static const FString German(TEXT("de"));
    static const FString English(TEXT("en"));
    static const FString Spanish(TEXT("es"));
    static const FString Finish(TEXT("fi"));
    static const FString French(TEXT("fr"));
    static const FString Indonesian(TEXT("id"));
    static const FString Italian(TEXT("it"));
    static const FString Japanese(TEXT("ja"));
    static const FString Korean(TEXT("ko"));
    static const FString Portuguese(TEXT("pt"));
    static const FString Russian(TEXT("ru"));
    static const FString Thai(TEXT("th"));
    static const FString Vietnamese(TEXT("vi"));
    static const FString Malay(TEXT("ms"));
    static const FString Chinese_Simplified(TEXT("zh-CN"));
    static const FString Chinese_Traditional(TEXT("zh-TW"));
}

Gamebase 초기화 시 Display Language 설정

Gamebase 초기화 시 Display Language를 설정할 수 있습니다.

API

Supported Platforms UNREAL_IOS UNREAL_ANDROID

void Initialize(const FGamebaseConfiguration& configuration, const FGamebaseLaunchingInfoDelegate& onCallback);

Example

void Sample::Initialize(const FString& appID, const FString& appVersion)
{
    FGamebaseConfiguration configuration;
    ...
    configuration.displayLanguageCode = displayLanguage;
    ...

    IGamebase::Get().Initialize(configuration, FGamebaseLaunchingInfoDelegate::CreateLambda([=](const FGamebaseLaunchingInfo* launchingInfo, const FGamebaseError* error)
    {
        if (Gamebase::IsSuccess(error))
        {
            UE_LOG(GamebaseTestResults, Display, TEXT("Initialize succeeded."));
            FString displayLanguage = IGamebase::Get().GetDisplayLanguageCode();
        }
        else
        {
            UE_LOG(GamebaseTestResults, Display, TEXT("Initialize failed."));
        }
    }));
}

Set Display Language

Gamebase 초기화 시 입력된 Display Language를 변경할 수 있습니다.

API

Supported Platforms UNREAL_IOS UNREAL_ANDROID

void SetDisplayLanguageCode(const FString& languageCode);

Example

void Sample::SetDisplayLanguageCode(cosnt FString& displayLanguage)
{
    FString displayLanguage = IGamebase::Get().SetDisplayLanguageCode(displayLanguage);
}

Get Display Language

현재 적용된 Display Language를 조회할 수 있습니다.

API

Supported Platforms UNREAL_IOS UNREAL_ANDROID

FString GetDisplayLanguageCode() const;

Example

void Sample::GetDisplayLanguageCode()
{
    FString displayLanguage = IGamebase::Get().GetDisplayLanguageCode();
}

신규 언어셋 추가

Unreal Android, iOS 플랫폼에서의 신규 언어셋 추가 방법은 아래 가이드를 참고하십시오.

Display Language 우선순위

초기화 및 SetDisplayLanguageCode API를 통해 Display Language를 설정할 경우, 최종 적용되는 Display Language는 입력한 값과 다르게 적용될 수 있습니다.

  1. 입력된 languageCode가 localizedstring.json 파일에 정의되어 있는지 확인합니다.
  2. Gamebase 초기화 시, 단말기에 설정된 언어코드가 localizedstring.json 파일에 정의되어 있는지 확인합니다.(이 값은 초기화 이후, 단말기에 설정된 언어를 변경하더라도 유지됩니다.)
  3. Display Language의 기본값인 en이 자동으로 설정됩니다.

Country Code

  • Gamebase는 System의 국가 코드를 다음과 같은 API로 제공하고 있습니다.
  • 각 API 마다 특징이 있으니 쓰임새에 맞는 API를 선택하시기 바랍니다.

USIM Country Code

  • USIM에 기록된 국가 코드를 리턴합니다.
  • USIM에 잘못된 국가 코드가 기록되어 있다 하더라도 추가적인 확인 없이 그대로 리턴합니다.
  • 값이 비어 있는 경우 'ZZ'를 리턴합니다.

API

Supported Platforms UNREAL_IOS UNREAL_ANDROID

FString GetCountryCodeOfUSIM() const;

Device Country Code

  • OS로부터 전달받은 단말기 국가 코드를 추가적인 확인 없이 그대로 리턴합니다.
  • 단말기 국가 코드는 '언어' 설정에 따라 OS가 자동으로 결정합니다.
  • 여러 개의 언어가 등록된 경우, 우선권이 가장 높은 언어로 국가 코드를 결정합니다.
  • 값이 비어 있는 경우 'ZZ'를 리턴합니다.

API

Supported Platforms UNREAL_IOS UNREAL_ANDROID

FString GetCountryCodeOfDevice() const;

Intergrated Country Code

  • USIM, 단말기 언어 설정의 순서로 국가 코드를 확인하여 리턴합니다.
  • GetCountryCode API는 다음 순서로 동작합니다.
    1. USIM에 기록된 국가 코드를 확인하고, 값이 존재한다면 추가적인 확인 없이 그대로 리턴합니다.
    2. USIM 국가 코드가 빈 값이라면 단말기 국가 코드를 확인하고, 값이 존재한다면 추가 확인 없이 그대로 리턴합니다.
    3. USIM, 단말기 국가 코드가 모두 빈 값이라면 'ZZ' 를 리턴합니다.

observer

API

UNREAL_IOS UNREAL_ANDROID

FString GetCountryCode() const;

Server Push

  • Gamebase 서버에서 클라이언트 단말기로 보내는 Server Push Message를 처리할 수 있습니다.
  • Gamebase 클라이언트에서 ServerPushEvent Listener를 추가하면 해당 메시지를 사용자가 받아서 처리할 수 있으며, 추가된 ServerPushEvent Listener를 삭제할 수 있습니다.

Server Push Type

현재 Gamebase에서 지원하는 Server Push Type은 다음과 같습니다.

  • GamebaseServerPushType::AppKickout (= "appKickout")
    • TOAST Gamebase 콘솔의 Operation > Kickout 에서 킥아웃 ServerPush 메시지를 등록하면 Gamebase와 연결된 모든 클라이언트에서 APP_KICKOUT 메시지를 받게 됩니다.

observer

Add ServerPushEvent

Gamebase Client에 ServerPushEvent를 등록하여 Gamebase Console 및 Gamebase 서버에서 발급된 Push 이벤트를 처리할 수 있습니다

API

Supported Platforms UNREAL_IOS UNREAL_ANDROID

FDelegateHandle AddServerPushEvent(const FGamebaseServerPushDelegate::FDelegate& event);

Example

void Sample::AddServerPushEvent()
{
    FDelegateHandle handle = IGamebase::Get().AddServerPushEvent(FGamebaseServerPushDelegate::FDelegate::CreateLambda([=](const FGamebaseServerPushMessage& message)
    {
        if (message.type.Equals(GamebaseServerPushType::AppKickout))
        {
            // Logout
            // Go to Main
        }
        else if (message.type.Equals(GamebaseServerPushType::TransferKickout))
        {
            // Logout
            // Go to Main
        }
    }));
}

Remove ServerPushEvent

Gamebase에 등록된 ServerPushEvent를 삭제할 수 있습니다.

API

Supported Platforms UNREAL_IOS UNREAL_ANDROID

void RemoveServerPushEvent(const FDelegateHandle& handle);
void RemoveAllServerPushEventerPushEvent();

Example

void Sample::RemoveServerPushEvent(const FDelegateHandle& handle)
{
    IGamebase::Get().RemoveServerPushEvent(handle);
}

void Sample::RemoveAllServerPushEvent()
{
    IGamebase::Get().RemoveAllServerPushEvent();
}

Observer

  • Gamebase Observer로 Gamebase의 각종 상태 변동 이벤트를 전달받아 처리할 수 있습니다.
  • 상태 변동 이벤트 : 네트워크 타입 변동, Launching 상태 변동(점검 등에 의한 상태 변동), Heartbeat 정보 변동(사용자 이용 정지 등에 의한 Heartbeat 정보 변동) 등

Observer Type

현재 Gamebase에서 지원하는 Observer Type은 다음과 같습니다.

  • Network 타입 변동
    • 네트워크 변동 사항 정보를 받을 수 있습니다.
    • Type: GamebaseObserverType::Network (= "network")
    • Code: GamebaseNetworkType에 선언된 상수를 참고합니다.
      • GamebaseNetworkType::TYPE_NOT: 255
      • GamebaseNetworkType::TYPE_MOBILE: 0
      • GamebaseNetworkType::TYPE_WIFI: 1
      • GamebaseNetworkType::TYPE_ANY: 2
  • Launching 상태 변동
    • 주기적으로 애플리케이션 상태를 확인하는 Launching Status response에 변동이 있을 때 발생합니다. 예를 들어 점검, 업데이트 권장 등에 의한 이벤트가 있습니다.
    • Type: GamebaseObserverType::Launching (= "launching")
    • Code: GamebaseLaunchingStatus에 선언된 상수를 참고합니다.
      • GamebaseLaunchingStatus::IN_SERVICE: 200
      • GamebaseLaunchingStatus::RECOMMEND_UPDATE: 201
      • GamebaseLaunchingStatus::IN_SERVICE_BY_QA_WHITE_LIST: 202
      • GamebaseLaunchingStatus::REQUIRE_UPDATE: 300
      • GamebaseLaunchingStatus::BLOCKED_USER: 301
      • GamebaseLaunchingStatus::TERMINATED_SERVICE: 302
      • GamebaseLaunchingStatus::INSPECTING_SERVICE: 303
      • GamebaseLaunchingStatus::INSPECTING_ALL_SERVICES: 304
      • GamebaseLaunchingStatus::INTERNAL_SERVER_ERROR: 500
  • Heartbeat 정보 변동
    • 주기적으로 Gamebase 서버와 연결을 유지하는 Heartbeat response에 변동이 있을 때 발생합니다. 예를 들어 사용자 이용 정지에 의한 이벤트가 있습니다.
    • Type: GamebaseObserverType::Heartbeat (= "heartbeat")
    • Code: GamebaseErrorCode에 선언된 상수를 참조합니다.
      • GamebaseErrorCode::INVALID_MEMBER: 6
      • GamebaseErrorCode::BANNED_MEMBER: 7

observer

Add Observer

Gamebase Client에 Observer를 등록하여 각종 상태 변동 이벤트를 처리할 수 있습니다.

API

Supported Platforms UNREAL_IOS UNREAL_ANDROID

static void AddObserver(GamebaseCallback.DataDelegate<GamebaseResponse.SDK.ObserverMessage> observer)

Example

void Sample::AddObserver()
{
    FDelegateHandle handle = IGamebase::Get().AddObserver(FGamebaseObserverDelegate::FDelegate::CreateLambda([=](const FGamebaseObserverMessage& message)
    {
        if (message.type.Equals(GamebaseObserverType::Network))
        {
            // Code : Refer to GamebaseLaunchingStatus.
            int code        = (int)data["code"];

            // Message
            string message  = (string)data["message"];
        }
        else if (message.type.Equals(GamebaseObserverType::Launching))
        {
            // Code: Refer to GamebaseNetworkType.
            int code        = (int)data["code"];

            // Message
            string message  = (string)data["message"];
        }
        else if (message.type.Equals(GamebaseObserverType::Heartbeat))
        {
            // Code : GamebaseErrorCode.INVALID_MEMBER, GamebaseErrorCode.BANNED_MEMBER
            int code = (int)data["code"];
        }
    }));
}

Remove Observer

Gamebase에 등록된 Observer를 삭제할 수 있습니다.

API

Supported Platforms UNREAL_IOS UNREAL_ANDROID

void RemoveObserver(const FDelegateHandle& handle);
void RemoveAllObserver();

Example

void Sample::RemoveObserver(const FDelegateHandle& handle)
{
    IGamebase::Get().RemoveObserver(handle);
}

void Sample::RemoveAllObserver()
{
    IGamebase::Get().RemoveAllObserver();
}

Analytics

Game지표를 Gamebase Server로 전송할 수 있습니다.

[주의]

Gamebase Analytics에서 지원하는 모든 API는 로그인 후에 호출할 수 있습니다.

[TIP]

RequestPurchase API를 호출하여 결제를 완료하면, 자동으로 지표를 전송합니다.

Analytics Console 사용법은 아래 가이드를 참고하십시오.

Game User Data Settings

게임 로그인 이후 게임 유저 레벨 정보를 지표로 전송할 수 있습니다.

[주의]

게임 로그인 이후 SetGameUserData API를 호출하지 않으면 다른 지표에서 Level 정보가 누락될 수 있습니다.

API 호출에 필요한 파라미터는 아래와 같습니다.

GameUserData

Name Mandatory(M) / Optional(O) type Desc
userLevel M int 게임 유저 레벨을 나타내는 필드입니다.
channelId O string 채널을 나타내는 필드입니다.
characterId O string 캐릭터 이름을 나타내는 필드입니다.
characterClassId O string 직업을 나타내는 필드입니다.

API

Supported Platforms UNREAL_IOS UNREAL_ANDROID

void SetGameUserData(const FGamebaseAnalyticsUserData& gameUserData);

Example

void Sample::SetGameUserData(int32 userLevel, const FString& channelId, const FString& characterId, const FString& characterClassId)
{
    FGamebaseAnalyticsUserData gameUserData{ userLevel, channelId, characterId, characterClassId };
    IGamebase::Get().GetAnalytics().SetGameUserData(gameUserData);
}

Level Up Trace

레벨업이 되었을 경우 게임 유저 레벨 정보를 지표로 전송할 수 있습니다.

API 호출에 필요한 파라미터는 아래와 같습니다.

LevelUpData

Name Mandatory(M) / Optional(O) type Desc
userLevel M int 게임 유저 레벨을 나타내는 필드입니다.
levelUpTime M long Epoch Time으로 입력합니다.
Millisecond 단위로 입력합니다.

API

Supported Platforms UNREAL_IOS UNREAL_ANDROID

void TraceLevelUp(const FGamebaseAnalyticesLevelUpData& levelUpData);

Example

void Sample::TraceLevelUpNow(int32 userLevel)
{
    FGamebaseAnalyticesLevelUpData levelUpData{ userLevel, FDateTime::Now().ToUnixTimestamp() };
    IGamebase::Get().GetAnalytics().TraceLevelUp(levelUpData);
}

Contact

Gamebase 는 고객 문의 대응을 위한 기능을 제공합니다.

[TIP]

TOAST Contact 서비스와 연동해서 사용하면 보다 쉽고 편리하게 고객 문의에 대응할 수 있습니다. 자세한 TOAST Contact 서비스 이용법은 아래 가이드를 참고하시기 바랍니다. TOAST Online Contact Guide

Open Contact WebView

Gamebase 콘솔에 입력한 고객 센터 URL 웹뷰를 나타낼 수 있는 기능입니다.

  • Gamebase 콘솔 > App > InApp URL > Service center 에 입력한 값이 사용됩니다.

API

Supported Platforms UNREAL_IOS UNREAL_ANDROID

void OpenContact(const FGamebaseErrorDelegate& onCloseCallback);

Example

void Sample::OpenContact()
{
    IGamebase::Get().GetContact().OpenContact(FGamebaseErrorDelegate::CreateLambda([=](const FGamebaseError* error)
    {
        if (Gamebase::IsSuccess(error))
        {
            UE_LOG(GamebaseTestResults, Display, TEXT("OpenContact succeeded."));
        }
        else
        {
            UE_LOG(GamebaseTestResults, Display, TEXT("OpenContact failed. (errorCode: %d, errorMessage: %s)"), error->code, *error->message);

            if (error->code == GamebaseErrorCode::WEBVIEW_INVALID_URL)
            {
                // Gamebase Console Service Center URL is invalid.
                // Please check the url field in the TOAST Gamebase Console.
                auto launchingInfo = IGamebase::Get().GetLaunching().GetLaunchingInformations();
                Debug.Log(string.Format("csUrl:{0}", launchingInfo->launching.app.relatedUrls.csUrl));
            }

        }
    }));
}
TOP