Hive를 적용하는 방법은 여러분이 사용하는 게임 엔진이나 게임 앱이 구동되는 플랫폼이 무엇인지에 따라 다릅니다. 그렇지만 Hive에 대한 설정값은 공통적으로 hive_config.xml이라는 파일에 정의합니다. 이 파일은 여러분의 게임 프로젝트에 반드시 포함되어야 합니다. hive_config.xml을 이용하여 설정값을 쉽게 저장/변경할 수 있으며 게임이 실행된 이후에는 Hive가 제공하는 Configuration 클래스의 여러 메서드를 이용해 런타임의 설정값을 수정할 수도 있습니다.
설정 조회 및 변경
파일에 설정하기
Hive SDK의 설정 파일은 xml 기반으로 구성되어 있으며, Hive 클라이언트는 hive_config.xml 파일에 있는 값으로 초기화합니다. 앱 실행 중 변경되지 않는 정적인 항목은 모두 파일에서 설정하기를 권장합니다. 설정 파일 이름은 반드시 hive_config.xml이어야 하며 아래에 위치해야 합니다.
– Unity 2021 이상: <프로젝트_루트>/Assets/HiveSDK/hive.androidlib/src/main/res/raw
– Unity 2021 미만: <프로젝트_루트>/Assets/Plugins/Android/res/raw/
게임 실행 중 조회 및 변경하기
파일을 이용한 설정 외에도 게임 실행 중 Hive 설정값을 조회하거나 변경할 수 있습니다. 이를 위해 Configuration 클래스에서는 Hive 설정값의 각 요소 이름 앞에 get이나 set을 붙인 메서드를 제공합니다. 예를 들어 게임 서버 값을 조회할 때는 getServerId()
메서드를, 변경할 때는 setServerId()
메서드를 이용할 수 있습니다. 게임 언어 값처럼 setGameLanguage()
메서드를 이용해 변경할 수는 있지만 조회할 메서드가 제공되지 않는 경우도 있습니다. 자세한 내용은 설정 가능 항목에서 요소별 get/set 권한을 확인하세요.
게임 실행 중 Hive 설정을 변경해야 하는 경우는 다음과 같습니다.
- Hive SDK 초기화 전
Hive SDK를 초기화하기 전 게임 서버나 게임 언어를 Configuration 클래스의 API 설정에 반영합니다. - Hive SDK 초기화 후 서버 점검 팝업을 띄우기 전, 유저가 게임 서버를 선택하는 경우
Hive SDK를 초기화한 뒤 게임 서버 선택 UI를 노출하고, 유저가 고른 게임 서버를 Hive 설정에 반영합니다. 이 과정을 실행한 후 서버 점검 팝업을 띄웁니다. - 게임 진입 후, 게임 설정에서 유저가 게임 언어 또는 게임 서버를 변경하는 경우
게임을 플레이하는 도중에 게임 설정이나 다른 메뉴에서 게임 서버 또는 게임 언어 변경 UI를 구성할 수 있습니다. 유저가 해당 UI를 이용해 서버나 언어를 변경했다면 이 내용을 Configuration 클래스의 API 설정에도 반영해 주세요. - 그 외 게임 기획에 따라 게임 정보가 변경되는 경우
위에 언급한 상황 외에도 Hive 설정값과 매칭하는 게임 정보가 변경되는 경우라면 Configuration 클래스의 API 설정에 항상 반영해야 합니다.
예를 들어 파일에서 zone 필드 값을 sandbox
로 설정했더라도, Configuration 클래스를 이용해 이 값을 real
로 변경하고 SDK를 초기화하면 Hive는 real
을 기준으로 동작합니다. hive_config.xml 파일의 zone 필드 값은 여전히 sandbox
를 유지합니다.
setZone
함수는 setup
함수를 호출하기 전에 호출해야 정상 작동합니다.
다음은 유저의 zone 설정을 변경하는 예제 코드입니다.
API Reference: hive.Configuration.setZone
1 2 3 4 |
// 설정 xml 파일에 zone 필드가 sandbox 로 설정되어 있어도 real 로 설정된 것과 동일한 동작을 수행한다. hive.Configuration.setZone(ZoneType.REAL); |
API Reference: hive::Configuration::setZone
1 2 3 |
hive::Configuration::setZone(hive::ZoneType::REAL); |
API Reference: Configuration.setZone
1 2 3 |
Configuration.setZone(ZoneType.REAL); |
API Reference: HIVEConfiguration:setZone
1 2 3 |
[HIVEConfiguration setZone:kHIVEZoneTypeReal]; |
Hive 테마 설정
hiveDark
를 사용하여 어두운 테마를 노출 할 수 있습니다. 기본값은 hiveLight
입니다.
API Reference: hive.Configuration.setHiveTheme
1 2 3 4 |
Configuration.setHiveTheme(HiveThemeType.hiveLight); Configuration.setHiveTheme(HiveThemeType.hiveDark); |
API Reference: hive::Configuration::setHiveTheme
1 2 3 4 |
hive::Configuration::setHiveTheme(hive::HiveThemeType::hiveLight); hive::Configuration::setHiveTheme(hive::HiveThemeType::hiveDark); |
API Reference: Configuration.setHiveTheme
1 2 3 4 |
Configuration.setHiveTheme(Configuration.HiveThemeType.hiveLight); Configuration.setHiveTheme(Configuration.HiveThemeType.hiveDark); |
API Reference: HIVEConfiguration:setHiveTheme
1 2 3 4 |
[HIVEConfiguration setHiveTheme:HIVEThemeTypeHiveLight]; [HIVEConfiguration setHiveTheme:HIVEThemeTypeHiveDark]; |
로그 타입 설정
Logger.setLogFilter API를 사용하여 Hive 로그 타입을 설정할 수 있습니다. 아래 6가지 유형 중 LogType.Verbose이 기본 설정값입니다.
- LogType.Verbose: 개발 단계 출력 로그
- LogType.Debug: 전체 단계 상세 로그
- LogType.Info: Hive SDK 진행 단계 및 결과 콜백 (권장)
- LogType.Warning: 예기치 않은 상황이 발생했으나, 게임 실행에 영향이 없는 에러
- LogType.Error: 설정 정보 누락 및 게임 실행에 영향을 주는 에러
- LogType.None: 어떠한 로그도 출력하지 않음
- 로그 타입 순서는 다음과 같이 높은 수준에서 낮은 수준으로 구분되며, 설정한 로그 타입보다 낮은 수준만 출력됩니다.
- Verbose > Debug > Info > Waring > Error > None
- Configuration 클래스의
useLog
를true
로 설정하는 경우에만 해당 설정이 유효합니다.
1 2 3 4 5 |
>LogFilter logFilter = new LogFilter(); logFilter.coreLog = hive.LogType.Info; logFilter.serviceLog = hive.LogType.Info; hive.Logger.setLogFilter(logFilter); |
1 2 3 4 5 |
LogFilter logFilter = new LogFilter(); logFilter.coreLog = LogType::Info; logFilter.serviceLog = LogType::Info; Logger.setLogFilter(logFilter); |
1 2 3 4 5 6 7 |
// 로그 필터 선언 LogFilter logFilter = new LogFilter(); logFilter.coreLog = LogType.Info; logFilter.serviceLog = LogType.Info; // 로그 필터 설정 Logger.setLogFilter(logFilter); |
1 2 3 4 5 6 7 |
// 로그 필터 선언 val logFilter = LogFilter() logFilter.coreLog = LogType.Info logFilter.serviceLog = LogType.Info // 로그 필터 설정 Logger.logFilter = logFilter |
1 2 |
HIVELogFilter* logFilter = [[HIVELogFilter alloc]initWithCoreLog:HIVELogTypeInfo serviceLog:HIVELogTypeInfo]; [HIVELogger setLogFilter:logFilter]; |
1 2 |
let logFilter = LogFilter.init(coreLog:LogType.Info, serviceLog: LogType.Info) LogInterface.setLogFilter(logFilter) |
설정 가능 항목
요소 정보
파일에서 관리할 수 있는 요소는 파란색으로 표시되어 있습니다. Configuration 클래스의 메서드로도 활용할 수 있는 요소는 사용하는 함수가 제공됩니다.
요소 | 설명 | 함수 | ||||
appId | 게임 빌드의 식별자입니다. 이 항목이 없으면 Android에서는 앱의 기본 패키지명을, iOS에서는 번들 ID를 사용합니다. | get set |
||||
serverId | 게임에서 서버를 지역별로 분리 운영할 때 확인할 수 있는 각 게임 서버의 식별자입니다. Hive 식별자 정책에 따라 작성되어야 합니다. | get set |
||||
zone | Hive 클라이언트가 접속할 서버입니다.
|
get set |
||||
useLog | Hive 클라이언트의 내부 동작에 대한 로그 활성화 여부입니다.
|
get set |
||||
ageGateU13 | Hive SDK에서 COPPA 적용 여부입니다.
|
get set |
||||
permissions |
권한 종류별로 설정하는 권한 요청 여부입니다. Android 전용 기능입니다. SDK v4.16.3부터 derpecated
|
get set |
||||
company | 게임 퍼블리싱 업체입니다.
|
get set |
||||
companyIndex | 숫자로 표기한 게임 퍼블리싱 업체입니다. 등록된 companyIndex 값을 프로비저닝 서버와 통신으로 전달받은 후, 애널리틱스 로그로 전송합니다. 이 동작은 게임 스튜디오에서 설정할 필요가 없습니다. | – | ||||
channel | 게임 앱에서 사용하는 로그인 서비스 플랫폼입니다.
|
get | ||||
market | 인앱 구매를 결제할 마켓입니다.
|
get | ||||
httpConnectTimeout | Hive 클라이언트 내부에서 사용하는 HTTP Connect의 타임아웃 시간(초)입니다. 기본 값은 8초로 설정되어 있으며 특수한 상황이 아닌 이상 값 변경을 금지합니다. | get set |
||||
httpReadTimeout | Hive 클라이언트 내부에서 사용하는 HTTP Read 타임아웃 시간(초)입니다. 기본 값은 8초로 설정되어 있으며 특수한 상황이 아닌 이상 값 변경을 금지합니다. | get set |
||||
maxGameLogSize | 비정형 데이터 파일로 저장하는 게임 로그의 최대 저장 개수입니다. Hive 애널리틱스 v2에서 이 값을 수집합니다. 기본 값은 50개로 설정되어 있으며 특수한 상황이 아닌 이상 값 변경을 금지합니다. | get set |
||||
providers | 서드 파티 라이브러리에 대한 속성값을 지정합니다. | – | ||||
<providers>에 속하는 요소로, 인증 v4로 인증할 때 사용하는 Facebook 관련 설정을 정의합니다. (+4.14.0) Facebook SDK를 사용할 때 Hive SDK에서 기본으로 설정하는 email 권한(Facebook 계정 이메일 주소 접근)과 public_profile(Facebook 공개 프로필 접근) 권한 외에 추가 권한이 필요하다면, Facebook 콘솔에서 해당 권한을 요청한 후 |
– | |||||
<providers>에 속하는 요소로, 인증 v4로 인증할 때 사용하는 Google 관련 설정을 추가합니다. (+4.14.0) | – | |||||
<providers>에 속하는 요소로, 인증 v4로 인증할 때 사용하는 WeChat 관련 설정을 추가합니다. (+4.14.0) | – | |||||
<providers>에 속하는 요소로, 인증 v4로 인증할 때 사용하는 QQ 관련 설정을 추가합니다. (+4.14.0) | – | |||||
vk | <providers>에 속하는 요소로, 인증 v4로 인증할 때 사용하는 VK 관련 설정을 추가합니다. (+4.14.0) | – | ||||
line | <providers>에 속하는 요소로, 인증 v4로 인증할 때 사용하는 LINE 관련 설정을 추가합니다. (+4.14.0) | – | ||||
weverse | <providers>에 속하는 요소로, 인증 v4로 인증할 때 사용하는 Weverse 관련 설정을 추가합니다. (+4.15.2) | – | ||||
signinwithapple | <providers>에 속하는 요소로, 인증 v4로 인증할 때 사용하는 Sign in with Apple 관련 설정을 추가합니다. (Android에서 Apple 계정으로 로그인할 때 사용합니다.) (+4.15.6) | – | ||||
Adjust | <providers>에 속하는 요소로, 마켓 성과 측정 도구 Adjust를 사용하기 위한 관련 설정을 추가합니다. (+4.14.0) | – | ||||
Singular | <providers>에 속하는 요소로, 마켓 성과 측정 도구 Singular를 사용하기 위한 관련 설정을 추가합니다. (+4.14.0) | – | ||||
AppsFlyer | <providers>에 속하는 요소로, 마켓 성과 측정 도구 AppsFlyer를 사용하기 위한 관련 설정을 추가합니다. (+4.14.0) | – | ||||
Firebase | <providers>에 속하는 요소로, 마켓 성과 측정 도구 Firebase Analytics를 사용하기 위한 관련 설정을 추가합니다. (+4.16.1) | – | ||||
trackers | 서드 파티 어트리뷰션에 대한 설정 모음입니다. (SDK 4.14.0부터 deprecated) | – | ||||
tracker | <trackers>에 속하는 요소로, 서드 파티 어트리뷰션 각각에 대한 설정을 정의합니다. (SDK 4.14.0부터 deprecated) | – | ||||
qqAppId | 인증 v4를 사용하는 게임에서 QQ 로그인 시 필요한 QQ AppID 값입니다. (+v4.5.0) (SDK 4.14.0부터 deprecated) | – | ||||
vkAppId | 인증 v4를 사용하는 게임에서 VK 로그인 시 필요한 VK AppID 값입니다. (+v4.6.0) (SDK 4.14.0부터 deprecated) | – | ||||
wechatAppId | 인증 v4를 사용하는 게임에서 WeChat 로그인 시 필요한 WeChat AppID 값입니다. (+v4.6.0) (SDK 4.14.0부터 deprecated) | – | ||||
wechatAppSecret | 인증 v4를 사용하는 게임에서 WeChat 로그인 시 필요한 WeChat App Secret 값입니다. (+v4.6.0) (SDK 4.14.0부터 deprecated) | – | ||||
wechatPaymentKey | WeChat 결제 시 사용하는 WeChat Payment Key 값입니다. (+v4.7.0) (SDK 4.14.0부터 deprecated) | – | ||||
facebookPermissions | Facebook 로그인 시 요청하는 추가 권한입니다. (+v4.5.4, v4.6.3, v4.7.2, v4.8.1, v4.9.0) key(facebookPermissions)를 추가하지 않는 경우: value 없이 key만 추가하는 경우: key와 value를 추가하는 경우: (SDK 4.14.0부터 deprecated) |
– | ||||
exitEventEnabled | exitEvent란 Hive SDK가 아니라 게임에서 앱을 직접 종료해야 하는 상황임을 알리는 이벤트입니다. 이 값이 True이면 이 이벤트룰 수신하며 이 때 Hive SDK는 게임 앱을 직접 종료하지 않습니다. 이 값이 False이면 Hive SDK가 게임 앱을 직접 종료할 수 있습니다.(+v4.9.0) (SDK 4.16.4부터 deprecated). | – | ||||
analyticsSendLimit | 로그 전송 주기마다 전송할 로그의 최대치입니다. 기본 값은 5로 설정되어 있습니다. (+v4.11.0) | get set |
||||
analyticsQueueLimit | 쌓을 수 있는 로그의 최대치입니다. 기본 값은 50으로 설정되어 있습니다. (+v4.11.0) | get set |
||||
analyticsSendCycle | 로그 전송 주기입니다. 초로 설정 가능하며 설정한 주기마다 애널리틱스 로그를 전송합니다. 기본 값 1초입니다. (+v4.11.0) | get set |
||||
useCrashReport |
iOS 전용 기능으로 앱이 에러로 인하여 강제 종료(크래시) 발생하기 직전의 상황을 감지하여 서버 미전송 대기중인 Hive 애널리틱스 로그를 파일로 저장합니다. 비슷한 기능을 하는 외부 서드 파티 크래시 리포터를 이용할 경우 충돌 방지를 위해 false로 설정하여 비활성화 해야 합니다.(+v4.16.0) (SDK v4.16.3 부터 derpecated) |
– | ||||
saveAnalyticsLogBeforeCrash | iOS 전용 기능으로, 앱이 NSException 타입 에러 또는 Unix singal 타입 에러 때문에 강제 종료되기 직전 상황을 감지하여 서버에 전송하지 않고 대기중인 Hive 애널리틱스 로그를 파일로 저장합니다. 외부 서드 파티 크래시 리포터를 이용할 경우 충돌 방지를 위해 false 로 설정하여 비활성화 해야 합니다. 4.16.3 미만에서 사용되었던 useCrashReport 값은 saveAnalyticsLogBeforeCrash 값으로 사용됩니다. (+v4.16.3) |
– | ||||
googleClientId | iOS에서 Google 로그인 시 필요한 iOS – Google Client ID 값입니다. (인증 v1: v4.5.0+, 인증 v4: v4.11.0+) (SDK 4.14.0부터 deprecated) |
– | ||||
googleServerClientId | 인증 v4를 사용하는 게임에서 Google Play 게임 로그인 시 필요한 웹 애플리케이션의 Client ID입니다. (Android: v4.5.0+, iOS: v4.11.0+) (SDK 4.14.0부터 deprecated) | – | ||||
hiveSDKVersion | Hive SDK 버전입니다. | get | ||||
referenceSDKVersion | Hive SDK가 참조하는 SDK 버전입니다. | get | ||||
gameLanguage | Hive SDK에 설정하는 게임 언어입니다. | set | ||||
hiveCountry | Hive SDK 서버에서 판단한 국가 코드입니다. | get | ||||
hivePermissionViewOn | Hive SDK 권한고지 팝업 노출 여부입니다. (+4.12.1)
|
set |
hive_config.xml 예제
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 |
<properties> <useAuthv1>false</useAuthv1> <useAuthv4>true</useAuthv4> <appId>com.com2us.hivesdk.normal.freefull.apple.global.ios.universal</appId> <gameLanguage>en</gameLanguage> <!-- Hive 플랫폼의 서버 선택. sandbox는 개발용, real은 실계 (sandbox, real) --> <zone>sandbox</zone> <!-- SDK 내부 동작 로그 사용 여부 설정 (true, false) --> <useLog>true</useLog> <!-- Hive SDK를 이용한 푸시 서비스 사용 여부 설정 (true, false) --> <usePush>false</usePush> <!-- 회사 설정 (C2S: 컴투스, GVI: 컴투스홀딩스) --> <company>C2S</company> <!-- 채널 설정 (C2S: Hive 플랫폼) --> <channel>C2S</channel> <!-- 결제 마켓 설정 (GO: Google Play, LE: Com2us Lebi, AP: Apple App Store) --> <market>GO</market> <!-- Hive SDK 내부에서 사용되는 HTTP Connect Timeout 시간을 초단위로 설정 (특별한 경우가 아니면 변경 금지) --> <httpConnectTimeout>8</httpConnectTimeout> <!-- Hive SDK 내부에서 사용되는 HTTP Read Timeout 시간을 초단위로 설정 (특별한 경우가 아니면 변경 금지) --> <httpReadTimeout>8</httpReadTimeout> <maxGameLogSize>50</maxGameLogSize> <analyticsSendLimit>120</analyticsSendLimit> <analyticsQueueLimit>1200</analyticsQueueLimit> <analyticsSendCycle>1</analyticsSendCycle> <hivePermissionViewOn>true</hivePermissionViewOn> <universalLink>https://hiveota.withhive.com/hivesdk/normal/</universalLink> <providers> <!-- 아래 Facebook 코드는 Hive SDK에서 자동으로 설정하는 email 권한, public_profile 권한 외에 다른 권한들(예를 들면 user_friends, user_gender)이 추가로 필요할 때 이를 위해 설정하는 예시입니다.--> <!-- 실제로 hive_config.xml을 사용할 때에는, 게임사가 필요로 하는 권한만을 <permission> 요소로 삽입해야 합니다. --> <facebook> <permissions> <permission name="user_friends" /> <permission name="user_gender" /> </permissions> </facebook> <google playAppId="331526026701" clientId="331526026701-s41n272jsv6c0f72kt5o7of0jns350gl.apps.googleusercontent.com" serverClientId="331526026701-42uadtkeght91f7saspdg92gtdill6mv.apps.googleusercontent.com" reversedClientId="com.googleusercontent.apps.331526026701-s41n272jsv6c0f72kt5o7of0jns350gl" /> <googleplaygames playAppId="331526026701" clientId="331526026701-s41n272jsv6c0f72kt5o7of0jns350gl.apps.googleusercontent.com" serverClientId="331526026701-42uadtkeght91f7saspdg92gtdill6mv.apps.googleusercontent.com" reversedClientId="com.googleusercontent.apps.331526026701-s41n272jsv6c0f72kt5o7of0jns350gl" /> <qq id="1106227203" /> <vk id="6270065" /> <wechat id="wx78176cf0c698c0f9" secret="b5a73b0ee67d546bf876851944eda308" univeralLink="https://hiveota.withhive.com/hivesdk/normal/"/> <line channelId="1653399089" /> <weverse clientId="abcdefghijk123456789" /> <signinwithapple serviceid=”com.com2us.hivesdk” /> <!-- (Android Only) 애플 개발자 계정에서 설정한 서비스 id를 serviceid로 설정 -–> <!-- 유저 정보 트래킹 설정 --> <Adjust name="Adjust" id="unused" key="8szd9kddtt6o" secretId="1" info1="2071917595" info2="254356864" info3="427896519" info4="820983601"> <events> <event name="Purchase" value="py318i" /> <event name="TutorialComplete" value="gvfh2l" /> <event name="Update" value="sosx8y" /> </events> </Adjust> <Singular name="Singular" id="com2ususa_dev_7705679f" key="9b7ff73a0fc13c6c9397a9881dba2673"> <events> <event name="Purchase" value="purchase"/> <event name="TutorialComplete" value="tutorial Complete"/> <event name="Update" value="update"/> </events> </Singular> <AppsFlyer name="AppsFlyer" id="unused" key="G6yEQjHw4CrEN8sEzF9onU" itunesConnectAppId="1202135972"> <events> <event name="TutorialComplete" value="Tutorial Complete" /> <event name="Update" value="Update" /> </events> </AppsFlyer> <Firebase name="Firebase" id="unused" key="unused"> <events> <event name="Purchase" value="purchase" /> <event name="TutorialComplete" value="tutorial_complete" /> <event name="Update" value="update" /> <event name="Open" value="open"/> </events> </Firebase> </providers> </properties> |