콘텐츠로 이동

프로비저닝

프로비저닝은 약관 등록과 관리, 공지 팝업, GDPRCOPPA 대응 등 앱이 제공하는 핵심 서비스는 아니지만 서비스 운영 과정에서 꼭 필요한 편의 기능들입니다. 이런 기능들은 주변 기능으로 볼 수 있지만 상황에 따라서는 필수적인 기능들이며, Hive SDK는 앱 개발사 편의를 위해 이러한 프로비저닝 기능들을 제공합니다.

약관 및 공지 팝업과 같이 프로비저닝 기능 중 일부는 Hive SDK 초기화 시점에 실행됩니다. 따라서 초기화를 시작하기 전에, Hive 콘솔에서 프로비저닝 설정을 마친 후, Hive SDK 프로비저닝 코드를 구현해야 합니다.

Hive SDK가 제공하는 프로비저닝 기능은 아래와 같습니다.

  • 약관 다시보기
  • 약관 동의 내역 삭제하기
  • COPPA 대응
  • GDPR 대응
  • 법정 대리인 동의 여부 확인
  • 공지 팝업
  • 리모트 컨피그레이션
  • 리모트 로깅

약관 다시보기

약관은 서비스 제공자와 사용자 간의 권리, 의무, 책임 사항을 명시하는 문서입니다. 게임 서비스를 제공할 때 게임 사용자에게 이용약관, 개인정보처리방침 등을 고지하거나 동의를 받아야 합니다.

Info

약관 등록에 대한 자세한 내용은 콘솔 가이드 > 프로비저닝 > 약관 가이드를 참고하세요.

Hive SDK는 초기화 시 유저의 접속 IP로 판단한 국가 및 퍼블리싱사에 맞는 적절한 약관을 노출시키지만, 이후 게임에서는 국가별로 어떤 약관에 대한 동의를 받는지 여부와 상관 없이 모든 유저가 약관 및 개인정보처리방침 등을 볼 수 있는 링크를 제공해야 합니다. 사용자가 앱에서 해당 링크를 눌렀을 때 AuthV4.showTerms()를 실행하도록 구현하면, Hive SDK는 Hive 콘솔에 등록한 조건에 따라 노출할 약관을 자동으로 선택해 노출합니다. 약관 링크를 표기하는 규정은 퍼블리싱 회사에 따라 차이가 있습니다.

약관을 표시하기 위해서는 AuthV4 클래스의 showTerms() 메서드를 호출하세요. 다음은 이용약관을 노출하는 예제 코드입니다.

API Reference: Unity®

using hive;    
    AuthV4.showTerms((ResultAPI result) => {    
        if (result.isSuccess()) {    
            // API call success    
        }    
});

API Reference: C++

#include <HIVE_SDK_Plugin/HIVE_CPP.h>    
    using namespace std;    
    using namespace hive;    
    AuthV4::showTerms([=](ResultAPI const & result) {    
        if (result.isSuccess()) {    
            // API call success    
        }    
});

API Reference: Kotlin

import com.hive.AuthV4;    
    import com.hive.ResultAPI;
    AuthV4.showTerms(object : AuthV4.AuthV4ShowTermsListener {    
        override fun onAuthV4ShowTerms(result: ResultAPI) {    
            if (result.isSuccess) {    
                // API call success    
            }    
        }    
})

API Reference: Java

import com.hive.AuthV4;    
    import com.hive.ResultAPI;    
    AuthV4.INSTANCE.showTerms(result -> {    
        if (result.isSuccess()) {    
            // API call success    
        }    
});

API Reference: Swift

import HIVEService    
    AuthV4Interface.showTerms() { result in    
        if result.isSuccess() {    
            // API call success    
        }    
}

API Reference: Objective-C

#import <HIVEService/HIVEService-Swift.h>    
    [HIVEAuthV4 showTerms:^(HIVEResultAPI *result) {     
        if ([result isSuccess]) {    
            // API call success    
        }    
}];
#include "HiveAuthV4.h"

FHiveAuthV4::ShowTerms(FHiveAuthV4OnShowTermsDelegate::CreateLambda([this](const FHiveResultAPI& Result) {
        if (Result.IsSuccess()) {
                // 호출 성공
        }
}));

약관 동의 내역 삭제하기

게임 유저가 게임을 최초 실행할 때 게임 약관에 한 번 동의한 후에는, 약관에 동의한 내역이 기기에 남습니다. 아래 resetAgreement 메서드는 이 내역을 삭제합니다.

Bug

게임 유저가 계정을 삭제한 후 게임을 다시 실행하면 삭제했던 계정으로 약관에 동의한 정보가 남아 있어 약관 동의 팝업이 나타나지 않는 문제가 있습니다. 계정 삭제 후 Hive SDK 초기화 시 약관 동의 팝업을 다시 노출하려면
resetAgreement
를 호출하여 이전에 저장된 약관 동의 정보를 삭제해야 합니다. 그 후에,
AuthV4.setup()
을 호출하여 Hive SDK 초기화를 진행하세요.

using hive;

AuthV4.resetAgreement();
#include <HIVE_SDK_Plugin/HIVE_CPP.h>
using namespace hive;

AuthV4::resetAgreement()
import com.hive.AuthV4;

AuthV4.resetAgreement()
import com.hive.AuthV4;

AuthV4.INSTANCE.resetAgreement();
import HIVEService

AuthV4Interface.resetAgreement()
#import <HIVEService/HIVEService-Swift.h>

[AuthV4Interface resetAgreement]
#include "HiveAuthV4.h"

FHiveAuthV4::ResetAgreement();

COPPA 대응

미국(미국령)에 앱을 출시할 때 13세 미만 사용자를 대상으로 한다면 COPPA(Children's Online Privacy Protection Act)에 대응해야 합니다. COPPA는 13세 미만 어린이의 개인 정보 보호를 목적으로 발효된 미국 법률입니다. 사용자가 13세 미만 어린이인 경우, 앱은 아래 예시를 포함해 COPPA에서 요구하는 모든 조건을 만족해야 합니다.

  • 인증 수단은 게스트 로그인만 제공
  • 일부 사용자 추적 광고 노출 불가
  • 푸시 노티피케이션 발송 불가
  • 앱 내 채팅 금지
  • 앱 고객센터에 문의 내용 저장 불가
  • 특정 조건에서 개인 정보 수집 불가
Warning

COPPA 대응에 관한 자세한 내용은 COPPA를 참고하세요. COPPA에 대응하려면 반드시 COPPA에서 요구하는 모든 조건을 확인해야 합니다.

13세 미만 여부 조회

Hive SDK는 COPPA 규정에 대응하기 위해 사용자가 13세 미만 여부인지 조회하는 AuthV4.getAgeGateU13() 메서드를 제공합니다. 이 메서드는 반드시 앱 사용자가 약관 팝업에서 13세 미만인지 아닌지 여부를 선택한 후에 호출해야 합니다. 사용자가 13세 미만일 경우 메서드가 반환하는 값은 true입니다. 이 값을 사용해 개발사는 게스트 로그인만 제공, 일부 광고 미노출 등 COPPA 요건에 대응해야 합니다.

ageGateU13 값이 true일 때 Hive SDK 내부적으로 달라지는 동작은 아래와 같습니다.

플랫폼 설명
Android * 종료 팝업 노출 시 더 많은 게임(More Games) 버튼을 표시하지 않습니다.
* 리모트 푸시가 수신되지 않으며, 푸시 API가 동작하지 않습니다.
iOS * AuthV4.setup()Auth.initialize() 호출 시 푸시 권한 동의 여부를 묻는 팝업이 노출되지 않습니다.
* 푸시 API가 동작하지 않습니다.

API Reference: AuthV4.getAgeGateU13

using hive;    

Boolean ageGateU13 = AuthV4.getAgeGateU13();
#include "HiveAuthV4.h"

bool bAgeGateU13 = FHiveAuthV4::GetAgeGateU13();

API Reference: AuthV4 ::getAgeGateU13

#include <HIVE_SDK_Plugin/HIVE_CPP.h>    
    using namespace std;    
    using namespace hive;    

bool ageGateU13 = AuthV4::getAgeGateU13();

API Reference: AuthV4.getAgeGateU13

import com.hive.AuthV4;

val ageGateU13 = AuthV4.getAgeGateU13()

API Reference: AuthV4.INSTANCE.getAgeGateU13

import com.hive.AuthV4;    

boolean ageGateU13 = AuthV4.INSTANCE.getAgeGateU13();

API Reference: AuthV4Interface.getAgeGateU13

import HIVEService    

Bool ageGateU13 = AuthV4Interface.getAgeGateU13()

API Reference: HIVEAuthV4 getAgeGateU13

#import <HIVEService/HIVEService-Swift.h>    

BOOL ageGateU13 = [HIVEAuthV4 getAgeGateU13];

GDPR 대응

앱 개발사는 사업장이 유럽 내에 존재하거나 유럽 밖에 있더라도 유럽 내 정보 주체에게 재화나 서비스를 제공하는 경우, GDPR(General Data Protection Regulation)에 대응해야 합니다. GDPR에 대응하려면 Hive 콘솔에서 GDPR 약관을 노출하도록 설정한 후, 앱 사용자가 약관에 동의한 후 시점에서 아래 Configuration.getAgeGateU16Agree() 메서드를 호출해야 합니다.

Note

GDPR 대응에 관한 자세한 내용은 반드시 GDPR 공식 사이트를 확인하세요.

GDPR 약관 동의 여부 조회

Hive SDK는 GDPR 영향을 받는 국가에서 16세 미만 사용자가 GDPR 약관에 동의했는지 여부를 반환받을 수 있는 Configuration.getAgeGateU16Agree() 메서드를 제공합니다. 이 메서드는 반드시 16세 미만 앱 사용자가 약관 팝업에서 동의 여부를 선택한 후에 호출해야 합니다. 이 값이 true이면 16세 미만 사용자가 약관을 동의한 상태이며, false이면 그 반대입니다. 서드 파티 라이브러리 사용 시 사용자 나이가 16세 미만인지 아닌지를 판단해 앱 기능을 제한하려는 경우 Configuration.getAgeGateU16Agree() 메서드를 이용할 수 있습니다. 예를 들어, 이 메서드를 사용해 어린이 대상 사용자에게 개인화된 광고를 제공하지 않도록 설정할 수 있습니다.

using hive;

Boolean ageGateU13 = AuthV4.getAgeGateU13();
#include <HIVE_SDK_Plugin/HIVE_CPP.h>
using namespace std;
using namespace hive;

bool ageGateU16Agree = Configuration::getAgeGateU16Agree();
import com.hive.Configuration

val ageGateU16Agree = Configuration.ageGateU16Agree()
import com.hive.Configuration;

boolean ageGateU16Agree = Configuration.INSTANCE.getAgeGateU16Agree();
import HIVEService

var ageGateU16Agree: Bool = ConfigurationInterface.getAgeGateU16Agree()
#import <HIVEService/HIVEService-Swift.h>

BOOL ageGateU16 = [HIVEConfiguration getAgeGateU16Agree];

앱이 법정대리인 동의 확인 약관을 사용하는 경우, 앱 사용자가 법정대리인 동의를 받았는지 여부를 Configuration.getLegalGuardianConsentAgree() 메서드를 반환받을 수 있습니다. 값이 true 이면 동의한 상태입니다.

using hive;    

Boolean legalGuardianConsentAgree = Configuration.getLegalGuardianConsentAgree();
#include <HIVE_SDK_Plugin/HIVE_CPP.h>    
using namespace std;    
using namespace hive;    

bool ageGateU16Agree = Configuration::getLegalGuardianConsentAgree();
import com.hive.Configuration    

val legalGuardianConsentAgree = Configuration.legalGuardianConsentAgree()
import com.hive.Configuration;    

boolean legalGuardianConsentAgree = Configuration.INSTANCE.getLegalGuardianConsentAgree();
import HIVEService    

var legalGuardianConsentAgree: Bool = ConfigurationInterface.getLegalGuardianConsentAgree()
#import <HIVEService/HIVEService-Swift.h>    

BOOL legalGuardianConsentAgree = [HIVEConfiguration getLegalGuardianConsentAgree];

공지 팝업

게임 서비스 운영 중 업데이트 후 하위 버전 차단 또는 서버 점검 중 접속 차단이 필요할 때, 콘솔에 설정된 정보에 따라 업데이트, 일반 공지, 서버 점검 순으로 팝업을 노출합니다. 게임은 Hive SDK가 제공하는 표준 UI를 사용하거나, Hive에서 제공하는 정보를 기반으로 한 커스터마이즈된 UI를 자체적으로 구현할 수 있습니다. 이를 통해 게임 클라이언트는 사용자에게 필요한 정보를 효과적으로 제공할 수 있습니다.

팝업 설명
업데이트 특정 버전의 게임 이용을 차단하고 업데이트를 위한 링크를 제공
일반 공지 강제가 아닌 게임 업데이트에 대한 안내, 전체 유저에게 고지해야 할 중요한 공지사항의 노출을 위해 이용
서버 점검 게임 서버별로 점검 여부를 설정할 수 있으며, 점검 시간 동안 게임 관련 링크 제공을 권장함
Note
  • 업데이트 및 점검 팝업은 SDK 초기화 단계에 포함되어 있지만 서버 점검 팝업은 서버가 자동으로 선택되거나, 유저가 직접 선택 혹은 변경하는 단계에 필수적으로 노출될 수 있도록 구현합니다.
  • Hive 초기화 단계 이후 ~ 게임 서버 접속 시점(게임에서 접속을 강제로 종료 시킬 수 있는 시점) 이전에 게임을 시작하지 않고 대기할 수 있을 경우, 서버 점검 팝업을 설정해도 접속을 차단할 수 없습니다. 이에 대비하여 게임에서 접속을 강제로 종료 시킬 수 있는 시점에 진입하는 단계에 서버 점검 팝업을 띄워야 합니다.

 


게임 서버가 여러 개의 경우 유저가 선택하거나 설정된 게임 서버 정보를 반드시 Hive에 설정해야 합니다. 유저가 게임 서버를 선택해야 하는 경우 서버 점검 팝업 노출 전에 서버 선택 UI를 구현하고 Configuration 클래스의 setServerId() 혹은 메서드를 호출하여 Hive 설정을 변경해 주세요. 해당 시점에 Hive 설정 변경과 함께 프로모션 새소식 데이터를 같이 갱신하고 싶다면 Configuration 클래스의 setServerId()대신 updateServerId()를 호출해 주세요.

게임 서버가 설정된 이후에는 게임에서 원하는 시점에 서버 점검 팝업을 노출할 수 있습니다. Hive 콘솔에서 서버 점검 팝업을 설정하고 점검 시간 동안 게임 접속을 차단시킵니다. 노출되는 팝업은 Hive SDK에서 제공하는 UI를 이용하거나 Hive에서 제공하는 정보만 수신하여 UI를 커스터마이징할 수 있습니다. 서버 점검 팝업은 게임 서버별로 설정이 가능합니다.

공지 팝업 설정하기

공지 팝업은 사용자에게 서버 점검, 업데이트, 일반 공지, 국가 제한 등 중요한 정보를 전달하는 데 사용됩니다. 이러한 팝업은 Hive 콘솔에서 관리하며, 사용자에게 표시하기 전에 반드시 해당 팝업을 Hive 콘솔에서 설정해야 합니다. 설정이 완료되면 팝업 노출 API를 호출하여 공지사항을 사용자에게 노출시킬 수 있습니다. 팝업 설정과 관련된 자세한 내용은 콘솔 가이드 > 프로비저닝 > 공지 팝업 가이드를 참고하세요.

공지 팝업 띄우기

Hive는 서버 점검 팝업, 업데이트 팝업 및 일반 공지 팝업을 직접 띄우기도 하고 여러분이 팝업을 구성하여 띄울 수 있도록 팝업에 넣을 내용을 반환하기도 합니다. Hive가 팝업을 띄우면 팝업은 Hive UI 스타일로 나타나지만 여러분이 직접 팝업을 띄우면 원하는 스타일로 팝업을 띄울 수 있습니다. Hive 팝업 이용 여부에 따라 아래와 같이 파라미터를 설정하여 AuthV4 클래스의 checkMaintenance() 메서드를 호출하세요.

팝업 이용 방법 설명
Hive가 제공하는 팝업 이용하기 isShow 파라미터를 true로 설정하세요.
직접 구성한 팝업을 제공하기 위해 팝업 정보 요청하기 isShow 파라미터를 false로 설정하세요. 팝업 정보에 대한 자세한 내용은 하단의 Hive가 반환하는 점검 팝업 정보를 참고하세요.

아래는 팝업 예시 스크린샷입니다.

다음은 Hive가 제공하는 UI로 서버 점검 팝업을 띄우는 예제 코드입니다. 서버 점검이 완료되지 않았을 때 유저가 이 팝업을 닫으면 종료 이벤트가 ResultAPI result로 전달됩니다.

API Reference: Unity®

using hive;    
    // Whether to use Hive SDK UI    
    Boolean isShow = true;    

    AuthV4.checkMaintenance(isShow, (ResultAPI result, List maintenanceInfoList) => {    
        if (result.isSuccess()) {    
            // If there is no inspection data    
            // If isShow is false    
        }    
        else if (result.needExit()) {    
            // TODO: Implement app termination functionality    
            // Example) Application.Quit();    
        }    
});

API Reference: C++

#include <HIVE_SDK_Plugin/HIVE_CPP.h>    
    using namespace std;    
    using namespace hive;    
    // Whether to use Hive SDK UI    
    bool isShow = true;    

    AuthV4::checkMaintenance(isShow, [=](ResultAPI const & result, vector const & maintenanceInfolist){    
        if (result.isSuccess()) {    
            // If there is no registered inspection data    
            // If isShow is false    
        }    
        else if (reuslt.needExit()) {    
            // TODO: Implement app termination functionality    
            // Cocos2d-x engine user    
            // Example) exit(0);    
            // Unreal Engine User    
            // Example) UKismetSystemLibrary::QuitGame(GetWorld(), nullptr, EQuitPreference::Quit, false);    
        }    
});

API Reference: Kotlin

import com.hive.AuthV4;
import com.hive.AuthV4;   
import com.hive.ResultAPI;
    // Whether to use Hive SDK UI    
    val isShow = true    
    AuthV4.checkMaintenance(isShow, object : AuthV4.AuthV4MaintenanceListener {    
        override fun onAuthV4Maintenance(result: ResultAPI, maintenanceInfo: ArrayList<AuthV4.AuthV4MaintenanceInfo>?) {    
            if (result.isSuccess) {    
                // If there is no registered inspection data    
                // If isShow is false    
            }    
            else if (result.needExit()) {    
                // TODO: Implement app termination functionality    
                // Example) exitProcess(0)    
            }    
        }    
})

API Reference: Java

import com.hive.AuthV4;    
    import com.hive.ResultAPI;    
    // Whether to use Hive SDK UI    
    boolean isShow = true;    
    AuthV4.INSTANCE.checkMaintenance(isShow, (result, maintenanceInfo) -> {    
        if (result.isSuccess()) {    
            // If there is no registered inspection data    
            // If isShow is false    
        }    
        else if (result.needExit()) {    
            // TODO: Implement app termination functionality    
            // Example) System.exit(0);    
        }    
});

API Reference: Swift

import HIVEService    
    // Whether to use Hive SDK UI    
    let isShow = true    

    AuthV4Interface.checkMaintenance(isShow) { result, maintenances in    
        if result.isSuccess() {    
            // If there is no actual inspection data    
            // If isShow is false    
        }    
        else if result.needExit() {    
            // TODO: Implement app termination functionality    
            // Example) exit(0)    
        }    
}

API Reference: Objective-C

#import <HIVEService/HIVEService-Swift.h>    
    // Whether to use Hive SDK UI    
    BOOL isShow = YES;    

    [HIVEAuthV4 checkMaintenance:isShow handler: ^(HIVEResultAPI *result, NSArray<HIVEAuthV4MaintenanceInfo *> *maintenanceInfolist) {    
        if (result.isSuccess) {    
            // If there is no registered inspection data    
            // If isShow is false    
        }    
        else if (result.needExit) {    
            // TODO: Implement app termination functionality    
            // Example) exit(0);    
        }    
}];
#include "HiveAuthV4.h"

// Hive SDK UI 사용여부
bool bIsShow = true;

FHiveAuthV4::CheckMaintenance(bIsShow, FHiveAuthV4OnMaintenanceInfoDelegate::CreateLambda([this](const FHiveResultAPI& Result, const TArray<FHiveAuthV4MaintenanceInfo>& AuthV4MaintenanceInfoArray) {

        if (Result.IsSuccess()) {
                // 등록된 점검 데이터가 없는 경우
                // isShow가 false인 경우
        } else if (Result.NeedExit()) {
                // TODO: 앱 종료 기능을 구현하세요
                // 예) UKismetSystemLibrary::QuitGame(GetWorld(), nullptr, EQuitPreference::Quit, false);
        }

}));
Note

서버 점검 팝업의 확인, 상세보기 버튼을 누른 시점에 iOS와 Android는 게임 영역에서 앱을 종료할 것을 요청하는 콜백을 전달합니다. 앱 종료 요청 콜백을 전달받는 시점에 앱을 종료해 주세요. 닫기(X) 버튼을 누를 시 팝업만 닫히고 강제 종료 요청 콜백을 전달하지 않습니다.

Hive가 반환하는 공지 팝업 정보

Hive는 checkMaintenance() 메서드를 통해 Hive 콘솔에 설정된 팝업 정보를 요청 받으면, 다음의 표에 정리된 값들을 AuthV4MaintenanceInfo 오브젝트에 담아 반환하며 이 값이 null로 리턴되면 팝업을 띄울 내용이 없음을 의미합니다.

  • AuthV4MaintenanceInfo 오브젝트 상세
    필드명 설명 타입
    title 팝업 제목 String
    message 팝업 내용 String
    button 팝업 버튼의 라벨 문구 String
    action 팝업 버튼을 눌렀을 때 어떤 동작을 할 것인지 의미
    OPEN_URL: 외부 브라우저로 전달된 URL을 실행
    EXIT: 앱 종료
    DONE: 아무 처리 하지 않고 점검 팝업 종료
    AuthV4MaintenanceActionType 열거형
    url 외부 브라우저로 띄울 URL.
    action
    필드 값이 OPEN_URL일 때 유효함
    String
    remainingTime 점검 완료까지 남은 초단위 시간. 시간은 실시간 갱신되며 0초가 되면 앱이 종료됨 Integer
    startDate 점검 시작일 String
    endDate 점검 종료일 String
    customerButton 고객센터 버튼 텍스트(점검 팝업에서는 "" 전달됨) String
    customerLink 고객센터 버튼 링크(점검 팝업에서는 "" 전달됨) String
    exButtons 팝업 버튼 정보(최대 3개까지 전달됨) JSONArray
    exButtons.action 팝업 버튼을 눌렀을 때 어떤 동작을 할 것인지 의미
    OPEN_URL: 외부 브라우저로 전달된 URL을 실행
    EXIT: 앱 종료
    DONE: 아무 처리 하지 않고 점검 팝업 종료
    AuthV4MaintenanceActionType 열거형
    exButtons.button 팝업 버튼의 라벨 문구 String
    exButtons.url 외부 브라우저로 띄울 URL.
    action
    필드 값이 OPEN_URL일 때 유효함
    String

리모트 컨피그레이션

Hive를 적용한 게임에서는 앱의 각 버전과 1 대 1 매핑 되는 게임 서버 URL을 관리할 수 있습니다. 리모트 컨피그레이션과 관련된 자세한 내용은 콘솔 가이드 > 프로비저닝 > 리모트 컨피그레이션 가이드를 참고하세요.

게임 서버 URL은 Configuration 클래스의 getMetaData() API를 호출하여 string 형태로 전달됩니다. 다음은 게임 서버 URL을 호출하는 예제 코드입니다.

API Reference: HiveConfiguration getMetaData

using hive;    
    // data key    
    String key = "game_server_url";    
    // Whether data is updated    
    Boolean forceReload = false;    
    // metadata call    
    Configuration.getMetaData(key, forceReload, (ResultAPI result, String value) => {    
    if (result.isSuccess()) {    
    // call successful    
    }    
});

API Reference: Configuration:: getMetaData

#include <HIVE_SDK_Plugin/HIVE_CPP.h>    
    using namespace std;    
    using namespace hive;    
    // data key    
    string key = "game_server_url";    
    // Whether data is updated    
    bool forceReload = false;    

    // metadata call    
    Configuration::getMetaData(key, forceReload, [=](ResultAPI const & result, string value) {    
         if (result.isSuccess()) {    
             // call successful    
         }    
});

API Reference: Configuration.getMetaData

import com.hive.Configuration    
    import com.hive.ResultAPI    
    // data key    
    val key = "game_server_url"    
    // Whether data is updated    
    val forceReload = false    
    // metadata call    
    Configuration.getMetaData(key, forceReload, object : Configuration.GetMetaDataListener {    
         override fun onGetMetaData(result: ResultAPI, data: String) {    
             if (result.isSuccess) {    
                 // call successful    
             }    
         }    
})

API Reference: Configuration.INSTANCE .getMetaData

import com.hive.Configuration;    
    import com.hive.ResultAPI;    
    // data key    
    String key = "game_server_url";    
    // Whether data is updated    
    boolean forceReload = false;    
    // metadata call    
    Configuration.INSTANCE.getMetaData(key, forceReload, (result, data) -> {    
         if (result.isSuccess()) {    
             // call successful    
         }    
});

API Reference: ConfigurationInterface.getMetaData

import HIVEService    
    // data key    
    let key = "game_server_url"    
    // Whether data is updated    
    let forceReload = false;    

    // metadata call    
    ConfigurationInterface.getMetaData(key, forceReload: forceReload) { result, value in    
         if result.isSuccess() {    
             // call successful    
         }    
}

API Reference: HIVEConfiguration getMegaData

#import <HIVEService/HIVEService-Swift.h>    
    // data key    
    NSString *key = @"game_server_url";    
    // Whether data is updated    
    BOOL forceload = NO;    
    // metadata call    
    [HIVEConfiguration getMegaData: key forceReload: forceReload handler: ^(HIVEResultAPI *result, NSString *value) {    
    if ([result isSuccess]) {    
    // call successful    
    }    
}];
#include "HiveConfiguration.h"

// 데이터 키
FString Key = TEXT("game_server_url");

// 데이터 갱신 여부
bool bForceReload = false;

// 메타 데이터 호출
FHiveConfiguration::GetMetaData(Key, bForceReload, FHiveConfigurationOnMetaDataDelegate::CreateLambda([this](const FHiveResultAPI& Result, const FString& Value) {
        if (Result.IsSuccess()) {
                // 호출 성공
        }
}));
Note

forceReloadfalse로 설정하면 캐시 데이터를 사용할 수 있습니다.

  • forceReloadtrue인 경우에는 getMetaDate()를 호출하면 로컬에 저장된 데이터는 삭제되고 서버에서 최신 데이터를 가져오려고 시도합니다. 이는 일반적으로 앱 재실행 시 새로고침과 같은 작업에 사용합니다.

 

리모트 로깅

리모트 로깅은 클라이언트의 디버깅 로그를 Hive 서버로 전송하여, 이미 출시된 앱의 디버깅 로그를 원격으로 확인할 수 있는 기능입니다. 이 기능을 사용하면 특정 타겟 유저의 로그만 활성화하여 모니터링할 수 있습니다. 리모트 로깅과 관련된 자세한 내용은 콘솔 가이드 > 프로비저닝 > 리모트 로깅 가이드를 참고하세요.

  • 활성화 리모트 로깅을 활성화하면 Hive 콘솔에 입력한 수집 시간 동안 Hive 로그와 게임 로그를 수집합니다. Hive 로그는 SDK에서 설정한 값을 기본으로 수집되고, 게임 로그는 게임에서 설정한 값이 수집됩니다.
Warning

사용 시 주의 사항

  • 리모트 로깅을 이용할 때 로그를 과도하게 발생시키면 네트워크 트래픽과 로그 처리에 집중되어 게임 성능에 영향을 미칠 수 있습니다. 루프 형태로 발생하는 반복적인 로그는 최대한 생략하거나 하나의 로그로 모아 발송하기를 권장합니다.
  • 게임 로그에 적용하기 전 게임빌컴투스플랫폼 솔루션아키텍트파트 담당자와 협의하세요.

  • 타겟팅 리모트 로깅은 Hive SDK 초기화를 최소 한 번 이상 거쳐 DID가 발급된 유저만을 대상으로 설정할 수 있습니다. 다만 SDK를 초기화하기 전에 크래시나 오류가 발생한 앱에서는 사용할 수 없습니다.

  • 동작 방식

  • 예제 코드 게임에서 로그를 수집하려는 위치마다 아래 코드를 삽입합니다.

API Reference: Logger .log

using hive;    
Logger.log("Enter logging contents");

API Reference: Logger:: log

    #include <HIVE_SDK_Plugin/HIVE_CPP.h>    
        using namespace std;    
        using namespace hive;    
    Logger::log("Enter logging contents");

API Reference: Logger.i

import com.hive.Logger;    
Logger.INSTANCE.i("Enter logging contents");

API Reference: LogInterface.log

import HIVEBase    
LogInterface.log(sourceInfo: "Log source information (class, method name)", type: .Info, tag: "Log tag", msg: "Log message")

API Reference: Objective-C

#import <HIVEBase/HIVEBase-Swift.h>

[HIVELogger logWithSourceInfo:@"Log source information (class, method name)" type: LogTypeInfo tag: @"Log tag" msg: @"Log message"];
#include "HiveLogger.h"

FHiveLogger::Log(TEXT("로깅 내용 입력"));