Hive SDK 초기화하기¶
게임에 탑재한 Hive 기능을 이용하려면 반드시 Hive SDK를 초기화해야 합니다. Hive SDK 초기화를 진행하면 Hive 콘솔에 등록된 약관 및 업데이트·공지 팝업이 자동으로 노출됩니다.
Warning
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 용량을 지원합니다.
초기화 다이어그램¶
Note
iOS의 앱 추적 투명성(App Tracking Transparency) 팝업은 약관동의 팝업이 노출되고 약관동의가 완료되면 노출됩니다.
Hive 인증키 등록하기¶
Configuration 클래스의 API를 사용하여 Hive 콘솔 페이지를 통해 발급된 Hive 인증키를 초기화 전에 등록해주세요. 해당 API는 4.15.0 이상의 버전부터 제공됩니다.
API Reference: Unity®
API Reference: C++
#include <HIVE_SDK_Plugin/HIVE_CPP.h>
using namespace std;
using namespace hive;
string hiveCertKey = "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJIaXZlIiwiaWF0IjoxNjAzNzc4OTU2LCJqdGkiOiIxODczMTExMzIwIn0.OxWo4R6UdI0BLP1ckt8RlMFrPAb5H7TNedmLFV1Cawc";
Configuration::setHiveCertificationKey(hiveCertKey);
API Reference: Kotlin
API Reference: Java
API Reference: Swift
API Reference: Objective-C
초기화 구현하기¶
Hive SDK를 초기화하려면 AuthV4 클래스의 setup()
메서드를 호출하세요. 이 때 호출 결과로 다음 정보를 전달하게 되며 해당 정보는 게임에서 저장하여 적절한 시점에 사용할 수 있습니다.
- Hive 초기화 수행 결과 정보
필드명 | 설명 | 예제 |
---|---|---|
isAutoSignIn | 자동 로그인 가능 여부 | true |
did | 앱 설치시 생성되는 앱 식별자로 동일한 종류의 앱을 식별할 때 사용합니다. | 123456789 |
providerTypeList | 현재 앱에서 제공 가능한 IdP 인증 목록 명시적 로그인을 커스터마이징하거나 IdP 연동 상태 정보를 구성할 때 필수적으로 사용해야 하는 필드입니다. | ProviderType.FACEBOOK ProviderType.HIVE |
다음은 setup()
메서드 구현 예제입니다.
API Reference: AuthV4::setup
// Request Hive SDK Initialization
AuthV4::setup([=](ResultAPI const & result, bool isAutoSignIn, std::string did, std::vector<ProviderType> const & providerTypeList) {
if (result.isSuccess()) {
// the initialization is successfully done. Handle login based on whether the auto-login is enabled or not.
} else if (result.needExit()) {
// TODO: Implement the termination of the app
// Users of the Cocos2d-x engine
// ex) exit(0);
// Unreal engine users
// Example) UKismetSystemLibrary::QuitGame(GetWorld(), nullptr, EQuitPreference::Quit, false);
} else {
// initialization failed } });
API Reference: com.hive.AuthV4.setup
// Request Hive SDK Initialization
AuthV4.setup(object: AuthV4.AuthV4SetupListener{
override fun onAuthV4Setup(result: ResultAPI, isAutoSignIn: Boolean, did: String?, providerTypeList: ArrayList<AuthV4.ProviderType>?) { if (result.isSuccess) {
// the initialization is successfully done. Handle login based on whether the auto-login is enabled or not.
} else if (result.needExit()) {
// TODO: Implement the termination of the app
// ex) exitProcess(0)
} else {
// initialization failed } } })
API Reference: com.hive.AuthV4.setup
// Request Hive SDK Initialization
AuthV4.setup(new AuthV4.AuthV4SetupListener() {
@Override
public void onAuthV4Setup(ResultAPI result, boolean isAutoSignIn, String did, ArrayList<AuthV4.ProviderType> providerTypeList) {
if (result.isSuccess()) {
// the initialization is successfully done. Handle login based on whether the auto-login is enabled or not.
} else if (result.needExit()) {
// TODO: Implement the termination of the app
// ex) System.exit(0);
} else {
// initialization failed } } });
API Reference: HIVEAuthV4:setup
AuthV4Interface.setup { (result, isAutoSignIn, did, providerTypeList) in
if result.isSuccess() {
// the initialization is successfully done. Handle login based on whether the auto-login is enabled or not.
} else if result.needExit() {
// TODO: Implement the termination of the app
// Example) exit(0)
} else {
// initialization failed
}
}
API Reference: HIVEAuthV4:setup
// Request Hive SDK Initialization
[HIVEAuthV4 setup:^(HIVEResultAPI *result, BOOL isAutoSignIn, NSString *did, NSArray<NSNumber *> *providerTypeList) {
if (result.isSuccess) {
// the initialization is successfully done. Handle login based on whether the auto-login is enabled or not.
} else if (result.needExit) {
// TODO: Implement the termination of the app
// ex) exit(0);
} else {
// Initialization failed } }];
#include "HiveAuthV4.h"
FHiveAuthV4::Setup(FHiveAuthV4OnSetupDelegate::CreateLambda([this](const FHiveResultAPI& Result,
bool IsAutoSignIn,
const FString& Did,
const TArray<EHiveProviderType>& ProviderTypeArray)
{
if (Result.IsSuccess()) {
// 초기화 성공. 자동 로그인 가능 여부에 따라 로그인을 처리하세요.
} else if (Result.NeedExit()) {
// TODO: 앱 종료 기능을 구현하세요
// 예) UKismetSystemLibrary::QuitGame(GetWorld(), nullptr, EQuitPreference::Quit, false);
} else {
// 초기화 실패
}
}));
Note
게임 서비스를 종료한 상태에서
setup
메서드를 실행하면 에러 코드를 반환합니다.
서버 점검 팝업¶
게임 서비스를 위해서는 게임 클라이언트의 업데이트 후에 하위 버전을 차단하거나 게임 서버의 점검 시간 동안 게임 접속을 차단하는 기능이 필요합니다. Hive는 Hive 콘솔에 설정된 정보에 따라 게임 강제 업데이트, 공지, 서버 점검 순으로 팝업을 노출하는 기능을 제공합니다. 게임에서는 Hive SDK에서 제공하는 UI를 이용하거나 Hive에서 제공하는 정보만 수신하여 커스터마이징 된 UI를 직접 구현할 수 있습니다.
게임 강제 업데이트 | 특정 버전의 게임 이용을 차단하고 업데이트를 위한 링크를 제공 |
서버 점검 | 게임 서버별로 점검 여부를 설정할 수 있으며, 점검 시간 동안 게임 관련 링크 제공을 권장함 |
공지 | 강제가 아닌 게임 업데이트에 대한 안내, 전체 유저에게 고지해야 할 중요한 공지사항의 노출을 위해 이용 |
Note
- 업데이트 및 점검 팝업은 초기화 단계에 포함되어 있지만 서버 점검 팝업은 서버가 자동으로 선택되거나, 유저가 직접 선택 혹은 변경하는 단계에 필수적으로 노출될 수 있도록 구현합니다.
- Hive 초기화 단계 이후 ~ 게임 서버 접속 시점(게임에서 접속을 강제로 종료 시킬 수 있는 시점) 이전에 게임을 시작하지 않고 대기할 수 있을 경우, 서버 점검 팝업을 설정해도 접속을 차단할 수 없습니다. 이에 대비하여 게임에서 접속을 강제로 종료 시킬 수 있는 시점에 진입하는 단계에 서버 점검 팝업을 띄워야 합니다.
게임 서버가 여러 개의 경우 유저가 선택하거나 설정된 게임 서버 정보를 반드시 Hive에 설정해야 합니다. 유저가 게임 서버를 선택해야 하는 경우 서버 점검 팝업 노출 전에 서버 선택 UI를 구현하고 Configuration 클래스의 setServerId()
혹은 메서드를 호출하여 Hive 설정을 변경해 주세요. 해당 시점에 Hive 설정 변경과 함께 프로모션 새소식 데이터를 같이 갱신하고 싶다면 Configuration 클래스의 setServerId()
대신 updateServerId()
를 호출해 주세요.
게임 서버가 설정된 이후에는 게임에서 원하는 시점에 서버 점검 팝업을 노출할 수 있습니다. Hive 콘솔에서 서버 점검 팝업을 설정하고 점검 시간 동안 게임 접속을 차단시킵니다. 노출되는 팝업은 Hive SDK에서 제공하는 UI를 이용하거나 Hive에서 제공하는 정보만 수신하여 UI를 커스터마이징할 수 있습니다. 서버 점검 팝업은 게임 서버별로 설정이 가능합니다.
팝업 설정하기¶
서버 점검 정보, 강제 업데이트 정보, 공지 정보는 Hive 콘솔에서 설정합니다. Hive 콘솔에서 노출할 팝업을 먼저 설정한 후에 팝업 노출 API를 호출해야 합니다. 설정 방법에 대한 자세한 내용은 운영 > 프로비저닝 가이드를 참고하세요. operation/provisioning/popup
팝업 띄우기¶
Hive는 서버 점검 팝업이나 강제 업데이트 팝업, 공지 팝업을 직접 띄우기도 하고 여러분이 팝업을 구성하여 띄울 수 있도록 팝업에 넣을 내용을 반환하기도 합니다. Hive가 팝업을 띄우면 팝업은 Hive UI 스타일로 나타나지만 여러분이 직접 팝업을 띄우면 원하는 스타일로 팝업을 띄울 수 있습니다. Hive 팝업 이용 여부에 따라 아래와 같이 파라미터를 설정하여 AuthV4 클래스의 checkMaintenance()
메서드를 호출하세요.
-
- Hive가 제공하는 팝업 이용하기:
isShow
파라미터를true
로 설정하세요. - 직접 구성한 팝업을 제공하기 위해 팝업 정보 요청하기:
isShow
파라미터를false
로 설정하세요. 팝업 정보에 대한 자세한 내용은 하단의 Hive가 반환하는 점검 팝업 정보를 참고하세요.
- 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 웹뷰 띄우기¶
약관 다시보기¶
약관 적용하기¶
Hive SDK는 초기화 시 유저의 접속 IP로 판단한 국가 및 퍼블리싱사에 맞는 적절한 약관을 노출시키지만, 이후 게임에서는 국가별로 어떤 약관에 대한 동의를 받는지 여부와 상관 없이 모든 유저가 약관 및 개인정보처리방침 등을 볼 수 있는 링크를 제공해야 합니다. Hive에서 제공하는 약관 링크를 연결하면 Hive 백오피스에 등록된 조건에 따라 노출될 약관이 자동으로 선택되어 노출됩니다. 약관 링크를 표기하는 규정은 퍼블리싱 회사에 따라 차이가 있습니다.
- 적용 예시
약관을 표시하기 위해서는 AuthV4 클래스의 showTerms()
메서드를 호출하세요. 다음은 이용약관을 노출하는 예제 코드입니다.
약관 동의 내역 삭제하기¶
게임 유저가 게임을 최초 실행할 때 게임 약관에 한 번 동의한 후에는, 약관에 동의한 내역이 기기에 남습니다. 아래 resetAgreement
메서드는 이 내역을 삭제합니다.
Note
Hive SDK 4.22.0 기준, 게임 유저가 계정을 삭제한 후 게임을 다시 실행하면 삭제했던 계정으로 약관에 동의한 정보가 남아 있어 약관 동의 팝업이 나타나지 않는 문제가 있습니다. 계정 삭제 후 Hive SDK 초기화 시 약관 동의 팝업을 다시 노출하려면
resetAgreement
를 호출하여 이전에 저장된 약관 동의 정보를 삭제해야 합니다. 그 후에,
AuthV4.setup()
을 호출하여 Hive SDK 초기화를 진행하세요.
Hive 프로필¶
Hive 프로필 화면을 노출하려면 AuthV4 클래스의 showProfile()
을 호출합니다. 프로필 화면을 노출하면, 유저는 프로필 화면에서 프로필 이미지와 별명을 확인하고 변경할 수 있습니다.
다음은 Hive 프로필을 노출하는 예제 코드입니다.
API Reference: AuthV4.showProfile
API Reference: AuthV4::showProfile
API Reference: AuthV4.showProfile
API Reference: AuthV4.INSTANCE.showProfile
API Reference: AuthV4Interface.showProfile
API Reference: [HIVEAuthV4 showProfile]
만약 Hive 멤버십 IdP를 제공한다면, Hive 멤버십은 아래와 같이 Hive 프로필 화면에 있는 Hive 계정 설정에서 비밀번호 변경과 탈퇴 기능을 제공하므로, 반드시 showProfile()
을 구현해야 합니다.
- Hive 멤버십 IdP 연동 상태의 프로필
- 게스트 및 다른 IdP 연동 상태의 프로필
Hive 멤버십 IdP가 아닌 다른 IdP만을 제공하더라도, 프로필 화면을 노출하면 해외 로그인 차단, 전체 로그아웃, 로그인 기록 확인 등 보안 기능을 제공할 수 있습니다. 따라서, 프로필 화면을 노출하도록 showProfile()
구현을 권장합니다. Facebook 등 프로필 이미지와 닉네임을 반환하는 IdP와 연동한 경우, 해당 IdP에서 제공한 이미지와 닉네임을 프로필에 자동으로 불러옵니다.
문의하기¶
Hive 플랫폼의 고객 서비스 창구로 각 게임별 FAQ를 조회하고 문의할 수 있는 기능을 제공합니다. 게임 내 기능뿐만 아니라 Hive 모바일 및 PC 웹 사이트에서도 동일한 기능을 이용할 수 있습니다. 유저가 게임에 대한 문의를 등록할 수 있도록 CS Code(PlayerID)를 노출하고 Hive 고객센터로 연결되는 버튼을 제공하세요.
Note
- Hive 고객센터는 게스트 로그인 상태에도 이용할 수 있습니다.
- 고객센터 링크를 표기하는 규정은 게임 퍼블리싱 회사에 따라 다를 수 있습니다.
- 1:1 문의 버튼 외에 전화번호나 이메일 주소 노출은 정책상 금지합니다.
- 1:1 문의 적용 예시 화면
1:1 문의를 노출하기 위해서는 AuthV4 클래스의 showInquiry()
함수를 호출하면 됩니다.
다음은 문의하기를 노출하는 예제 코드입니다.
API Reference: AuthV4.showInquiry
API Reference: AuthV4 ::showInquiry
API Reference: AuthV4.showInquiry
API Reference: AuthV4.INSTANCE.showInquiry
API Reference: AuthV4Interface .showInquiry
API Reference: [ HIVEAuthV4 showInquiry]
내 문의 내역 바로가기¶
Hive 고객센터는 Hive 멤버십 연동 유저에게 본인이 접수한 문의 내역을 바로 확인할 수 있는 기능을 제공합니다. AuthV4 클래스의 showMyInquiry()
메서드를 호출하여 내 문의 내역 바로 가기를 적용해보세요. 유저가 게임에 대한 문의 사항을 보다 간편하게 해결할 수 있는 환경이 구현됩니다. 다만, Hive 모바일이나 웹 사이트를 통해 문의한 경우에는 Hive 멤버십 로그인 여부를 확인할 수 없기 때문에 Hive ID와 CS Code(PlayerID)를 입력해도 앱에서는 노출되지 않습니다.
Note
- 고객센터의 내 문의 내역 바로 가기 API는 Hive 멤버십으로 로그인된 상태에서만 호출할 수 있습니다. 다른 IdP 연동 시 내 문의 내역으로 이동할 수 없으며 API 호출을 시도하면 에러 메시지가 반환됩니다.
- 인증 v4 환경에서는 Hive 멤버십을 IdP로 연동한 경우에만 UID가 발급되므로 게스트로 로그인 하거나 Facebook, Google 등 Hive 멤버십 외의 IdP와 연동된 상태에서는 내 문의 내역으로 이동할 수 없습니다.
다음은 내 문의하기를 노출하는 예제 코드 입니다.
API Reference: hive.AuthV4 .showMyInquiry
API Reference: AuthV4:: showMyInquiry
API Reference: AuthV4.showMyInquiry
API Reference: com.hive .AuthV4.showMyInquiry
API Reference: AuthV4Interface .showMyInquiry
API Reference: HIVEAuthV4:: showMyInquiry
Hive 챗봇 CS¶
챗봇 문의하기¶
- 챗봇 문의하기 적용 예시 화면
챗봇 문의하기를 노출하기 위해서는 AuthV4 클래스의 showChatbotInquiry()
메서드를 호출합니다.
Argument | Type | Description |
---|---|---|
additionalInfo | string | 챗봇 페이지 노출 시 함께 전달할 데이터"{ \"init_path\":\"hive_sdk_api\" }" 로 고정하며, 추가 전달할 값이 필요한 경우 컴투스플랫폼 선행개발팀과 협의 |
다음은 챗봇 문의하기를 노출하는 예제 코드입니다.
API Reference: hive .AuthV4.showChatbotInquiry
API Reference: AuthV4 ::showChatbotInquiry
#include <HIVE_SDK_Plugin/HIVE_CPP.h>
using namespace std;
using namespace hive;
// String data in JSON format promised to be delivered when calling the chatbot page shortcut API
string additionalInfo = "{ \"init_path\":\"hive_sdk_api\" }";
AuthV4::showChatbotInquiry(additionalInfo, [=](ResultAPI const &result) {
if (result.isSuccess()) {
// call successful
}
});
API Reference: AuthV4.showChatbotInquiry
import com.hive.AuthV4
import com.hive.ResultAPI
// String data in JSON format promised to be delivered when calling the chatbot page shortcut API
val additionalInfo = "{ \"init_path\":\"hive_sdk_api\" }"
AuthV4.showChatbotInquiry(additionalInfo, object : AuthV4.AuthV4ShowChatbotInquiryListener {
override fun onAuthV4ShowChatbotInquiry(result: ResultAPI) {
if (result.isSuccess) {
// call successful
}
}
})
API Reference: com.hive .AuthV4.showChatbotInquiry
import com.hive.AuthV4;
import com.hive.ResultAPI;
// String data in JSON format promised to be delivered when calling the chatbot page shortcut API
String additionalInfo = "{ \"init_path\":\"hive_sdk_api\" }";
AuthV4.INSTANCE.showChatbotInquiry(additionalInfo, result -> {
if (result.isSuccess()) {
// call successful
}
});
API Reference: AuthV4Interface.showChatbotInquiry
API Reference: HIVEAuthV4:: showChatbotInquiry
#import <HIVEService/HIVEService-Swift.h>
// String data in JSON format promised to be delivered when calling the chatbot page shortcut API
NSString *additionalInfo = @"{ \"init_path\":\"hive_sdk_api\" }";
[HIVEAuthV4 showChatbotInquiry:additionalInfo handler:^(HIVEResultAPI *result) {
if ([result isSuccess]) {
// call successful
}
}];
#include "HiveAuthV4.h"
// 챗봇 페이지 바로가기 API 호출시 전달하기로한 약속한 JSON 형식의 String 데이터
TSharedPtr<FJsonObject> AdditionalInfoJson = MakeShareable(new FJsonObject);
AdditionalInfoJson->SetStringField(TEXT("init_path"), TEXT("hive_sdk_api"));
FString StrAdditionalInfo;
TSharedRef<TJsonWriter<>> JsonWriter = TJsonWriterFactory<>::Create(&StrAdditionalInfo);
FJsonSerializer::Serialize(AdditionalInfoJson.ToSharedRef(), JsonWriter);
FHiveAuthV4::ShowChatbotInquiry(StrAdditionalInfo, FHiveAuthV4OnShowInquiryDelegate::CreateLambda([this](const FHiveResultAPI& Result) {
if (Result.IsSuccess()) {
// 호출 성공
}
}));
챗봇 설정하기¶
챗봇에서 사용하는 AppDelegate는 iOS 앱의 최상위에 있는 객체에서 발생하는 공통적인 동작(메서드)을 정의하는 클래스로, Xcode 프로젝트를 이용해 빌드할 경우 자동 생성됩니다.
Hive SDK에서는 유저의 편의를 고려해 챗봇 UI를 세로 고정형으로 노출하는데, iOS에서 해당 기능을 정상 동작하려면 게임 엔진의 AppDelegate 클래스의 화면 회전 관련 메서드 application(_:supportedInterfaceOrientationsFor:)
를 구현해야 합니다. 이 메서드의 return은 게임에 적용시킬 UIInterfaceOrientationMask 값으로 반환합니다. 가로 전용 게임일 경우 landscape, 세로 전용 게임일 경우 portrait, 가로와 세로 모두 지원하는 게임일 경우 landscape와 portrait를 모두 반환합니다.
Warning
Unity 엔진에서는 화면 회전과 관련된 AppDelegate 메서드를 이미 구현하고 있어 Xcode 프로젝트를 통해 빌드를 하게될 경우 자동 생성됩니다. 다시 말해, Unity로 게임을 제작하는 경우에는 아래 예제코드를 추가하지 않아도 됩니다.
Note
챗봇 서비스는 컴투스플랫폼 솔루션아키텍트팀에 문의해 AppID 등록 절차를 거친 후 이용할 수 있습니다.
// Objective-c로 제작한 게임 엔진인 경우 다음의 AppDelegate 함수를 구현
- (UIInterfaceOrientationMask)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window
{
// TODO: 가로 전용 게임의 경우
return UIInterfaceOrientationMaskLandscape;
// TODO: 세로 전용 게임의 경우
return UIInterfaceOrientationMaskPortrait;
// TODO: 가로, 세로 모두 지원하는 게임의 경우
return UIInterfaceOrientationMaskAll;
}
// 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를 호출해야합니다.
Note
Windows 환경에서 노출할 커뮤니티 페이지가 frame 형태로 열릴 경우, 보안 문제로 인해 페이지에 X-Frame-Options 헤더가 설정되면 페이지를 렌더링할 수 없습니다. frame 형태로 열고자 하는 페이지의 옵션을 확인하여 적용하시기 바랍니다.
API Reference: SocialV4 .showCommunity
API Reference: SocialV4 .showCommunity
#include <HIVE_SDK_Plugin/HIVE_CPP.h>
using namespace std;
using namespace hive;
// Set view type (FullScreen: full screen, Frame: frame screen)
SocialV4::ViewType viewType = SocialV4::ViewType::Frame;
SocialV4.showCommunity(SocialV4::ProviderType::HIVE, viewType, (ResultAPI const & result) {
if (result.isSuccess()) {
// call successful
}
});
API Reference: SocialV4.showCommunity
import com.hive.SocialV4
import com.hive.ResultAPI
// Set view type (FullScreen: full screen, Frame: frame screen)
val viewType = SocialV4.ViewType.Frame
SocialV4.showCommunity(SocialV4.ProviderType.HIVE, viewType, object : SocialV4.SocialV4ShowCommunityListener{
override fun onShowCommunity(result: ResultAPI) {
if (result.isSuccess) {
// call successful
}
}
})
API Reference: SocialV4.INSTANCE .showCommunity
import com.hive.SocialV4;
import com.hive.ResultAPI;
// Set view type (FullScreen: full screen, Frame: frame screen)
SocialV4.ViewType viewType = SocialV4.ViewType.Frame;
SocialV4.INSTANCE.showCommunity(SocialV4.ProviderType.HIVE, viewType, result -> {
if (result.isSuccess()) {
// call successful
}
});
API Reference: SocialV4Interface.showCommunity
API Reference: HIVESocialV4 showCommunity
objc #import <HIVEService/HIVEService-Swift.h> // Set view type (FullScreen: full screen, Frame: frame screen) HIVESocialViewType viewType = HIVESocialViewTypeFrame; [HIVESocialV4 showCommunity: HVIESocialProviderTypeHIVE viewType: viewType handler: ^(HIVEResultAPI *result) { if ([result isSuccess]) { // call successful } }];
#include "HiveSocialV4.h"
// 뷰 타입 설정 (FullScreen: 전체 화면, Frame: 프레임 화면)
ESocialV4ViewType ViewType = ESocialV4ViewType::Frame;
FHiveSocialV4::ShowCommunity(ESocialV4ProviderType::HIVE, ViewType, FHiveSocialV4OnShowCommunityDelegate::CreateLambda([this](const FHiveResultAPI& Result) {
if (Result.IsSuccess()) {
// 호출 성공
}
}));
리모트 로깅¶
리모트 로깅은 클라이언트의 디버깅 로그를 Hive 서버에 보내 이미 상용에 출시된 앱의 디버깅용 로그를 원격으로 확인할 수 있는 기능입니다. Hive 콘솔에서 등록하는 방식이며, 타겟 유저의 리모트 로그만 활성화할 수 있습니다. 등록 방법에 대한 자세한 설명은 리모트 로깅 운영가이드에서 확인하세요.
- 활성화 리모트 로깅을 활성화하면 Hive 콘솔에 입력한 수집 시간 동안 Hive 로그와 게임 로그를 수집합니다. Hive 로그는 SDK에서 설정한 값을 기본으로 수집되고, 게임 로그는 게임에서 설정한 값이 수집됩니다.
Warning
사용 시 주의 사항
- 리모트 로깅을 이용할 때 로그를 과도하게 발생시키면 네트워크 트래픽과 로그 처리에 집중되어 게임 성능에 영향을 미칠 수 있습니다. 루프 형태로 발생하는 반복적인 로그는 최대한 생략하거나 하나의 로그로 모아 발송하기를 권장합니다.
- 게임 로그에 적용하기 전 게임빌컴투스플랫폼 솔루션아키텍트파트 담당자와 협의하세요.
-
타겟팅 리모트 로깅은 Hive SDK 초기화를 최소 한 번 이상 거쳐 DID가 발급된 유저만을 대상으로 설정할 수 있습니다. 다만 SDK를 초기화하기 전에 크래시나 오류가 발생한 앱에서는 사용할 수 없습니다.
- 예제 코드 게임에서 로그를 수집하려는 위치마다 아래 코드를 삽입합니다.
API Reference: Logger .log
API Reference: Logger:: log
API Reference: Logger.i
API Reference: LogInterface.log
API Reference: Objective-C
리모트 컨피그레이션¶
Hive를 적용한 게임에서는 앱의 각 버전과 1 대 1 매핑 되는 게임 서버 URL을 관리할 수 있습니다. 게임 서버 URL은 Configuration 클래스의 getMetaData()
API를 호출하여 string 형태로 전달됩니다. 다음은 게임 서버 URL을 호출하는 예제 코드입니다.
API Reference: HiveConfiguration getMetaData
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
API Reference: ConfigurationInterface.getMetaData
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
forceReload
를 false
로 설정하면 캐시 데이터를 사용할 수 있습니다.
forceReload
가true
인 경우에는getMetaDate()
를 호출하면 로컬에 저장된 데이터는 삭제되고 서버에서 최신 데이터를 가져오려고 시도합니다. 이는 일반적으로 앱 재실행 시 새로고침과 같은 작업에 사용합니다.