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

Additional Features

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

Device Language

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

API

+ (NSString *)deviceLanguageCode;

Display Language

점검 팝업과 같이 Gamebase 가 표시하는 언어는 단말기에 설정된 언어로 표시됩니다.

그런데 게임에서 표시하는 언어를 단말기에 설정된 언어가 아닌, 별도의 옵션으로 언어를 변경할 수 있는 게임이 있습니다. 예를 들어, 단말기에 설정된 언어는 영어 이지만 게임 표시 언어를 일본어로 변경한 경우, Gamebase 에서 표시하는 언어도 일본어로 변경하고 싶지만 Gamebase 가 표시하는 언어는 단말기에 설정된 언어인 영어로 표시됩니다.

이와 같이 단말기에 설정된 언어가 아닌, 다른 언어로 Gamebase 메세지를 표시하고 싶은 어플리케이션을 위해 Gamebase 는 Display Language 라는 기능을 제공합니다.

Gamebase 는 Display Language 로 설정한 언어로 Gamebase 메세지를 표시합니다. Display Language 에 입력하는 언어 코드는 반드시 아래의 표(Gamebase에서 지원하는 언어코드의 종류)에 지정된 코드만을 사용할 수 있습니다.

[주의]

  • Display Language 는 단말기 설정 언어와 무관하게 Gamebase 의 표시 언어를 변경하고 싶은 경우에만 사용하시기 바랍니다.
  • Display Language Code 는 ISO-639 형태의 값으로, 대소문자를 구분합니다. 'EN'이나 'zh-cn'과 같이 설정하면 문제가 발생할 수 있습니다.
  • 만일 Display Language Code 로 입력한 값이 아래의 표(Gamebase에서 지원하는 언어코드의 종류)에 존재하지 않는다면, Display Langauge Code 는 자동으로 기본값인 영어(en)로 지정됩니다.

[참고]

  • Gamebase의 클라이언트 메시지는 영어(en), 한글(ko), 일본어(ja)만 포함하고 있으므로 아래의 표에 존재하는 언어 코드라 할지라도 영어(en), 한글(ko), 일본어(ja) 이외의 언어를 지정하면 기본값인 영어(en)로 자동 설정됩니다.
  • Gamebase의 클라이언트에 포함되어 있지 않은 언어셋은 직접 추가할 수 있습니다. 신규 언어셋 추가 항목을 참조하시기 바랍니다.

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

해당 언어코드는 TCGBConstants.h에 정의되어 있습니다.

#pragma mark - DisplayLanguageCode
extern NSString* const kTCGBDisplayLanguageCodeGerman;
extern NSString* const kTCGBDisplayLanguageCodeEnglish;
extern NSString* const kTCGBDisplayLanguageCodeSpanish;
extern NSString* const kTCGBDisplayLanguageCodeFinish;
extern NSString* const kTCGBDisplayLanguageCodeFrench;
extern NSString* const kTCGBDisplayLanguageCodeIndonesian;
extern NSString* const kTCGBDisplayLanguageCodeItalian;
extern NSString* const kTCGBDisplayLanguageCodeJapanese;
extern NSString* const kTCGBDisplayLanguageCodeKorean;
extern NSString* const kTCGBDisplayLanguageCodePortuguese;
extern NSString* const kTCGBDisplayLanguageCodeRussian;
extern NSString* const kTCGBDisplayLanguageCodeThai;
extern NSString* const kTCGBDisplayLanguageCodeVietnamese;
extern NSString* const kTCGBDisplayLanguageCodeMalay;
extern NSString* const kTCGBDisplayLanguageCodeChineseSimplified;
extern NSString* const kTCGBDisplayLanguageCodeChineseTraditional;

Gamebase 초기화 시 Display Language 설정

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

API

+ (void)initializeWithConfiguration:(TCGBConfiguration *)configuration completion:(InitializeCompletion)completion;

Example

- (void)initializeWithDisplayLanguageConfiguration {
        TCGBConfiguration* config = [TCGBConfiguration configurationWithAppID:@"your app(project) ID" appVersion:@"your app version"];
        [config setDisplayLanguageCode:kTCGBDisplayLanguageCodeEnglish];
        [TCGBGamebase initializeWithConfiguration:config completion:^(LaunchingInfo launchingData, TCGBError *error) {
            if ([TCGBGamebase isSuccessWithError:error] == YES) {
                NSLog(@"TCGBGamebase initialization is succeeded");
                // Check status of you app.
                // If status of app is maintenance or terminated service or etc, you must blocking UI and you should make user cannot log in your service.
                // You can use [TCGBLaunching launchingStatus] method to check status of your app.
            }
            else {
                NSLog(@"TCGBGamebase initialization is failed with error:[%@]", [error description]);
            }
        }];
    }

Set Display Language

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

API

+ (void)setDisplayLanguageCode:(NSString *)languageCode;

Example

- (void)setDisplayLanguageCode {
    [TCGBGamebase setDisplayLanguageCode:kTCGBDisplayLanguageCodeEnglish];
}

Get Display Language

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

API

+ (NSString *)displayLanguageCode;

Example

- (void)getDisplayLanguageCode()
{
    NSString* displayLanguage = [TCGBGamebase displayLanguageCode];
}

신규 언어셋 추가

Gamebase에서 제공하는 기본 언어(ko, en) 외 다른 언어를 사용하는 경우에는 Gamebase.bundle 파일의 Resource폴더에 있는 localizedstring.json 파일에 값을 추가합니다.

localizedstring.json에 정의되어 있는 형식은 아래와 같습니다.

{
  "en": {
    "common_ok_button": "OK",
    "common_cancel_button": "Cancel",
    ...
    "launching_service_closed_title": "Service Closed"
  },
  "ko": {
    "common_ok_button": "확인",
    "common_cancel_button": "취소",
    ...
    "launching_service_closed_title": "서비스 종료"
  },
  "ja": {
    "common_ok_button": "確認",
    "common_cancel_button": "キャンセル",
    ...
    "launching_service_closed_title": "サービス終了"
  },
}

다른 언어셋을 추가해야 할 경우에는 localizedstring.json 파일에 "${언어 코드}":{"key":"value"} 형태로 값을 추가하면 됩니다.

{
  "en": {
    "common_ok_button": "OK",
    "common_cancel_button": "Cancel",
    ...
    "launching_service_closed_title": "Service Closed"
  },
  "ko": {
    "common_ok_button": "확인",
    "common_cancel_button": "취소",
    ...
    "launching_service_closed_title": "서비스 종료"
  },
  "ja": {
    "common_ok_button": "確認",
    "common_cancel_button": "キャンセル",
    ...
    "launching_service_closed_title": "サービス終了"
  },
  "${언어코드}": {
      "common_ok_button": "...",
      ...
  }
}

위 JSON 형식에서 "${언어코드}":{ } 내부에 key가 누락될 경우에는 단말기에 설정된 언어 또는 en이 자동으로 입력됩니다.

Display Language 우선 순위

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

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

Country Code

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

USIM Country Code

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

API

+ (NSString *)usimCountryCode;

Device Country Code

  • OS 로부터 전달받은 단말기 지역 설정을 추가적인 체크 없이 그대로 리턴합니다.
  • 단말기 국가코드는 '설정 > 일반 > 언어 및 지역 > 지역' 설정에 따라 OS가 결정합니다.
  • iOS 에서 제공하는 NSLocaleCountryCode 를 사용하여 획득한 값을 리턴합니다.

API

+ (NSString *)deviceCountryCode;

Intergrated Country Code

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

observer

API

+ (NSString *)countryCode;

Gamebase Event Handler

  • Gamebase 는 각종 이벤트를 GamebaseEventHandler 라는 하나의 이벤트 시스템에서 모두 처리할 수 있습니다.
  • GamebaseEventHandler 는 아래 API 를 통해 간단하게 Handler 를 추가/제거 할 수 있습니다.

API

+ (void)addEventHandler:(GamebaseEventHandler)handler;
+ (void)removeEventHandler:(GamebaseEventHandler)handler;
+ (void)removeAllEventHandler;

VO

@interface TCGBGamebaseEventMessage : NSObject <TCGBValueObject>

@property (nonatomic, strong, nonnull)  NSString* category;
@property (nonatomic, strong, nullable) NSString* data;

@end

Example

- (void)eventHandler_addEventHandler {
    void(^eventHandler)(TCGBGamebaseEventMessage *) = ^(TCGBGamebaseEventMessage * _Nonnull message) {
        if ([message.category isEqualToString:kTCGBServerPushAppKickout] == YES
            || [message.category isEqualToString:kTCGBServerPushTransferKickout] == YES) {
            TCGBGamebaseEventServerPushData* serverPushData = [TCGBGamebaseEventServerPushData gaembaseEventServerPushDataFromJsonString:message.data];
            if (serverPushData != nil) {
                //TODO: process server push
            }
        }
        else if ([message.category isEqualToString:kTCGBObserverLaunching] == YES
                 || [message.category isEqualToString:kTCGBObserverHeartbeat] == YES
                 || [message.category isEqualToString:kTCGBObserverNetwork] == YES) {
            TCGBGamebaseEventObserverData* observerData = [TCGBGamebaseEventObserverData gamebaseEventObserverDataFromJsonString:message.data];
            if (observerData != nil) {
                //TODO: process observer
            }
        }
        else if ([message.category isEqualToString:kTCGBPurchaseUpdated] == YES) {

        }
        else if ([message.category isEqualToString:kTCGBPushReceivedMessage] == YES) {

        }
        else if ([message.category isEqualToString:kTCGBPushClickMessage] == YES) {

        }
        else if ([message.category isEqualToString:kTCGBPushClickAction] == YES) {

        }
    };

    [TCGBGamebase addEventHandler:eventHandler];
}
  • Category 는 GamebaseEventCategory 클래스에 정의되어 있습니다.
  • 이벤트는 크게 ServerPush, Observer, Purchase, Push 로 나눌 수 있고, 각 Category 에 따라, TCGBGamebaseEventMessage.data 를 아래 표와 같은 방법으로 VO 로 변환할 수 있습니다.
Event 종류 GamebaseEventCategory VO 변환 방법 비고
ServerPush kTCGBServerPushAppKickout
kTCGBServerPushTransferKickout
[TCGBGamebaseEventServerPushData gamebaseEventServerPushDataFromJsonString:message.data] -
Observer kTCGBObserverLaunching
kTCGBObserverHeartbeat
kTCGBObserverNetwork
[TCGBGamebaseEventObserverData gamebaseEventObserverDataFromJsonString:message.data] -
Purchase - 프로모션 결제 kTCGBPurchaseUpdated [TCGBPurchasableReceipt purchasableReceiptFromJsonString:message.data] -
Push - 메세지 수신 kTCGBPushReceivedMessage [TCGBPushMessage pushMessageFromJsonString:message.data] -
Push - 메세지 클릭 kTCGBPushClickMessage [TCGBPushMessage pushFromJsonString:message.data] -
Push - 액션 클릭 kTCGBPushClickAction [TCGBPushMessage pushFromJsonString:message.data] RichMessage 버튼 클릭 시 동작합니다.

Server Push

  • Gamebase 서버에서 클라이언트 단말기로 보내는 메세지 입니다.
  • Gamebase 에서 지원하는 Server Push Type 은 다음과 같습니다.
    • kTCGBServerPushAppKickout
      • TOAST Gamebase 콘솔의 Operation > Kickout 에서 킥아웃 ServerPush 메시지를 등록하면 Gamebase와 연결된 모든 클라이언트에서 킥아웃 메시지를 받게 됩니다.
    • kTCGBServerPushTransferKickout
      • Guest 계정을 다른 단말기로 이전을 성공하게 되면 이전 단말기에서 킥아웃 메세지를 받게 됩니다.

Example

- (void)eventHandler_addEventHandler {
    void(^eventHandler)(TCGBGamebaseEventMessage *) = ^(TCGBGamebaseEventMessage * _Nonnull message) {
        [self printLogAndShowAlertWithData:[message prettyJsonString] error:nil alertTitle:@"addEventHandler Result"];
        if ([message.category isEqualToString:kTCGBServerPushAppKickout] == YES) {
            TCGBGamebaseEventServerPushData* serverPushData = [TCGBGamebaseEventServerPushData gamebaseEventServerPushDataFromJsonString:message.data];
            if (serverPushData != nil) {
                //TODO: process server push
            }
        }
        esle if ([message.category isEqualToString:kTCGBServerPushTransferKickout] == YES) {
            TCGBGamebaseEventServerPushData* serverPushData = [TCGBGamebaseEventServerPushData gamebaseEventServerPushDataFromJsonString:message.data];
            if (serverPushData != nil) {
                //TODO: process server push
            }
        }
    };

    [TCGBGamebase addEventHandler:eventHandler];
}

Observer

  • Gamebase Gamebase의 각종 상태 변동 이벤트를 처리하는 시스템 입니다.
  • Gamebase 에서 지원하는 Observer Type 은 다음과 같습니다.
    • kTCGBObserverLaunching
      • 점검이 걸리거나 풀린 경우, 새로운 버전이 배포되어 업데이트가 필요한 경우와 같이, Launching 상태가 변경되었을 때 동작합니다.
      • TCGBGamebaseEventObserverData.code : TCGBLaunchingStatus 값을 의미합니다.
        • IN_SERVICE: 200
        • RECOMMEND_UPDATE: 201
        • IN_SERVICE_BY_QA_WHITE_LIST: 202
        • REQUIRE_UPDATE: 300
        • BLOCKED_USER: 301
        • TERMINATED_SERVICE: 302
        • INSPECTING_SERVICE: 303
        • INSPECTING_ALL_SERVICES: 304
        • INTERNAL_SERVER_ERROR: 500
    • kTCGBObserverHeartbeat
      • 탈퇴 처리 되거나 이용 정지로 인하여 사용자 계정 상태가 변했을 때 동작합니다.
      • TCGBGamebaseEventObserverData.code : TCGBError 값을 의미합니다.
        • TCGB_ERROR_INVALID_MEMBER: 6
        • TCGB_ERROR_BANNED_MEMBER: 7
    • kTCGBObserverNetwork
      • 네트워크 변동 사항 정보를 받을 수 있습니다.
      • 네트워크가 끊기거나 연결되었을 때, 혹은 Wifi 에서 셀룰러 네트워크로 변경되었을 때 동작합니다.
      • TCGBGamebaseEventObserverData.code : NetworkManager 값을 의미합니다.
        • ReachabilityIsNotDefined = -100
        • NotReachable = -1
        • ReachableViaWWAN = 0
        • ReachableViaWifi = 1

VO

@interface TCGBGamebaseEventObserverData : NSObject <TCGBValueObject>

@property (nonatomic, assign)           int64_t     code;
@property (nonatomic, strong, nullable) NSString*   message;
@property (nonatomic, strong, nullable) NSString*   extras;

Example

- (void)eventHandler_addEventHandler {
    void(^eventHandler)(TCGBGamebaseEventMessage *) = ^(TCGBGamebaseEventMessage * _Nonnull message) {
        if ([message.category isEqualToString:kTCGBObserverLaunching] == YES) {
            TCGBGamebaseEventObserverData* observerData = [TCGBGamebaseEventObserverData gamebaseEventObserverDataFromJsonString:message.data];
            if (observerData != nil) {
                int launchingStatusCode = observerData.code;
                NSString* launchingMessage = observerData.message;
                switch (launchingStatusCode) {
                    case IN_SERVICE:
                    // Finished maintenance.
                    break;
                case INSPECTING_SERVICE:
                case INSPECTING_ALL_SERVICES:
                    // Under maintenance.
                    break;
                ...
        }
            }
        }
        else if ([message.category isEqualToString:kTCGBObserverHeartbeat] == YES) {
            TCGBGamebaseEventObserverData* observerData = [TCGBGamebaseEventObserverData gamebaseEventObserverDataFromJsonString:message.data];
            int errorCode = observerData.code;
            switch (errorCode) {
            case TCGB_ERROR_INVALID_MEMBER:
                // You can check the invalid user session in here.
                // ex) After transferred account to another device.
                break;
            case TCGB_ERROR_BANNED_MEMBER:
                // You can check the banned user session in here.
                break;
        }
        }
        else if ([message.category isEqualToString:kTCGBObserverNetwork] == YES) {
            TCGBGamebaseEventObserverData* observerData = [TCGBGamebaseEventObserverData gamebaseEventObserverDataFromJsonString:message.data];
            NetworkStatus networkTypeCode = observerData.code;
            // You can check the changed network status in here.
            if (networkTypeCode == NotReachable || networkTypeCode == ReachabilityIsNotDefined) {
                // Network disconnected.
            } else {
                // Network connected.
            }
        }
    };

    [TCGBGamebase addEventHandler:eventHandler];
}

Purchase Updated

  • Promotion 코드 입력을 통해 상품을 획득한 경우 발생하는 이벤트 입니다.
  • 결제 영수증 정보를 획득할 수 있습니다.

Example

- (void)eventHandler_addEventHandler {
    void(^eventHandler)(TCGBGamebaseEventMessage *) = ^(TCGBGamebaseEventMessage * _Nonnull message) {
        TCGBPurchasableReceipt* receipt = [TCGBPurchasableReceipt purchasableReceiptFromJsonString:message.data];
        if (receipt != nil) {
            // If user purchase item from appstore promoting iap
            // this event will be occurred.
        }
    };

    [TCGBGamebase addEventHandler:eventHandler];
}

Push Received Message

  • Push 메세지가 도착했을때 발생하는 이벤트 입니다.
  • extras 필드를 JSON 으로 변환하여, Push 발송시 전송했던 커스텀 정보를 얻을 수도 있습니다.

VO

@interface TCGBPushMessage : NSObject <TCGBValueObject>

@property (nonatomic, strong, nonnull) NSString* identifier;
@property (nonatomic, strong, nullable) NSString* title;
@property (nonatomic, strong, nullable) NSString* body;
@property (nonatomic, strong, nonnull) NSString* extras;

@end

Example

- (void)eventHandler_addEventHandler {
    void(^eventHandler)(TCGBGamebaseEventMessage *) = ^(TCGBGamebaseEventMessage * _Nonnull message) {
        if ([message.category isEqualToString:kTCGBPushReceivedMessage] == YES) {
            TCGBPushMessage* pushMessage = [TCGBPushMessage pushMessageFromJsonString:message.data];
            if (pusMessage != nil) {
                //TODO: process 
            }
        }
    };

    [TCGBGamebase addEventHandler:eventHandler];
}

Push Click Message

  • 수신한 Push 메세지를 클릭했을때 발생하는 이벤트 입니다.

Example

- (void)eventHandler_addEventHandler {
    void(^eventHandler)(TCGBGamebaseEventMessage *) = ^(TCGBGamebaseEventMessage * _Nonnull message) {
        if ([message.category isEqualToString:kTCGBPushClickMessage] == YES) {
            TCGBPushMessage* pushMessage = [TCGBPushMessage pushMessageFromJsonString:message.data];
            if (pusMessage != nil) {
                //TODO: process 
            }
        }
    };

    [TCGBGamebase addEventHandler:eventHandler];
}

Push Click Action

  • Rich Message 기능을 통해 생성한 버튼을 클릭했을때 발생하는 이벤트 입니다.
  • actionType 은 다음 항목이 제공됩니다.
    • "OPEN_APP"
    • "OPEN_URL"
    • "REPLY"
    • "DISMISS"

VO

@interface TCGBPushAction : NSObject <TCGBValueObject>

@property (nonatomic, strong, nonnull) NSString* actionType;
@property (nonatomic, strong, nullable) TCGBPushMessage* message;
@property (nonatomic, strong, nullable) NSString* userText;

@end

Example

- (void)eventHandler_addEventHandler {
    void(^eventHandler)(TCGBGamebaseEventMessage *) = ^(TCGBGamebaseEventMessage * _Nonnull message) {
        if ([message.category isEqualToString:kTCGBPushClickAction] == YES) {
            TCGBPushAction* pushMessage = [TCGBPushAction pushActionFromJsonString:message.data];
            if (pushAction != nil) {
                //TODO: process 
            }
        }
    };

    [TCGBGamebase addEventHandler:eventHandler];
}

Analytics

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

[주의]

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

[TIP]

TCGBPurchase의 requestPurchaseWithItemSeq:viewController:completion API의 호출을 통한 결제 또는 setPromotionIAPHandler를 통한 프로모션 결제를 완료하면 자동으로 지표를 전송합니다.

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 캐릭터 이름을 나타내는 필드입니다.
classId O String 직업을 나타내는 필드입니다.

API

+ (void)setGameUserData:(nonnull TCGBAnalyticsGameUserData *)gameUserData;

Example

- (void)setGameUserDataWithLevel:(int)level channelId:(NSString *)channelId characterId:(NSString *)characterId {
    TCGBAnalyticsGameUserData* gameUserData = [TCGBAnalyticsGameUserData gameUserDataWithUserLevel:level];
    [gameUserData setChannelId:channelId];
    [gameUserData setCharacterId:characterId];
    [TCGBAnalytics setGameUserData:gameUserData];
}

Level Up Trace

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

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

LevelUpData

Name Mandatory (M) / Optional (O) type Desc
userLevel M int 게임 유저 레벨을 나타내는 필드입니다.
levelUpTime M long Epoch time으로 입력합니다.
밀리초(ms) 단위로 입력합니다.
channelId O string
characterId O string

API

+ (void)traceLevelUpWithLevelUpData:(nonnull TCGBAnalyticsLevelUpData *)levelUpData;

Example

- (void)traceLevelUpWith:(int)level levelUpTime:(long long)levelUpTime channelId:(NSString *)channelId characterId:(NSString *)characterId {
  TCGBAnalyticsLevelUpData* levelUpData = [TCGBAnalyticsLevelUpData levelUpDataWithUserLevel:level levelUpTime:levelUpTime];
  [TCGBAnalytics traceLevelUpWithLevelUpData:levelUpData];
}

Contact

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

[TIP]

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

Customer Service Type

Gamebase 콘솔 > App > InApp URL > Service center 에서는 아래와 같이 3가지 유형의 고객센터를 선택할 수 있습니다.

Customer Service Type Required Login
Developer customer center X
Gamebase customer center
TOAST Online Contact O

각 유형에 따라 Gamebase SDK 의 고객센터 API 는 다음 URL 을 사용합니다.

  • 개발사 자체 고객센터(Developer customer center)
    • 고객센터 URL 에 입력한 URL.
  • Gamebase 제공 고객센터(Gamebase customer center)
    • 로그인 전 : 유저 정보가 없는 고객센터 URL.
    • 로그인 후 : 유저 정보가 포함된 고객센터 URL.
  • TOAST 조직 상품(Online Contact)
    • 로그인 전 : TCGB_ERROR_NOT_LOGGED_IN(2) 에러 발생.
    • 로그인 후 : 유저 정보가 포함된 고객센터 URL.

Open Contact WebView

Gamebase 콘솔에 입력한 고객 센터 URL 웹뷰를 나타낼 수 있는 기능입니다. TCGBContactConfiguration으로 URL에 추가 정보를 전달할 수 있습니다.

TCGBContactConfiguration

Parameter Values Description
userName string 사용자 이름(닉네임)

API

+ (void)openContactWithViewController:(UIViewController *)viewController 
                           completion:(void(^)(TCGBError *error))completion;

+ (void)openContactWithViewController:(UIViewController *)viewController
                        configuration:(TCGBContactConfiguration *)configuration
                           completion:(void(^)(TCGBError *error))completion;

Error Code

Error Error Code Description
TCGB_ERROR_NOT_INITIALIZED 1 Gamebase가 초기화되어 있지 않습니다.
TCGB_ERROR_NOT_LOGGED_IN 2 고객센터 유형이 'TOAST Online Contact' 인데 로그인 전에 호출하였습니다.
TCGB_ERROR_UI_CONTACT_FAIL_INVALID_URL 6911 고객센터 URL이 존재하지 않습니다.
Gamebase 콘솔의 고객센터 URL 을 확인하세요.
TCGB_ERROR_UI_CONTACT_FAIL_ISSUE_SHORT_TERM_TICKET 6912 사용자 식별을 위한 임시 티켓 발급에 실패하였습니다.

Example

[TCGBContact openContactWithViewController:self completion:^(TCGBError *error) {
    if ([TCGBGamebase isSuccessWithError:error] == YES) {
        // A user close the contact web view.
    } else if (error.code == TCGB_ERROR_UI_CONTACT_FAIL_INVALID_URL) {
        // TODO: Gamebase Console Service Center URL is invalid.
        // Please check the url field in the TOAST Gamebase Console.
    } else {
        // TODO: Error occur when opening the contact web view.
    }
}];

[주의]

고객센터 문의 시 파일 첨부를 위해 카메라 또는 앨범 접근이 필요할 수 있습니다. info.plist에 'Privacy - Camera Usage Description', 'Privacy - Photo Library Usage Description' 설정을 해주시기 바랍니다.

Request Contact URL

고객센터 웹뷰를 표시하는데 사용되는 URL을 얻을 수 있습니다.

API

+ (void)requestContactURLWithCompletion:(void(^)(NSString *contactUrl, TCGBError *error))completion;

+ (void)requestContactURLWithConfiguration:(TCGBContactConfiguration *)configuration
                                completion:(void(^)(NSString *contactUrl, TCGBError *error))completion;

Error Code

Error Error Code Description
TCGB_ERROR_NOT_INITIALIZED 1 Gamebase가 초기화되어 있지 않습니다.
TCGB_ERROR_NOT_LOGGED_IN 2 고객센터 유형이 'TOAST Online Contact' 인데 로그인 전에 호출하였습니다.
TCGB_ERROR_UI_CONTACT_FAIL_INVALID_URL 6911 고객센터 URL이 존재하지 않습니다.
Gamebase 콘솔의 고객센터 URL 을 확인하세요.
TCGB_ERROR_UI_CONTACT_FAIL_ISSUE_SHORT_TERM_TICKET 6912 사용자 식별을 위한 임시 티켓 발급에 실패하였습니다.

Example

[TCGBContact requestContactURLWithCompletion^(NSString *contactUrl, TCGBError *error){
    if ([TCGBGamebase isSuccessWithError:error] == YES) {
        NSLog(@"ContactURL : %@", contactUrl);
    } else if (error.code == TCGB_ERROR_UI_CONTACT_FAIL_INVALID_URL) {
        // TODO: Gamebase Console Service Center URL is invalid.
        // Please check the url field in the TOAST Gamebase Console.
    } else {
        // TODO: Error occur when request contact url.
    }
}];
TOP