게임에 탑재한 Hive 기능을 이용하려면 반드시 Hive SDK를 초기화해야 합니다. Hive SDK 초기화를 진행하면 Hive 콘솔에 등록된 약관 및 업데이트·공지 팝업이 자동으로 노출됩니다.
초기화 동작 방식
Hive SDK 초기화 시 다음 기능을 수행합니다.
- Hive SDK는 초기화 함수 하나로 다음 항목을 초기화합니다.
- Hive SDK에서는 직접 앱 접근 권한을 고지하지 않습니다. 자세한 내용은 FAQ를 확인하세요.
- 해당 게임에 설정된 업데이트·공지 팝업을 노출합니다. Google Play 스토어에서는 인앱 업데이트도 지원합니다. 업데이트 팝업을 등록하는 방법은 Hive 콘솔 가이드를 확인하세요.
- 접속한 유저의 IP 및 설정된 약관을 확인하여 노출합니다.
인앱 업데이트
인앱 업데이트는 업데이트 팝업 설정에 따라 앱을 종료하지 않고 백그라운드에서 앱을 업데이트할 수 있는 기능입니다. 인앱 업데이트는 다음 조건에서 사용할 수 있습니다.
- Google Play 스토어만 지원합니다.
- Android 모바일, Android 태블릿, ChromeOS 디바이스만을 지원합니다.
- 앱 파일 형식은 AAB(Android App Bundle)와 APK를 모두 지원합니다. 단, APK 확장 파일(.obb파일)은 지원하지 않습니다.
- AAB는 최대 200MB, APK는 최대 150MB 용량을 지원합니다.
초기화 다이어그램
Hive 인증키 등록하기
Configuration 클래스의 API를 사용하여 Hive 콘솔 페이지를 통해 발급된 Hive 인증키를 초기화 전에 등록해주세요. 해당 API는 4.15.0 이상의 버전부터 제공됩니다.
API Reference: Configuration.setHiveCertificationKey
1 2 3 4 5 |
using hive; String hiveCertKey = "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJIaXZlIiwiaWF0IjoxNjAzNzc4OTU2LCJqdGkiOiIxODczMTExMzIwIn0.OxWo4R6UdI0BLP1ckt8RlMFrPAb5H7TNedmLFV1Cawc"; Configuration.setHiveCertificationKey(hiveCertKey); |
API Reference: Configuration::setHiveCertificationKey
1 2 3 4 5 6 7 |
#include <HIVE_SDK_Plugin/HIVE_CPP.h> using namespace std; using namespace hive; string hiveCertKey = "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJIaXZlIiwiaWF0IjoxNjAzNzc4OTU2LCJqdGkiOiIxODczMTExMzIwIn0.OxWo4R6UdI0BLP1ckt8RlMFrPAb5H7TNedmLFV1Cawc"; Configuration::setHiveCertificationKey(hiveCertKey); |
API Reference: Configuration.hiveCertificationKey
1 2 3 4 5 |
import com.hive.Configuration val hiveCertKey = "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJIaXZlIiwiaWF0IjoxNjAzNzc4OTU2LCJqdGkiOiIxODczMTExMzIwIn0.OxWo4R6UdI0BLP1ckt8RlMFrPAb5H7TNedmLFV1Cawc" Configuration.hiveCertificationKey = hiveCertKey |
API Reference: Configuration.INSTANCE.setHiveCertificationKey
1 2 3 4 5 |
import com.hive.Configuration; String hiveCertKey = "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJIaXZlIiwiaWF0IjoxNjAzNzc4OTU2LCJqdGkiOiIxODczMTExMzIwIn0.OxWo4R6UdI0BLP1ckt8RlMFrPAb5H7TNedmLFV1Cawc"; Configuration.INSTANCE.setHiveCertificationKey(hiveCertkey); |
API Reference: ConfigurationInterface.setHiveCertificationKey
1 2 3 4 5 |
import HIVEService let hiveCertKey = "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJIaXZlIiwiaWF0IjoxNjAzNzc4OTU2LCJqdGkiOiIxODczMTExMzIwIn0.OxWo4R6UdI0BLP1ckt8RlMFrPAb5H7TNedmLFV1Cawc" ConfigurationInterface.setHiveCertificationKey(hiveCertKey) |
API Reference: [HIVEConfiguration setHiveCertificationKey: hiveCertKey]
1 2 3 4 5 |
#import <HIVEService/HIVEService-Swift.h> NSString *hiveCertKey = @"eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJIaXZlIiwiaWF0IjoxNjAzNzc4OTU2LCJqdGkiOiIxODczMTExMzIwIn0.OxWo4R6UdI0BLP1ckt8RlMFrPAb5H7TNedmLFV1Cawc"; [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 { // 초기화 실패 } }]; |
서버 점검 팝업
게임 서비스를 위해서는 게임 클라이언트의 업데이트 후에 하위 버전을 차단하거나 게임 서버의 점검 시간 동안 게임 접속을 차단하는 기능이 필요합니다. 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: AuthV4.checkMaintenance
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
using hive; // Hive SDK UI 사용여부 Boolean isShow = true; 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 20 |
#include <HIVE_SDK_Plugin/HIVE_CPP.h> using namespace std; using namespace hive; // Hive SDK UI 사용여부 bool isShow = true; AuthV4::checkMaintenance(isShow, [=](ResultAPI const & result, 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: AuthV4.checkMaintenance
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
import com.hive.AuthV4 import com.hive.ResultAPI // Hive SDK UI 사용여부 val isShow = true AuthV4.checkMaintenance(isShow, object : AuthV4.AuthV4MaintenanceListener { override fun onAuthV4Maintenance(result: ResultAPI, maintenanceInfo: ArrayList?) { if (result.isSuccess) { // 등록된 점검 데이터가 없는 경우 // isShow가 false인 경우 } else if (result.needExit()) { // TODO: 앱 종료 기능을 구현하세요 // 예) exitProcess(0) } } }) |
API Reference: AuthV4.INSTANCE.checkMaintenance
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
import com.hive.AuthV4; import com.hive.ResultAPI; // Hive SDK UI 사용여부 boolean isShow = true; AuthV4.INSTANCE.checkMaintenance(isShow, (result, maintenanceInfo) -> { if (result.isSuccess()) { // 등록된 점검 데이터가 없는 경우 // isShow가 false인 경우 } else if (result.needExit()) { // TODO: 앱 종료 기능을 구현하세요 // 예) System.exit(0); } }); |
API Reference: AuthV4Interface.checkMaintenance
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
import HIVEService // Hive SDK UI 사용여부 let isShow = true 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 |
#import <HIVEService/HIVEService-Swift.h> // Hive SDK UI 사용 여부 BOOL isShow = YES; [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 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 웹뷰 띄우기
약관 다시보기
약관 적용하기
Hive SDK는 초기화 시 유저의 접속 IP로 판단한 국가 및 퍼블리싱사에 맞는 적절한 약관을 노출시키지만, 이후 게임에서는 국가별로 어떤 약관에 대한 동의를 받는지 여부와 상관 없이 모든 유저가 약관 및 개인정보처리방침 등을 볼 수 있는 링크를 제공해야 합니다. Hive에서 제공하는 약관 링크를 연결하면 Hive 백오피스에 등록된 조건에 따라 노출될 약관이 자동으로 선택되어 노출됩니다. 약관 링크를 표기하는 규정은 퍼블리싱 회사에 따라 차이가 있습니다.
약관을 표시하기 위해서는 AuthV4 클래스의 showTerms()
메서드를 호출하세요. 다음은 이용약관을 노출하는 예제 코드입니다.
API Reference: AuthV4.showTerms
1 2 3 4 5 6 7 |
using hive; AuthV4.showTerms((ResultAPI result) => { if (result.isSuccess()) { // 호출 성공 } }); |
API Reference: AuthV4::showTerms
1 2 3 4 5 6 7 8 9 |
#include <HIVE_SDK_Plugin/HIVE_CPP.h> using namespace std; using namespace hive; AuthV4::showTerms([=](ResultAPI const & result) { if (result.isSuccess()) { // 호출 성공 } }); |
API Reference: AuthV4.showTerms
1 2 3 4 5 6 7 8 9 10 |
import com.hive.AuthV4 import com.hive.ResultAPI AuthV4.showTerms(object : AuthV4.AuthV4ShowTermsListener { override fun onAuthV4ShowTerms(result: ResultAPI) { if (result.isSuccess) { // 호출 성공 } } }) |
API Reference: AuthV4.INSTANCE.showTerms
1 2 3 4 5 6 7 8 |
import com.hive.AuthV4; import com.hive.ResultAPI; AuthV4.INSTANCE.showTerms(result -> { if (result.isSuccess()) { // 호출 성공 } }); |
API Reference: AuthV4Interface.showTerms
1 2 3 4 5 6 7 |
import HIVEService AuthV4Interface.showTerms() { result in if result.isSuccess() { // 호출 성공 } } |
API Reference: [HIVEAuthV4 showTerms]
1 2 3 4 5 6 7 |
#import <HIVEService/HIVEService-Swift.h> [HIVEAuthV4 showTerms:^(HIVEResultAPI *result) { if ([result isSuccess]) { // 호출 성공 } }]; |
약관 동의 내역 삭제하기
게임 유저가 게임을 최초 실행할 때 게임 약관에 한 번 동의한 후에는, 약관에 동의한 내역이 기기에 남습니다. 아래 resetAgreement
메서드는 이 내역을 삭제합니다.
1 2 3 |
using hive; AuthV4.resetAgreement(); |
1 2 3 4 |
#include <HIVE_SDK_Plugin/HIVE_CPP.h> using namespace hive; AuthV4::resetAgreement(); |
1 2 3 |
import com.hive.AuthV4 AuthV4.resetAgreement() |
1 2 3 |
import com.hive.AuthV4; AuthV4.INSTANCE.resetAgreement(); |
1 2 3 |
import HIVEService AuthV4Interface.resetAgreement() |
1 2 3 |
#import <HIVEService/HIVEService-Swift.h> [AuthV4Interface resetAgreement]; |
Hive 프로필
Hive 프로필 화면을 노출하려면 AuthV4 클래스의 showProfile()
을 호출합니다. 프로필 화면을 노출하면, 유저는 프로필 화면에서 프로필 이미지와 별명을 확인하고 변경할 수 있습니다.
다음은 Hive 프로필을 노출하는 예제 코드입니다.
API Reference: AuthV4.showProfile
1 2 3 4 5 6 7 8 9 10 |
using hive; // 로그인한 유저의 playerId Int64 playerId = 12345; AuthV4.showProfile(playerId, (ResultAPI result) => { if (result.isSuccess()) { // 호출 성공 } }); |
API Reference: AuthV4::showProfile
1 2 3 4 5 6 7 8 9 10 11 12 |
#include <HIVE_SDK_Plugin/HIVE_CPP.h> using namespace std; using namespace hive; // 로그인한 유저의 playerId long long playerId = 12345; AuthV4::showProfile(playerId, [=](ResultAPI const & result){ if (result.isSuccess()) { // 호출 성공 } }); |
API Reference: AuthV4.showProfile
1 2 3 4 5 6 7 8 9 10 11 12 13 |
import com.hive.AuthV4 import com.hive.ResultAPI // 로그인한 유저의 playerId val playerId = 12345L AuthV4.showProfile(playerId, object : AuthV4.AuthV4ShowProfileListener{ override fun onAuthV4ShowProfile(result: ResultAPI) { if (result.isSuccess) { // 호출 성공 } } }) |
API Reference: AuthV4.INSTANCE.showProfile
1 2 3 4 5 6 7 8 9 10 11 |
import com.hive.AuthV4; import com.hive.ResultAPI; // 로그인한 유저의 playerId long playerId = 12345; AuthV4.INSTANCE.showProfile(playerId, result -> { if (result.isSuccess()) { // 호출 성공 } }); |
API Reference: AuthV4Interface.showProfile
1 2 3 4 5 6 7 8 9 10 |
import HIVEService // 로그인한 유저의 playerId let playerId: Int64 = 12345 AuthV4Interface.showProfile(playerId) { result in if result.isSuccess() { // 호출 성공 } } |
API Reference: [HIVEAuthV4 showProfile]
1 2 3 4 5 6 7 8 9 10 |
#import <HIVEService/HIVEService-Swift.h> // 로그인한 유저의 playerId long long playerId = 12345; [HIVEAuthV4 showProfile: playerId handler: ^(HIVEResultAPI *result) { if ([result isSuccess]) { // 호출 성공 } }]; |
만약 Hive 멤버십 IdP를 제공한다면, Hive 멤버십은 아래와 같이 Hive 프로필 화면에 있는 Hive 계정 설정에서 비밀번호 변경과 탈퇴 기능을 제공하므로, 반드시 showProfile()
을 구현해야 합니다.
Hive 멤버십 IdP가 아닌 다른 IdP만을 제공하더라도, 프로필 화면을 노출하면 해외 로그인 차단, 전체 로그아웃, 로그인 기록 확인 등 보안 기능을 제공할 수 있습니다. 따라서, 프로필 화면을 노출하도록 showProfile()
구현을 권장합니다. Facebook 등 프로필 이미지와 닉네임을 반환하는 IdP와 연동한 경우, 해당 IdP에서 제공한 이미지와 닉네임을 프로필에 자동으로 불러옵니다.
문의하기
Hive 플랫폼의 고객 서비스 창구로 각 게임별 FAQ를 조회하고 문의할 수 있는 기능을 제공합니다. 게임 내 기능뿐만 아니라 Hive 모바일 및 PC 웹 사이트에서도 동일한 기능을 이용할 수 있습니다. 유저가 게임에 대한 문의를 등록할 수 있도록 CS Code(PlayerID)를 노출하고 Hive 고객센터로 연결되는 버튼을 제공하세요.
1:1 문의를 노출하기 위해서는 AuthV4 클래스의 showInquiry()
함수를 호출하면 됩니다.
다음은 문의하기를 노출하는 예제 코드입니다.
API Reference: AuthV4.showInquiry
1 2 3 4 5 6 7 |
using hive; AuthV4.showInquiry((ResultAPI result) => { if (result.isSuccess()) { // 호출 성공 } }); |
API Reference: AuthV4::showInquiry
1 2 3 4 5 6 7 8 9 |
#include <HIVE_SDK_Plugin/HIVE_CPP.h> using namespace std; using namespace hive; AuthV4::showInquiry([=](ResultAPI const & result) { if (result.isSuccess()) { // 호출 성공 } }); |
API Reference: AuthV4.showInquiry
1 2 3 4 5 6 7 8 9 10 |
import com.hive.AuthV4 import com.hive.ResultAPI AuthV4.showInquiry(object : AuthV4.AuthV4ShowInquiryListener { override fun onAuthV4ShowInquiry(result: ResultAPI) { if (result.isSuccess) { // 호출 성공 } } }) |
API Reference: AuthV4.INSTANCE.showInquiry
1 2 3 4 5 6 7 8 |
import com.hive.AuthV4; import com.hive.ResultAPI; AuthV4.INSTANCE.showInquiry(result -> { if (result.isSuccess()) { // 호출 성공 } }); |
API Reference: AuthV4Interface.showInquiry
1 2 3 4 5 6 7 |
import HIVEService AuthV4Interface.showInquiry() { result in if result.isSuccess() { // 호출 성공 } } |
API Reference: [HIVEAuthV4 showInquiry]
1 2 3 4 5 6 7 |
#import <HIVEService/HIVEService-Swift.h> [HIVEAuthV4 showInquiry: ^(HIVEResultAPI *result) { if ([result isSuccess]) { // 호출 성공 } }]; |
내 문의 내역 바로가기
Hive 고객센터는 Hive 멤버십 연동 유저에게 본인이 접수한 문의 내역을 바로 확인할 수 있는 기능을 제공합니다. AuthV4 클래스의 showMyInquiry()
메서드를 호출하여 내 문의 내역 바로 가기를 적용해보세요. 유저가 게임에 대한 문의 사항을 보다 간편하게 해결할 수 있는 환경이 구현됩니다. 다만, Hive 모바일이나 웹 사이트를 통해 문의한 경우에는 Hive 멤버십 로그인 여부를 확인할 수 없기 때문에 Hive ID와 CS Code(PlayerID)를 입력해도 앱에서는 노출되지 않습니다.
다음은 내 문의하기를 노출하는 예제 코드 입니다.
API Reference: hive.AuthV4.showMyInquiry
1 2 3 4 5 6 7 |
using hive; AuthV4.showMyInquiry((ResultAPI result) => { if (result.isSuccess()) { // 호출 성공 } }); |
API Reference: AuthV4::showMyInquiry
1 2 3 4 5 6 7 8 9 |
#include <HIVE_SDK_Plugin/HIVE_CPP.h> using namespace std; using namespace hive; AuthV4::showMyInquiry([=](ResultAPI const & result) { if (result.isSuccess()) { // 호출 성공 } }); |
API Reference: AuthV4.showMyInquiry
1 2 3 4 5 6 7 8 9 10 |
import com.hive.AuthV4 import com.hive.ResultAPI AuthV4.showMyInquiry(object : AuthV4.AuthV4ShowMyInquiryListener { override fun onAuthV4ShowMyInquiry(result: ResultAPI) { if (result.isSuccess) { // 호출 성공 } } }) |
API Reference: com.hive.AuthV4.showMyInquiry
1 2 3 4 5 6 7 8 |
import com.hive.AuthV4; import com.hive.ResultAPI; AuthV4.INSTANCE.showMyInquiry(result -> { if (result.isSuccess()) { // 호출 성공 } }); |
API Reference: AuthV4Interface.showMyInquiry
1 2 3 4 5 6 7 |
import HIVEService AuthV4Interface.showMyInquiry() { result in if result.isSuccess() { // 호출 성공 } } |
API Reference: HIVEAuthV4::showMyInquiry
1 2 3 4 5 6 7 |
#import <HIVEService/HIVEService-Swift.h> [HIVEAuthV4 showMyInquiry: ^(HIVEResultAPI *result) { if ([result isSuccess]) { // 호출 성공 } }]; |
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 8 9 10 |
using hive; // 챗봇 페이지 바로가기 API 호출시 전달하기로한 약속한 JSON 형식의 String 데이터 String additionalInfo = "{ \"init_path\":\"hive_sdk_api\" }"; AuthV4.showChatbotInquiry(additionalInfo, (ResultAPI result) => { if (result.isSuccess()) { // 호출 성공 } }); |
API Reference: AuthV4::showChatbotInquiry
1 2 3 4 5 6 7 8 9 10 11 12 |
#include <HIVE_SDK_Plugin/HIVE_CPP.h> using namespace std; using namespace hive; // 챗봇 페이지 바로가기 API 호출시 전달하기로한 약속한 JSON 형식의 String 데이터 string additionalInfo = "{ \"init_path\":\"hive_sdk_api\" }"; AuthV4::showChatbotInquiry(additionalInfo, [=](ResultAPI const &result) { if (result.isSuccess()) { // 호출 성공 } }); |
API Reference: AuthV4.showChatbotInquiry
1 2 3 4 5 6 7 8 9 10 11 12 13 |
import com.hive.AuthV4 import com.hive.ResultAPI // 챗봇 페이지 바로가기 API 호출시 전달하기로한 약속한 JSON 형식의 String 데이터 val additionalInfo = "{ \"init_path\":\"hive_sdk_api\" }" AuthV4.showChatbotInquiry(additionalInfo, object : AuthV4.AuthV4ShowChatbotInquiryListener { override fun onAuthV4ShowChatbotInquiry(result: ResultAPI) { if (result.isSuccess) { // 호출 성공 } } }) |
API Reference: com.hive.AuthV4.showChatbotInquiry
1 2 3 4 5 6 7 8 9 10 11 |
import com.hive.AuthV4; import com.hive.ResultAPI; // 챗봇 페이지 바로가기 API 호출시 전달하기로한 약속한 JSON 형식의 String 데이터 String additionalInfo = "{ \"init_path\":\"hive_sdk_api\" }"; AuthV4.INSTANCE.showChatbotInquiry(additionalInfo, result -> { if (result.isSuccess()) { // 호출 성공 } }); |
API Reference: AuthV4Interface.showChatbotInquiry
1 2 3 4 5 6 7 8 9 10 |
import HIVEService // 챗봇 페이지 바로가기 API 호출시 전달하기로한 약속한 JSON 형식의 String 데이터 let additionalInfo = "{ \"init_path\":\"hive_sdk_api\" }" AuthV4Interface.showChatbotInquiry(additionalInfo) { result in if result.isSuccess() { // 호출 성공 } } |
API Reference: HIVEAuthV4::showChatbotInquiry
1 2 3 4 5 6 7 8 9 10 |
#import <HIVEService/HIVEService-Swift.h> // 챗봇 페이지 바로가기 API 호출시 전달하기로한 약속한 JSON 형식의 String 데이터 NSString *additionalInfo = @"{ \"init_path\":\"hive_sdk_api\" }"; [HIVEAuthV4 showChatbotInquiry:additionalInfo handler:^(HIVEResultAPI *result) { if ([result isSuccess]) { // 호출 성공 } }]; |
챗봇 설정하기
챗봇에서 사용하는 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에서 아래 설정을 추가로 적용하고 빌드합니다.
커뮤니티 노출하기
커뮤니티에서 자동 로그인 처리 및 정상적인 동작을 위해서는 아래와 같이 API 호출을 통해 노출해주세요. 하이브 규약을 따르는 커뮤니티 사이트를 설정할 때 withhive.com, com2us.com이 아닌 커스텀 도메인 주소를 사용하려면, 사용할 도메인 주소를 Hive 콘솔 화이트리스트에 등록한 후 이 API를 호출해야합니다.
API Reference: SocialV4.showCommunity
1 2 3 4 5 6 7 8 9 10 |
using hive; // 뷰 타입 설정 (FullScreen: 전체 화면, Frame: 프레임 화면) SocialV4.ViewType viewType = SocialV4.ViewType.Frame; SocialV4.showCommunity(SocialV4.ProviderType.HIVE, viewType, (ResultAPI result) => { if (result.isSuccess()) { // 호출 성공 } }); |
API Reference: SocialV4.showCommunity
1 2 3 4 5 6 7 8 9 10 11 12 |
#include <HIVE_SDK_Plugin/HIVE_CPP.h> using namespace std; using namespace hive; // 뷰 타입 설정 (FullScreen: 전체 화면, Frame: 프레임 화면) SocialV4::ViewType viewType = SocialV4::ViewType::Frame; SocialV4.showCommunity(SocialV4::ProviderType::HIVE, viewType, (ResultAPI const & result) { if (result.isSuccess()) { // 호출 성공 } }); |
API Reference: SocialV4.showCommunity
1 2 3 4 5 6 7 8 9 10 11 12 13 |
import com.hive.SocialV4 import com.hive.ResultAPI // 뷰 타입 설정 (FullScreen: 전체 화면, Frame: 프레임 화면) val viewType = SocialV4.ViewType.Frame SocialV4.showCommunity(SocialV4.ProviderType.HIVE, viewType, object : SocialV4.SocialV4ShowCommunityListener{ override fun onShowCommunity(result: ResultAPI) { if (result.isSuccess) { // 호출 성공 } } }) |
API Reference: SocialV4.INSTANCE.showCommunity
1 2 3 4 5 6 7 8 9 10 11 |
import com.hive.SocialV4; import com.hive.ResultAPI; // 뷰 타입 설정 (FullScreen: 전체 화면, Frame: 프레임 화면) SocialV4.ViewType viewType = SocialV4.ViewType.Frame; SocialV4.INSTANCE.showCommunity(SocialV4.ProviderType.HIVE, viewType, result -> { if (result.isSuccess()) { // 호출 성공 } }); |
API Reference: SocialV4Interface.showCommunity
1 2 3 4 5 6 7 8 9 10 |
import HIVEService // 뷰 타입 설정 (FullScreen: 전체 화면, Frame: 프레임 화면) let viewType = SocialViewType.Frame SocialV4Interface.showCommunity(.HIVE, viewType) { result in if result.isSuccess() { // 호출 성공 } } |
API Reference: HIVESocialV4 showCommunity
1 2 3 4 5 6 7 8 9 10 |
#import <HIVEService/HIVEService-Swift.h> // 뷰 타입 설정 (FullScreen: 전체 화면, Frame: 프레임 화면) HIVESocialViewType viewType = HIVESocialViewTypeFrame; [HIVESocialV4 showCommunity: HVIESocialProviderTypeHIVE viewType: viewType handler: ^(HIVEResultAPI *result) { if ([result isSuccess]) { // 호출 성공 } }]; |
리모트 로깅
리모트 로깅은 클라이언트의 디버깅 로그를 Hive 서버에 보내 이미 상용에 출시된 앱의 디버깅용 로그를 원격으로 확인할 수 있는 기능입니다. Hive 콘솔에서 등록하는 방식이며, 타겟 유저의 리모트 로그만 활성화할 수 있습니다. 등록 방법에 대한 자세한 설명은 리모트 로깅 운영가이드에서 확인하세요.
- 활성화
리모트 로깅을 활성화하면 Hive 콘솔에 입력한 수집 시간 동안 Hive 로그와 게임 로그를 수집합니다. Hive 로그는 SDK에서 설정한 값을 기본으로 수집되고, 게임 로그는 게임에서 설정한 값이 수집됩니다.
- 타겟팅
리모트 로깅은 Hive SDK 초기화를 최소 한 번 이상 거쳐 DID가 발급된 유저만을 대상으로 설정할 수 있습니다. 다만 SDK를 초기화하기 전에 크래시나 오류가 발생한 앱에서는 사용할 수 없습니다. - 동작 방식
- 예제 코드
게임에서 로그를 수집하려는 위치마다 아래 코드를 삽입합니다.
API Reference: Logger.log
1 2 3 |
using hive; Logger.log("로깅 내용 입력"); |
API Reference: Logger::log
1 2 3 4 5 |
#include <HIVE_SDK_Plugin/HIVE_CPP.h> using namespace std; using namespace hive; Logger::log("로깅 내용 입력"); |
API Reference: Logger.i
1 2 3 |
import com.hive.Logger Logger.i("로깅 내용 입력") |
API Reference: Logger.INSTANCE.i
1 2 3 |
import com.hive.Logger; Logger.INSTANCE.i("로깅 내용 입력"); |
API Reference: LogInterface.log
1 2 3 |
import HIVEBase LogInterface.log(sourceInfo: "로그 소스 정보 (클래스, 메소드 이름)", type: .Info, tag: "로그 태그", msg: "로그 메세지") |
API Reference: Objective-C
1 2 3 |
#import <HIVEBase/HIVEBase-Swift.h> [HIVELogger logWithSourceInfo:@"로그 소스 정보(클래스, 메소드 이름)" type: LogTypeInfo tag: @"로그 태그" msg: @"로그 메세지"]; |
리모트 컨피그레이션
Hive를 적용한 게임에서는 앱의 각 버전과 1 대 1 매핑 되는 게임 서버 URL을 관리할 수 있습니다. 게임 서버 URL은 Configuration 클래스의 getMetaData()
API를 호출하여 string 형태로 전달됩니다. 다음은 게임 서버 URL을 호출하는 예제 코드입니다.
API Reference: Configuration.getMetaData
1 2 3 4 5 6 7 8 9 10 11 12 13 |
using hive; // 데이터 키 String key = "game_server_url"; // 데이터 갱신 여부 Boolean forceReload = false; // 메타 데이터 호출 Configuration.getMetaData(key, forceReload, (ResultAPI result, String value) => { if (result.isSuccess()) { // 호출 성공 } }); |
API Reference: Configuration::getMetaData
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
#include <HIVE_SDK_Plugin/HIVE_CPP.h> using namespace std; using namespace hive; // 데이터 키 string key = "game_server_url"; // 데이터 갱신 여부 bool forceReload = false; // 메타 데이터 호출 Configuration::getMetaData(key, forceReload, [=](ResultAPI const & result, string value) { if (result.isSuccess()) { // 호출 성공 } }); |
API Reference: Configuration.getMetaData
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
import com.hive.Configuration import com.hive.ResultAPI // 데이터 키 val key = "game_server_url" // 데이터 갱신 여부 val forceReload = false // 메타 데이터 호출 Configuration.getMetaData(key, forceReload, object : Configuration.GetMetaDataListener { override fun onGetMetaData(result: ResultAPI, data: String) { if (result.isSuccess) { // 호출 성공 } } }) |
API Reference: Configuration.INSTANCE.getMetaData
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
import com.hive.Configuration; import com.hive.ResultAPI; // 데이터 키 String key = "game_server_url"; // 데이터 갱신 여부 boolean forceReload = false; // 메타 데이터 호출 Configuration.INSTANCE.getMetaData(key, forceReload, (result, data) -> { if (result.isSuccess()) { // 호출 성공 } }); |
API Reference: ConfigurationInterface.getMetaData
1 2 3 4 5 6 7 8 9 10 11 12 13 |
import HIVEService // 데이터 키 let key = "game_server_url" // 데이터 갱신 여부 let forceReload = false; // 메타 데이터 호출 ConfigurationInterface.getMetaData(key, forceReload: forceReload) { result, value in if result.isSuccess() { // 호출 성공 } } |
API Reference: HIVEConfiguration getMegaData
1 2 3 4 5 6 7 8 9 10 11 12 13 |
#import <HIVEService/HIVEService-Swift.h> // 데이터 키 NSString *key = @"game_server_url"; // 데이터 갱신 여부 BOOL forceload = NO; // 메타 데이터 호출 [HIVEConfiguration getMegaData: key forceReload: forceReload handler: ^(HIVEResultAPI *result, NSString *value) { if ([result isSuccess]) { // 호출 성공 } }]; |