게임에 탑재한 Hive 기능을 이용하려면 반드시 Hive SDK를 초기화해야 합니다. Hive SDK 초기화를 진행하면 Hive 콘솔에 등록된 약관 및 업데이트·공지 팝업이 자동으로 노출됩니다.
초기화 동작 방식
Hive SDK 초기화 시 다음 기능을 수행합니다.
- 해당 게임에 설정된 업데이트·공지 팝업을 노출합니다.
- 접속한 유저의 IP 및 설정된 약관을 확인하여 노출합니다.
Hive 인증키 등록하기
Configuration 클래스의 API를 사용하여 Hive 콘솔 페이지를 통해 발급된 Hive 인증키를 초기화 전에 등록해주세요. 해당 API는 4.15.0 이상의 버전부터 제공됩니다.
API Reference: Configuration.setHiveCertificationKey
1 2 3 4 |
// Hive 인증키 String hiveCertKey = "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJIaXZlIiwiaWF0IjoxNjAzNzc4OTU2LCJqdGkiOiIxODczMTExMzIwIn0.OxWo4R6UdI0BLP1ckt8RlMFrPAb5H7TNedmLFV1Cawc"; // Hive 인증키 등록 Configuration.setHiveCertificationKey(hiveCertKey); |
API Reference: Configuration::setHiveCertificationKey
1 2 3 4 |
// Hive 인증키 std::string hiveCertKey = "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJIaXZlIiwiaWF0IjoxNjAzNzc4OTU2LCJqdGkiOiIxODczMTExMzIwIn0.OxWo4R6UdI0BLP1ckt8RlMFrPAb5H7TNedmLFV1Cawc"; // Hive 인증키 등록 hive::Configuration::setHiveCertificationKey(hiveCertKey); |
API Reference: Configuration.setHiveCertificationKey
1 2 3 4 |
// Hive 인증키 String hiveCertKey = "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJIaXZlIiwiaWF0IjoxNjAzNzc4OTU2LCJqdGkiOiIxODczMTExMzIwIn0.OxWo4R6UdI0BLP1ckt8RlMFrPAb5H7TNedmLFV1Cawc"; // Hive 인증키 등록 Configuration.setHiveCertificationKey(hiveCertKey); |
API Reference: [HiveConfiguration setHiveCertificationKey:]
1 2 3 4 |
// Hive 인증키 NSString* hiveCertKey = @"eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJIaXZlIiwiaWF0IjoxNjAzNzc4OTU2LCJqdGkiOiIxODczMTExMzIwIn0.OxWo4R6UdI0BLP1ckt8RlMFrPAb5H7TNedmLFV1Cawc"; // Hive 인증키 등록 [HIVEConfiguration setHiveCertificationKey: hiveCertKey]; |
초기화 구현하기
Hive SDK를 초기화하려면 AuthV4 클래스의 setup()
메서드를 호출하세요. 이 때 호출 결과로 다음 정보를 전달하게 되며 해당 정보는 게임에서 저장하여 적절한 시점에 사용할 수 있습니다.
- Hive 초기화 수행 결과 정보
필드명 | 설명 | 예제 |
isAutoSignIn | 자동 로그인 가능 여부 | true |
did | 앱 설치 시 생성되는 앱 식별자로 동일한 종류의 앱을 식별할 때 사용합니다. | 123456789 |
providerTypeList | 현재 앱에서 제공 가능한 IdP 인증 목록 명시적 로그인을 커스터마이징하거나 IdP 연동 상태 정보를 구성할 때 필수적으로 사용해야 하는 필드입니다. |
ProviderType.FACEBOOK ProviderType.HIVE |
다음은 setup()
메서드 구현 예제입니다.
API Reference: hive.AuthV4.setup
1 2 3 4 5 6 7 8 9 10 11 |
// Hive SDK 초기화 요청 AuthV4.setup ((ResultAPI result, Boolean isAutoSignIn, String did, List providerTypeList) => { if (result.isSuccess()) { // 초기화 성공. 자동 로그인 가능 여부에 따라 로그인을 처리하세요. } else if (result.needExit()) { // TODO: 앱 종료 기능을 구현하세요 // 예) Application.Quit(); } else { // 초기화 실패 } }); |
API Reference: AuthV4::setup
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
// Hive SDK 초기화 요청 AuthV4::setup([=](ResultAPI const & result, bool isAutoSignIn, std::string did, std::vector const & providerTypeList) { if (result.isSuccess()) { // 초기화 성공. 자동 로그인 가능 여부에 따라 로그인을 처리하세요. } else if (result.needExit()) { // TODO: 앱 종료 기능을 구현하세요 // Cocos2d-x 엔진 사용자 // 예) exit(0); // Unreal 엔진 사용자 // 예) UKismetSystemLibrary::QuitGame(GetWorld(), nullptr, EQuitPreference::Quit, false); } else { // 초기화 실패 } }); |
API Reference: com.hive.AuthV4.setup
1 2 3 4 5 6 7 8 9 10 11 12 13 |
// Hive SDK 초기화 요청 AuthV4.setup(object: AuthV4.AuthV4SetupListener{ override fun onAuthV4Setup(result: ResultAPI, isAutoSignIn: Boolean, did: String?, providerTypeList: ArrayList?) { if (result.isSuccess) { // 초기화 성공. 자동 로그인 가능 여부에 따라 로그인을 처리하세요. } else if (result.needExit()) { // TODO: 앱 종료 기능을 구현하세요 // 예) exitProcess(0) } else { // 초기화 실패 } } }) |
API Reference: com.hive.AuthV4.setup
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
// Hive SDK 초기화 요청 AuthV4.setup(new AuthV4.AuthV4SetupListener() { @Override public void onAuthV4Setup(ResultAPI result, boolean isAutoSignIn, String did, ArrayList providerTypeList) { if (result.isSuccess()) { // 초기화 성공. 자동 로그인 가능 여부에 따라 로그인을 처리하세요. } else if (result.needExit()) { // TODO: 앱 종료 기능을 구현하세요 // 예) System.exit(0); } else { // 초기화 실패 } } }); |
API Reference: HIVEAuthV4:setup
1 2 3 4 5 6 7 8 9 10 |
AuthV4Interface.setup { (result, isAutoSignIn, did, providerTypeList) in if result.isSuccess() { // 초기화 성공. 자동 로그인 가능 여부에 따라 로그인을 처리하세요. } else if result.needExit() { // TODO: 앱 종료 기능을 구현하세요 // 예) exit(0) } else { // 초기화 실패 } } |
API Reference: HIVEAuthV4:setup
1 2 3 4 5 6 7 8 9 10 11 |
// Hive SDK 초기화 요청 [HIVEAuthV4 setup:^(HIVEResultAPI *result, BOOL isAutoSignIn, NSString *did, NSArray *providerTypeList) { if (result.isSuccess) { // 초기화 성공. 자동 로그인 가능 여부에 따라 로그인을 처리하세요. } else if (result.needExit) { // TODO: 앱 종료 기능을 구현하세요 // 예) exit(0); } else { // 초기화 실패 } }]; |
앱 접근 권한 고지
화면 디자인
게임 UI와 잘 어울리는, 게임별 맞춤식(customize) 팝업으로 변경하고 싶다면 이 가이드를 자세히 읽어보세요.
- 맞춤식 권한 고지 팝업
적용하기
AuthV4 클래스의 setup()
메서드 혹은 Auth 클래스의 initialize()
메서드와 같은 초기화 함수를 호출하기 전, Configuration 클래스의 getPermissionViewData()
메서드를 이용해서 권한 고지에 필요한 다국어지원 리소스 파일을 얻어올 수 있습니다. 이 API는 목표 언어에 맞는 리소스 파일을 읽어와 PermissionViewData 자료형의 데이터를 구성하는 역할을 수행합니다.
iOS에서는 해당 API를 사용하기 전, Xcode 프로젝트에 제공된 Permissions.zip 리소스를 반드시 포함해야 사용할 수 있습니다. Android에서는 Permissions.zip 리소스를 포함하지 않았을 경우 Hive SDK에 기본으로 포함된 권한 고지 리소스 문구를 읽어 데이터를 구성합니다. 이 때 리소스 문구를 수정하고 싶다면, iOS에서 한 방식처럼 프로젝트에 Permissions.zip 리소스를 포함시킨 후 수정 가능합니다. 이 내용은 Hive SDK v4.12.1 부터 적용할 수 있습니다. SDK v4.12.1 미만 버전을 사용할 경우 여기로 이동해 적용 방법을 확인해보세요.
아래에서 getPermissionViewData()
의 호출 방법을 확인합니다.
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 |
HIVELanguage language = HIVELanguage.HIVELanguageEN; /* 지원 언어 목록 HIVELanguageAR, // 아랍어 HIVELanguageDE, // 독일어 HIVELanguageEN, // 영어 HIVELanguageES, // 스페인어 HIVELanguageFR, // 프랑스어 HIVELanguageID, // 인도네시아어 HIVELanguageIT, // 이탈리아어 HIVELanguageJA, // 일본어 HIVELanguageKO, // 한국어 HIVELanguagePT, // 포르투갈어 HIVELanguageRU, // 러시아어 HIVELanguageTH, // 태국어 HIVELanguageTR, // 터키어 HIVELanguageVI, // 베트남어 HIVELanguageZHS, // 중국어 간체 HIVELanguageZHT // 중국어 번체 */ PermissionViewData data = Configuration.getPermissionViewData(language); //language 는 enum HIVELanguage //TODO : 제목 : data.contents for (int i = 0; i < data.permissions.Count; i++) { /* TODO : 권한명 : data.permissions[i].nativePermissionName 타이틀 : data.permissions[i].title 내용 : data.permissions[i].contents 카테고리 : data.permissions[i].permissionCategory */ } for (int i = 0; i < data.commons.Count; i++) { /* TODO : data.permissions(권한 고지 내용)가 한 개 이상일 때만 존재 합니다. 권한명 : data.commons[i].nativePermissionName 타이틀 : data.commons[i].title 내용 : data.commons[i].contents 카테고리 : data.commons[i].permissionCategory */ } |
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 |
HIVELanguage language = HIVELanguage.HIVELanguageEN; /* 지원 언어 목록 HIVELanguageAR, // 아랍어 HIVELanguageDE, // 독일어 HIVELanguageEN, // 영어 HIVELanguageES, // 스페인어 HIVELanguageFR, // 프랑스어 HIVELanguageID, // 인도네시아어 HIVELanguageIT, // 이탈리아어 HIVELanguageJA, // 일본어 HIVELanguageKO, // 한국어 HIVELanguagePT, // 포르투갈어 HIVELanguageRU, // 러시아어 HIVELanguageTH, // 태국어 HIVELanguageTR, // 터키어 HIVELanguageVI, // 베트남어 HIVELanguageZHS, // 중국어 간체 HIVELanguageZHT // 중국어 번체 */ PermissionViewData data = hive::Configuration::getPermissionViewData(language); //language 는 enum HIVELanguage //TODO : 제목 : data.contents.c_str() for (auto unit : data.permissions) { /* TODO : 권한명 : unit.nativePermissionName.c_str() 타이틀 : unit.title.c_str() 내용 : unit.contents.c_str() 카테고리 : unit.permissionCategory */ } for (auto unit : data.commons) { /* TODO : data.permissions(권한 고지 내용)가 한 개 이상일 때만 존재 합니다. 권한명 : unit.nativePermissionName.c_str() 타이틀 : unit.title.c_str() 내용 : unit.contents.c_str() 카테고리 : unit.permissionCategory */ } |
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 |
Configuration.HIVELanguage language = Configuration.HIVELanguage.HIVELanguageEN; /* 지원 언어 목록 HIVELanguageAR("ar"), // 아랍어 HIVELanguageDE("de"), // 독일어 HIVELanguageEN("en"), // 영어 HIVELanguageES("es"), // 스페인어 HIVELanguageFR("fr"), // 프랑스어 HIVELanguageIN("in"), // 인도네시아어 HIVELanguageIT("it"), // 이탈리아어 HIVELanguageJA("ja"), // 일본어 HIVELanguageKO("ko"), // 한국어 HIVELanguagePT("pt"), // 포르투갈어 HIVELanguageRU("ru"), // 러시아어 HIVELanguageTH("th"), // 태국어 HIVELanguageTR("tr"), // 터키어 HIVELanguageVI("vi"), // 베트남어 HIVELanguageZHS("zh-hans"), // 중국어 간체 HIVELanguageZHT("zh-hant"); // 중국어 번체 */ PermissionView.PermissionViewData data = Configuration.getPermissionViewData(language); //language 는 enum HIVELanguage //TODO : 제목 : data.contents for (PermissionView.PermissionViewUnitData permissionViewUnitData : data.permissions) { /* TODO : 권한명 : permissionViewUnitData.nativePermissionName 타이틀 : permissionViewUnitData.title 내용 : permissionViewUnitData.contents 카테고리 : permissionViewUnitData.Category */ } for (PermissionView.PermissionViewUnitData commonUnitData : data.commons) { /* TODO : data.permissions(권한 고지 내용)가 한 개 이상일 때만 존재 합니다. 권한명 : commonUnitData.nativePermissionName 타이틀 : commonUnitData.title 내용 : commonUnitData.contents 카테고리 : commonUnitData.Category */ } |
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 |
HIVELanguage language = kHIVELanguageEN; /* 지원 언어 목록 kHIVELanguageAR, // 아랍어 kHIVELanguageDE, // 독일어 kHIVELanguageEN, // 영어 kHIVELanguageES, // 스페인어 kHIVELanguageFR, // 프랑스어 kHIVELanguageID, // 인도네시아어 kHIVELanguageIT, // 이탈리아어 kHIVELanguageJA, // 일본어 kHIVELanguageKO, // 한국어 kHIVELanguagePT, // 포르투갈어 kHIVELanguageRU, // 러시아어 kHIVELanguageTH, // 태국어 kHIVELanguageTR, // 터키어 kHIVELanguageVI, // 베트남어 kHIVELanguageZHS, // 중국어 간체 kHIVELanguageZHT, // 중국어 번체 */ HIVEPermissionViewData* data = [HIVEConfiguration getPermissionViewData:language]; //language 는 enum HIVELanguage //TODO : 제목 : [data contents]]; for (HIVEPermissionViewUnitData *unit in [data permissions]) { /* TODO : 권한명 : [unit nativePermissionName] 타이틀 : [unit title] 내용 : [unit contents] 카테고리 : [unit permissionCategory] */ } for (HIVEPermissionViewUnitData *unit in [data commons]) { /* TODO : [data permissions] (권한 고지 내용)가 한 개 이상일 때만 존재 합니다. 권한명 : [unit nativePermissionName] 타이틀 : [unit title] 내용 : [unit contents] 카테고리 : [unit permissionCategory] */ } |
PermissionViewData로 권한 고지 UI 구성하기
-
- 데이터로 UI 구성하기
getPermissionViewData()
를 요청하면 PermissionViewData를 얻어올 수 있습니다. PermissionViewData는 약관 고지 UI를 구성하기 위한 데이터로 이루어집니다. 여기에는 각 권한을 설명하는 PermissionVIewUnitData라는 데이터가 있으며, 리스트 형식으로 구성되어 있습니다.- PermissionViewData
데이터 이름 자료형 의미 UI 노출 여부 contents String 권한 고지 팝업에 대한 설명입니다. UI에 노출하세요. O permissions Linear List 혹은 Array
(언어에 따라 다름)각 권한에 대한 설명과 이름이 들어있는 선형리스트 혹은 배열입니다. OS를 업데이트하거나 법령에 따라 권한 정보가 추가될 수 있으므로 리스트에 들어 있는 데이터 개수를 표시하는 UI는 여러 값이 들어 갈 수 있도록 변화에 능동적인 디자인이어야 합니다.
데이터에 대한 내용은 PermissionViewUnitData를 참고하세요.일부 O commons Linear List 혹은 Array
(언어에 따라 다름)공통에 해당하는 설명과 이름이 들어있는 선형리스트 혹은 배열입니다. commons 데이터를 불러오려면 권한 고지 내용이 반드시 1개 이상이어야 합니다. 데이터에 대한 내용은 PermissionViewUnitData를 참고하세요. O - PermissionViewUnitData
데이터 이름 자료형 의미 title string UI에 노출해야 할 권한의 이름입니다. contents string UI에 노출해야할 권한의 내용입니다. 권한을 어떻게 이용하는지 설명합니다. nativePermissionName string 각 OS에서 사용하는 권한의 이름입니다. permissionCategory enum UI에 노출하지 않는 권한의 종류입니다. 이용하는 권한을 카테고리로 판단할 수 있고, 권한이 활용하는 기능 또한 파악할 수 있습니다. 이 데이터는 권한 UI에 원하는 내용을 표시하는 방법 등으로 활용 가능합니다. 권한 목록을 확인하려면 소스 코드를 참조하세요.
- PermissionViewData
- UI 예시
다음은getPermissionViewData()
를 호출하여 전달받은 값으로 구성한 예시입니다. 이미지를 참고하여 각 게임에 어울리는 UI를 디자인해보세요.
- 권한 고지 관리하기
새롭게 제공되는 Configuration 클래스의getPermissionViewData()
메서드는 커스텀 권한 고지 팝업 노출 방식을 다양하게 구현할 기회 제공을 목적으로 권한 고지 데이터를 구성하는 기능만 수행합니다. 이는 개발 스튜디오에서 최초 1회만 노출하거나 업데이트마다 노출하는 등 구현 방식을 구체화할 수 있다는 의미입니다.Hive에서 설정한 방식은 최초 1회만 노출하기 입니다. 만약 Hive SDK 정책을 그대로 따른다고 하면, 아래 도식도에서 노란색으로 표시한 부분은 개발 스튜디오에서 직접 구현해 새로운 API와 함께 사용해야 합니다. IP 기반의 유저 국가 검증 기능은 서버 API 내용을 참고 하세요.
- 데이터로 UI 구성하기
화면 문구
접근하는 정보 수준에 따라 필수/선택 접근 권한을 노출합니다. 게임에서 필요한 앱 접근 권한을 추가해 안내해보세요.
iOS
사용 시점에 권한을 요청하라는 iOS 정책에 의거, CAMERA, PHOTO, PUSH, IDFA 4가지 권한이 앱 접근 권한 고지의 기본 항목으로 설정되어 있습니다. IDFA 권한은 Hive SDK 초기화 시 권한 요청 팝업이 생성되고, CAMERA와 PHOTO 권한은 해당 기능을 실제 사용하는 시점에 권한 요청 팝업이 나타나며, PUSH 권한은 SDK를 초기화할 때 요청됩니다. 네 항목 모두 선택 권한으로, 유저가 거부한다고 해도 게임 플레이에는 문제가 없습니다.
- 빌드된 Xcode 프로젝트에서 Permissions.zip 파일 압축을 풀어 프로젝트의 하위 경로에 끌어서 놓아 리소스를 배치합니다. Project > info > Localizations에 15개 언어가 반영되며, Permission.strings 파일을 선택했을 때 아래 인스펙터 영상에서 보이는 것처럼 체크되면 정상적으로 적용된 것입니다. 이후에는 원하는 내용으로 편집해 사용할 수 있습니다.
- Permission.strings 내 추가 가능한 권한 리스트에서 추가가 필요한 권한의 제목과 내용 값을 추가합니다. Xcode 프로젝트에 15개 언어 리소스를 추가했다고 예를 들면, Hive SDK v4.12.1부터는 한국어 리소스에 해당되는 Permission.strings (Korean)에 제목과 내용을 추가하거나 변경한 경우에만 Hive SDK 권한 고지 팝업에 반영됩니다.
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354"Header_Title" = "원활한 게임 서비스 이용을 위한 접근 권한 안내";"Header_OK" = "OK";"Camera_Title" = "(선택)카메라";"Camera_Description" = "게임 내 프로필에서 카메라 사용시 요청하는 권한입니다.";"Photos_Title" = "(선택)사진첩";"Photos_Description" = "게임 내 프로필에 내 사진첩에 있는 사진을 업로드시 요청하는 권한입니다.";"Push_Title" = "(선택)푸시 알림";"Push_Description" = "해당 게임에 대한 푸시 메시지를 받기 위해 요청하는 권한입니다.";"IDFA_Title" = "(선택)광고 식별자""IDFA_Description" = "프로모션 타겟팅 및 추적 분석을 위한 광고 식별자(IDFA) 사용을 요청하는 권한입니다.""Common_Title" = "";"Common_Description" = "선택 권한은 동의하지 않아도 서비스 이용에 영향을 주지 않습니다.";"AppleMusic_Title" = "";"AppleMusic_Description" = "";"Bluetooth_Title" = "";"Bluetooth_Description" = "";"Calendar_Title" = "";"Calendar_Description" = "";"Health_Title" = "";"Health_Description" = "";"Home_Title" = "";"Home_Description" = "";"Location_Title" = "";"Location_Description" = "";"Microphone_Title" = "";"Microphone_Description" = "";"Motion_Title" = "";"Motion_Description" = "";"Reminders_Title" = "";"Reminders_Description" = "";"Siri_Title" = "";"Siri_Description" = "";"SpeechRecognition_Title" = "";"SpeechRecognition_Description" = "";"TVProviderAccount_Title" = "";"TVProviderAccount_Description" = "";
Android
Android 리소스를 적용하려면 Unity 혹은 Cocos2d-x에서 다음과 같이 ../res 하위 경로에 Permissions.zip 파일을 압축풀기한 후 복사하고 붙여넣기하여 원하는 내용으로 편집 사용합니다.
Unity는 엔진 특성상 Hive SDK가 갖는 권한 고지 리소스와 충돌하는 문제가 있습니다. 이 때문에 커스터마이징할 권한 고지 리소스를 우선 적용하려면 아래와 같이 폴더 이름 뒤에 버전을 별도 표기하여 복사하고 붙여넣기해야 합니다. 아래 리소스 적용 영상을 참고하세요.
- Android
- Cocos2d-x
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 |
<!--?xml version="1.0" encoding="utf-8"?--> 원활한 게임 서비스 이용을 위한 접근 권한 안내 OK <!-- PermissionGroup 'PHONE' --> (선택)전화번호 이벤트 SMS 발송을 위한 핸드폰번호 수집시 필요한 기능입니다. <!-- PermissionGroup 'CONTACTS' --> (선택)주소록 <!-- PermissionGroup 'STORAGE' --> (선택)저장공간 추가 다운로드시 외부 메모리 저장소를 사용할 수 있도록 요청하는 권한입니다. <!-- PermissionGroup 'LOCATION' --> (선택)위치 이 기기의 위치에 엑세스 하기 위한 권한입니다. <!-- PermissionGroup 'MICROPHONE' --> (선택)마이크 음성 기능을 사용하기 위한 권한입니다. <!-- PermissionGroup 'CAMERA' --> (선택)카메라 사진찍기 및 동영상 녹화를 위한 권한입니다. <!-- PermissionGroup 'SMS' --> (선택)SMS <!-- PermissionGroup 'CALENDAR' --> (선택)캘린더 <!-- PermissionGroup 'SENSORS' --> (선택)센서 <!-- PermissionGroup 'COMMON' --> 선택 권한은 동의하지 않아도 서비스 이용에 영향을 주지 않습니다. |
서버 점검 팝업
게임 서비스를 위해서는 게임 클라이언트의 업데이트 후에 하위 버전을 차단하거나 게임 서버의 점검 시간 동안 게임 접속을 차단하는 기능이 필요합니다. Hive는 Hive 콘솔에 설정된 정보에 따라 게임 강제 업데이트, 공지, 서버 점검 순으로 팝업을 노출하는 기능을 제공합니다. 게임에서는 Hive SDK에서 제공하는 UI를 이용하거나 Hive에서 제공하는 정보만 수신하여 커스터마이징 된 UI를 직접 구현할 수 있습니다.
게임 강제 업데이트 | 특정 버전의 게임 이용을 차단하고 업데이트를 위한 링크를 제공 |
서버 점검 | 게임 서버별로 점검 여부를 설정할 수 있으며, 점검 시간 동안 게임 관련 링크 제공을 권장함 |
공지 | 강제가 아닌 게임 업데이트에 대한 안내, 전체 유저에게 고지해야 할 중요한 공지사항의 노출을 위해 이용 |
- 업데이트 및 점검 팝업은 초기화 단계에 포함되어 있지만 서버 점검 팝업은 서버가 자동으로 선택되거나, 유저가 직접 선택 혹은 변경하는 단계에 필수적으로 노출될 수 있도록 구현합니다.
- 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가 제공하는 팝업 이용하기:
다음은 Hive가 제공하는 UI로 서버 점검 팝업을 띄우는 예제 코드입니다. 서버 점검이 완료되지 않았을 때 유저가 이 팝업을 닫으면 종료 이벤트가 ResultAPI result
로 전달됩니다.
API Reference: hive.AuthV4.checkMaintenance
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
// Hive SDK UI를 사용여부 Boolean isShow = true; // Hive SDK 서버 점검 팝업 띄우기 AuthV4.checkMaintenance(isShow, (ResultAPI result, List maintenanceInfoList) => { if (result.isSuccess()) { // 점검 데이터가 없는 경우 // isShow가 false인 경우 } else if (result.needExit()) { // TODO: 앱 종료 기능을 구현하세요 // 예) Application.Quit(); } }); |
API Reference: AuthV4::checkMaintenance
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
// Hive SDK UI를 사용여부 bool isShow = true; // Hive SDK 서버 점검 팝업 띄우기 AuthV4::checkMaintenance(isShow, [=](ResultAPI const & result,std::vector const & maintenanceInfolist){ if (result.isSuccess()) { // 등록된 점검 데이터가 없는 경우 // isShow가 false인 경우 } else if (reuslt.needExit()) { // TODO: 앱 종료 기능을 구현하세요 // Cocos2d-x 엔진 사용자 // 예) exit(0); // Unreal 엔진 사용자 // 예) UKismetSystemLibrary::QuitGame(GetWorld(), nullptr, EQuitPreference::Quit, false); } }); |
API Reference: com.hive.AuthV4.checkMaintenance
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
// Hive SDK UI를 사용여부 val isShow = true // Hive SDK 서버 점검 팝업 띄우기 com.hive.AuthV4.checkMaintenance(isShow, object : AuthV4MaintenanceListener { override fun onAuthV4Maintenance(result: ResultAPI, maintenanceInfo: ArrayList?) { if (result.isSuccess()) { // 등록된 점검 데이터가 없는 경우 // isShow가 false인 경우 } else if (result.needExit()) { // TODO: 앱 종료 기능을 구현하세요 // 예) exitProcess(0) } } }) |
API Reference: com.hive.AuthV4.checkMaintenance
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
// Hive SDK UI를 사용여부 boolean isShow = true; // Hive SDK 서버 점검 팝업 띄우기 com.hive.AuthV4.checkMaintenance(isShow, new AuthV4.AuthV4MaintenanceListener() { @Override public void onAuthV4Maintenance(ResultAPI result, ArrayList maintenanceInfo) { if (result.isSuccess()) { // 등록된 점검 데이터가 없는 경우 // isShow가 false인 경우 } else if (result.needExit()) { // TODO: 앱 종료 기능을 구현하세요 // 예) System.exit(0); } } }); |
API Reference: HIVEAuthV4:checkMaintenance
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
// Hive SDK UI를 사용여부 // Hive SDK 팝업 UI 사용 여부 let isShow = YES; AuthV4Interface.checkMaintenance(isShow) { (result, maintenances) in if result.isSuccess() { // 실제 점검 데이터가 없는 경우 // isShow가 false인 경우 } else if result.needExit() { // TODO: 앱 종료 기능을 구현하세요 // 예) exit(0) } } |
API Reference: HIVEAuthV4:checkMaintenance
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
// Hive SDK UI를 사용여부 // Hive SDK 팝업 UI 사용 여부 BOOL isShow = YES; // Hive SDK 서버 점검 팝업 띄우기 [HIVEAuthV4 checkMaintenance:isShow handler:^(HIVEResultAPI *result, NSArray *maintenanceInfolist) { if (result.isSuccess) { // 등록된 점검 데이터가 없는 경우 // isShow가 false인 경우 } else if (result.needExit) { // TODO: 앱 종료 기능을 구현하세요 // 예) exit(0); } }]; |
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
Hive 웹뷰 띄우기
약관 다시보기
약관 적용하기
Hive SDK는 초기화 시 유저의 접속 IP로 판단한 국가 및 퍼블리싱사에 맞는 적절한 약관을 노출시키지만, 이후 게임에서는 국가별로 어떤 약관에 대한 동의를 받는지 여부와 상관 없이 모든 유저가 약관 및 개인정보처리방침 등을 볼 수 있는 링크를 제공해야 합니다. Hive에서 제공하는 약관 링크를 연결하면 Hive 백오피스에 등록된 조건에 따라 노출될 약관이 자동으로 선택되어 노출됩니다. 약관 링크를 표기하는 규정은 퍼블리싱 회사에 따라 차이가 있습니다.
약관을 표시하기 위해서는 AuthV4 클래스의 showTerms()
메서드를 호출하세요. 다음은 이용약관을 노출하는 예제 코드입니다.
API Reference: hive.AuthV4.showTerms
1 2 3 4 5 6 7 8 |
// 약관 노출 통지 리스너 public void onAuthV4ShowTerms(ResultAPI result) { Logger.log("AuthV4TestView.onAuthV4ShowTerms() Callback\nresult = " + result.toString() + "\n"); } // 이용 약관 표시 요청 AuthV4.showTerms(onAuthV4ShowTerms); |
API Reference: AuthV4::showTerms
1 2 3 4 5 6 7 8 9 |
// Hive SDK AuthV4 이용 약관 표시 요청 AuthV4::showTerms([=](ResultAPI const & result) { // 결과 콜백 if (result.isSuccess()) { // 약관 노출 닫힘 } else { // TODO : Error Handling } }); |
API Reference: com.hive.AuthV4.showTerms
1 2 3 4 5 6 |
com.hive.AuthV4.showTerms(new com.hive.AuthV4.AuthV4ShowTermsListener() { @Override public void onAuthV4ShowTerms(ResultAPI result) { } }); |
API Reference: HIVEAuthV4::showTerms
1 2 3 4 5 6 7 8 9 10 11 12 |
// 이용 약관 표시 // 이용 약관 표시 요청 [HIVEAuthV4 showTerms:^(HIVEResultAPI *result) { Loggerd(@"HIVEAuthV4.showTerms:\nresult = %@", result); if (result.isSuccess) { } else { } }]; |
유저 프로필
유저는 프로필 이미지와 디스플레이 네임을 통해 본인의 개성을 표현할 수 있습니다. Hive 프로필 메뉴에서는 프로필 이미지와 디스플레이 네임을 확인하고 변경합니다.
모든 유저는 프로필 페이지를 가지며, 프로필 페이지에서 프로필 이미지 및 닉네임을 수정할 수 있습니다. 프로필의 수정은 Hive 멤버십 유저만 가능합니다. Facebook 등의 프로필 이미지 및 닉네임을 반환하는 IdP와 연동한 경우, 해당 IdP에서 제공한 이미지와 닉네임을 프로필에서 사용합니다.
유저 프로필 화면을 노출하기 위해서는 AuthV4 클래스의 showProfile()
을 호출하면 됩니다.
다음은 유저 프로필을 노출하는 예제 코드입니다.
API Reference: hive.AuthV4.showProfile
1 2 3 4 5 6 7 8 9 10 11 12 13 |
// Hive SDK Show 프로필 - Unity3D C# 예제 // using hive // Hive SDK 결과 콜백 핸들러 public void onAuthV4ShowProfile(ResultAPI result) { Logger.log("AuthV4TestView.onAuthV4ShowProfile() Callback\nresult = " + result.toString() + "\n"); } // User의 PlayerId Int64 playerId = 0; // Hive SDK 프로필 요청 AuthV4.showProfile(playerId, onAuthV4ShowProfile); |
API Reference: AuthV4::showProfile
1 |
-- 예제 코드를 기입해 주세요 |
API Reference: com.hive.AuthV4.showProfile
1 2 3 4 5 6 7 8 9 10 11 |
//조회할 유저의 PlayerId, 예제에서는 자신 long playerId = AuthV4.getPlayerInfo().playerId; AuthV4.showProfile(playerId, new AuthV4.AuthV4ShowProfileListener() { @Override public void onAuthV4ShowProfile(ResultAPI result) { } }); |
API Reference: HIVEAuthV4::showProfile
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
int64_t playerId = 0; // Hive SDK 프로필 요청 [HIVEAuthV4 showProfile:playerId handler:^(HIVEResultAPI *result) { Loggerd(@"HIVEAuthV4.showProfile:\nresult = %@", result); if (result.isSuccess) { } else { } }]; |
문의하기
Hive 플랫폼의 고객 서비스 창구로 각 게임별 FAQ를 조회하고 문의할 수 있는 기능을 제공합니다. 게임 내 기능뿐만 아니라 Hive 모바일 및 PC 웹 사이트에서도 동일한 기능을 이용할 수 있습니다. 유저가 게임에 대한 문의를 등록할 수 있도록 CS Code(PlayerID)를 노출하고 Hive 고객센터로 연결되는 버튼을 제공하세요.
1:1 문의를 노출하기 위해서는 AuthV4 클래스의 showInquiry()
함수를 호출하면 됩니다.
다음은 문의하기를 노출하는 예제 코드입니다.
API Reference: hive.AuthV4.showInquiry
1 2 3 4 5 6 7 8 9 10 |
// Hive SDK 1:1문의하기 - Unity3D C# 예제 // using hive // Hive SDK 결과 콜백 핸들러 public void onAuthV4ShowInquiry(ResultAPI result) { } // Hive SDK 1:1 문의하기 요청 AuthV4.showInquiry(onAuthV4ShowInquiry); |
API Reference: AuthV4::showInquiry
1 |
-- 예제 코드를 기입해 주세요 |
API Reference: com.hive.AuthV4.showInquiry
1 2 3 4 5 |
AuthV4.showInquiry(new AuthV4.AuthV4ShowInquiryListener() { @Override public void onAuthV4ShowInquiry(ResultAPI result) { } }); |
API Reference: HIVEAuthV4::showInquiry
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
// Hive SDK 1:1 문의하기 UI 요청 [HIVEAuthV4 showInquiry:^(HIVEResultAPI *result) { Loggerd(@"HIVEAuthV4.showInquiry:\nresult = %@", result); if (result.isSuccess) { } else { } }]; |
내 문의 내역 바로가기
Hive 고객센터는 Hive 멤버십 연동 유저에게 본인이 접수한 문의 내역을 바로 확인할 수 있는 기능을 제공합니다. AuthV4 클래스의 showMyInquiry()
메서드를 호출하여 내 문의 내역 바로 가기를 적용해보세요. 유저가 게임에 대한 문의 사항을 보다 간편하게 해결할 수 있는 환경이 구현됩니다. 다만, Hive 모바일이나 웹 사이트를 통해 문의한 경우에는 Hive 멤버십 로그인 여부를 확인할 수 없기 때문에 Hive ID와 CS Code(PlayerID)를 입력해도 앱에서는 노출되지 않습니다.
다음은 내 문의하기를 노출하는 예제 코드 입니다.
API Reference: hive.AuthV4.showMyInquiry
1 2 3 4 5 6 7 8 |
// Hive SDK 결과 콜백 핸들러 public void onAuthV4ShowMyInquiry(ResultAPI result) { if(result.isSuccess()) { // API 호출 성공 } } // Hive SDK 내 문의하기 요청 hive.AuthV4.showMyInquiry(onAuthV4ShowMyInquiry); |
API Reference: AuthV4::showMyInquiry
1 2 3 4 5 6 7 8 9 10 |
// Hive SDK 내 문의하기 요청 AuthV4::showMyInquiry([=](ResultAPI result) { // Hive SDK 결과 콜백 핸들러 if(result.isSuccess()){ // API 호출 성공 } }); |
API Reference: com.hive.AuthV4.showMyInquiry
1 2 3 4 5 6 7 8 |
AuthV4.showMyInquiry(new AuthV4.AuthV4ShowMyInquiryListener() { @Override public void onAuthV4ShowMyInquiry(ResultAPI result) { if(result.isSuccess) { // API 호출 성공 } } }); |
API Reference: HIVEAuthV4::showMyInquiry
1 2 3 4 5 6 7 8 9 10 11 12 13 |
[HIVEAuthV4 showMyInquiry:^(HIVEResultAPI *result) { Loggerd(@"HIVEAuthV4.showMyInquiry:\nresult = %@", result); if (result.isSuccess) { } else { } }]; |
Hive 챗봇 CS
챗봇 문의하기
- 챗봇 문의하기 적용 예시 화면
챗봇 문의하기를 노출하기 위해서는 AuthV4 클래스의 showChatbotInquiry()
메서드를 호출합니다.
Argument | Type | Description |
---|---|---|
additionalInfo | string | 챗봇 페이지 노출 시 함께 전달할 데이터"{ \"init_path\":\"hive_sdk_api\" }" 로 고정하며, 추가 전달할 값이 필요한 경우 컴투스플랫폼 선행개발팀과 협의 |
다음은 챗봇 문의하기를 노출하는 예제 코드입니다.
API Reference: hive.AuthV4.showChatbotInquiry
1 2 3 4 5 6 7 |
// 챗봇 페이지 바로가기 API 호출시 전달하기로한 약속한 JSON 형식의 String 데이터 String additionalInfo = "{ \"init_path\":\"hive_sdk_api\" }"; AuthV4.showChatbotInquiry(additionalInfo, (ResultAPI result)=>{ if (result.isSuccess()) { // API 호출 성공 } }); |
API Reference: AuthV4::showChatbotInquiry
1 2 3 4 5 6 7 |
// 챗봇 페이지 바로가기 API 호출시 전달하기로한 약속한 JSON 형식의 String 데이터 std::string additionalInfo = "{ \"init_path\":\"hive_sdk_api\" }"; AuthV4::showChatbotInquiry(additionalInfo, [=](ResultAPI const &result){ if (result.isSuccess()) { // API 호출 성공 } }); |
API Reference: com.hive.AuthV4.showChatbotInquiry
1 2 3 4 5 6 7 8 9 10 |
// 챗봇 페이지 바로가기 API 호출시 전달하기로한 약속한 JSON 형식의 String 데이터 String additionalInfo = "{ \"init_path\":\"hive_sdk_api\" }"; AuthV4.showChatbotInquiry(additionalInfo, new AuthV4.AuthV4ShowChatbotInquiryListener() { @Override public void onAuthV4ShowChatbotInquiry(ResultAPI result) { if(result.isSuccess()){ // API 호출 성공 } } }); |
API Reference: HIVEAuthV4::showChatbotInquiry
1 2 3 4 5 6 7 |
// 챗봇 페이지 바로가기 API 호출시 전달하기로한 약속한 JSON 형식의 String 데이터 NSString* additionalInfo = @"{ \"init_path\":\"hive_sdk_api\" }"; // [HIVEAuthV4 showChatbotInquiry:additionalInfo handler:^(HIVEResultAPI *result) { if ([result isSuccess]) { // API 호출 성공 } }]; |
챗봇 설정하기
챗봇에서 사용하는 AppDelegate는 iOS 앱의 최상위에 있는 객체에서 발생하는 공통적인 동작(메서드)을 정의하는 클래스로, Xcode 프로젝트를 이용해 빌드할 경우 자동 생성됩니다.
Hive SDK에서는 유저의 편의를 고려해 챗봇 UI를 세로 고정형으로 노출하는데, iOS에서 해당 기능을 정상 동작하려면 게임 엔진의 AppDelegate 클래스의 화면 회전 관련 메서드 application(_:supportedInterfaceOrientationsFor:)
를 구현해야 합니다. 이 메서드의 return은 게임에 적용시킬 UIInterfaceOrientationMask 값으로 반환합니다. 가로 전용 게임일 경우 landscape, 세로 전용 게임일 경우 portrait, 가로와 세로 모두 지원하는 게임일 경우 landscape와 portrait를 모두 반환합니다.
1 2 3 4 5 6 7 8 9 10 |
// Objective-c로 제작한 게임 엔진인 경우 다음의 AppDelegate 함수를 구현 - (UIInterfaceOrientationMask)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window { // TODO: 가로 전용 게임의 경우 return UIInterfaceOrientationMaskLandscape; // TODO: 세로 전용 게임의 경우 return UIInterfaceOrientationMaskPortrait; // TODO: 가로, 세로 모두 지원하는 게임의 경우 return UIInterfaceOrientationMaskAll; } |
1 2 3 4 5 6 7 8 9 10 |
// Swift로 제작한 게임 엔진인 경우 다음의 AppDelegate 함수를 구현 func application(_ application: UIApplication, supportedInterfaceOrientationsFor window: UIWindow?) -> UIInterfaceOrientationMask { // TODO: 가로 전용 게임의 경우 return [.landscape] // TODO: 세로 전용 게임의 경우 return [.portrait] // TODO: 가로, 세로 모두 지원하는 게임의 경우 return .all } |
iPad에서도 챗봇 화면을 세로 고정형으로 노출하고 싶다면 Xcode에서 아래 설정을 추가로 적용하고 빌드합니다.
커뮤니티 노출하기
게임에서 Hive 커뮤니티를 호출할 때, 자동 로그인 처리 및 정상 동작을 위해서 아래 API 를 사용해 주세요. 커스텀 커뮤니티를 사용하시는 경우, 여기를 참고하여 앱센터에서 URL을 등록해주세요. 웹뷰 호출을 위한 Hive 콘솔 화이트리스트에 자동 등록이 됩니다.
1 2 3 4 5 6 7 8 9 10 11 12 |
// 뷰 타입 설정 (FullScreen: 전체 화면, Frame: 프레임 화면) SocialV4.ViewType viewType = SocialV4.ViewType.Frame; // 커뮤니티 페이지 호출 콜백 핸들러 public void onShowCommunity(ResultAPI result) { if (result.isSuccess()) { // API 호출 성공 } } // 커뮤니티 페이지 호출 SocialV4.showCommunity(SocialV4.ProviderType.HIVE, viewType, onShowCommunity); |
1 2 3 4 5 6 7 8 9 |
// 뷰 타입 설정 (FullScreen: 전체 화면, Frame: 프레임 화면) SocialV4::ViewType viewType = SocialV4::ViewType::Frame; // 커뮤니티 페이지 호출 SocialV4::showCommunity(SocialV4::ProviderType::HIVE, viewType, [=](ResultAPI const & result) { if(result.isSuccess() { // API 호출 성공 }) }); |
1 2 3 4 5 6 7 8 9 10 11 12 |
// 뷰 타입 설정 (FullScreen: 전체 화면, Frame: 프레임 화면) SocialV4.ViewType viewType = SocialV4.ViewType.Frame; // 커뮤니티 페이지 호출 com.hive.SocialV4.showCommunity(SocialV4.ProviderType.HIVE, viewType, new com.hive.SocialV4.SocialV4ShowCommunityListener() { @Override public void onShowCommunity(@NotNull ResultAPI result) { if(result.isSuccess()) { // API 호출 성공 } } }); |
1 2 3 4 5 6 7 8 9 |
// 뷰 타입 설정 (FullScreen: 전체 화면, Frame: 프레임 화면) HIVESocialViewType viewType = HIVESocialViewTypeFrame; // 커뮤니티 페이지 호출 [HIVESocialV4 showCommunity:HIVESocialProviderTypeHIVE viewType:viewType handler:^(HIVEResultAPI * result) { if(result.isSuccess) { // API 호출 성공 } }]; |
리모트 로깅
리모트 로깅은 클라이언트의 디버깅 로그를 Hive 서버에 보내 이미 상용에 출시된 앱의 디버깅용 로그를 원격으로 확인할 수 있는 기능입니다. Hive 콘솔에서 등록하는 방식이며, 타겟 유저의 리모트 로그만 활성화할 수 있습니다. 등록 방법에 대한 자세한 설명은 리모트 로깅 운영가이드에서 확인하세요.
- 활성화
리모트 로깅을 활성화하면 Hive 콘솔에 입력한 수집 시간 동안 Hive 로그와 게임 로그를 수집합니다. Hive 로그는 SDK에서 설정한 값을 기본으로 수집되고, 게임 로그는 게임에서 설정한 값이 수집됩니다.
- 타겟팅
리모트 로깅은 Hive SDK 초기화를 최소 한 번 이상 거쳐 DID가 발급된 유저만을 대상으로 설정할 수 있습니다. 다만 SDK를 초기화하기 전에 크래시나 오류가 발생한 앱에서는 사용할 수 없습니다. - 동작 방식
- 예제 코드
게임에서 로그를 수집하려는 위치마다 아래 코드를 삽입합니다.
Unity®1hive.Logger.log("로깅 내용 입력");C++1Logger::log("로깅 내용 입력");Android1Logger.log(Logger.HIVELogType.HIVELogTypeI, "GameLog", "로깅 내용 입력");iOS1Logger("로깅 내용 입력");
리모트 컨피그레이션
Hive를 적용한 게임에서는 앱의 각 버전과 1 대 1 매핑 되는 게임 서버 URL을 관리할 수 있습니다. 게임 서버 URL은 Configuration 클래스의 getMetaData()
API를 호출하여 string 형태로 전달됩니다. 다음은 게임 서버 URL을 호출하는 예제 코드입니다.
API Reference: hive.Configuration.getMetaData
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
// 데이터 키 String key = "game_server_url"; // 데이터 갱신 여부 Boolean forceReload = false; // 메타 데이터 호출 결과 콜백 핸들러 public void onGetMetaData(ResultAPI result, String value) { if (result.isSuccess()) { // API 호출 성공 } } // 메타 데이터 호출 Configuration.getMetaData(key, forceReload, onGetMetaData); |
API Reference: Configuration::gertMetaData
1 2 3 4 5 6 7 8 9 10 11 12 13 |
// 데이터 키 std::string key = "game_server_url"; // 데이터 갱신 여부 bool forceReload = false; // 메타 데이터 호출 hive::Configuration::getMetaData(metaData,isNetwork,[=](hive::ResultAPI const & result,std::string value) { if (result.isSuccess()) { // API 호출 성공 } }); |
API Reference: com.hive.Configuration.getMetaData
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
// 데이터 키 String key = "game_server_url"; // 데이터 갱신 여부 Boolean forceReload = false; // 메타 데이터 호출 Configuration.getMetaData(key, forceReload, new Configuration.GetMetaDataListener() { @Override public void onGetMetaData(ResultAPI result, String data) { if (result.isSuccess()) { // API 호출 성공 } } }); |
API Reference: HIVEConfiguration:getMetaData
1 2 3 4 5 6 7 8 9 10 11 12 13 |
let key = "game_server_url" // 데이터 갱신 여부 let forceReload = false; // 메타 데이터 호출 ConfigurationInterface.getMetaData(testKey, forceReload: false) { result, value in if result.isSuccess() { // API 호출 성공 // 실패하거나 data가 없을 때 value값은 빈값("") } } |