PC SDK는 부가서비스를 게임에 통합할 수 있도록 API를 제공합니다.
PC SDK가 지원하는 부가서비스로는 사용자정의 이벤트 로그, PC SDK 버전 조회, 과몰입방지 알림, 셧다운 알림, 추적 단서 조회가 있습니다.
게임은 게임내 사용자정의 이벤트(게임 로그)를 스토브 플랫폼으로 전송할 수 있습니다. 또한 게임은 현재 사용중인 PC SDK의 유의적 버전을 조회할 수 있습니다.
PC SDK의 유의적 버전 조회는 콜백이 아닌 리턴값으로 획득이 가능합니다.
과몰입방지 알림은 매시간 게임 과몰입에 대한 경고 문구를 콜백을 통해 전달합니다.
셧다운 알림은 만 18세 미만의 청소년이 부모에 의해 요일별 특정시간에 게임을 이용 할 수 없도록 제한을 하는 시스템으로써 요건이 충족되면 최대 4회에 걸쳐 알림을 콜백을 통해 전달합니다.
부가서비스 API를 사용하여 PC SDK와 커뮤니케이션 하기 위하여, 게임에서는 아래 StovePCCallback
구조체의 콜백 포인터에 연결할 콜백함수를 정의해야 합니다.
struct StovePCCallback
{
void(*OnError)(const StovePCError error);
void(*OnInitComplete)();
void(*OnToken)(const StovePCToken token);
void(*OnUser)(const StovePCUser user);
void(*OnOwnership)(int size, StovePCOwnership* ownership);
void(*OnAutoPopup)(int size, StovePCAutoPopup* autoPopup, int headerSize, StovePCPopupRequestHeader* header);
void(*OnManualPopup)(int size, StovePCManualPopup* manualPopup, int headerSize, StovePCPopupRequestHeader* header);
void(*OnNewsPopup)(StovePCNewsPopup newsPopup, int headerSize, StovePCPopupRequestHeader* header);
void(*OnCouponPopup)(StovePCCouponPopup couponPopup, int headerSize, StovePCPopupRequestHeader* header);
void(*OnCommunityPopup)(StovePCCommunityPopup communityPopup, int cookieSize, StovePCPopupRequestCookie* cookie);
// StashCustomEvent 처리가 완료됐을 때 호출되는 콜백
void(*OnStashCustomEvent)(const StovePCCustomEvent customEvent, int parameterSize, StovePCCustomEventParameter* parameter);
// ADD 2.6.0 Start
// 과몰입방지를 위해 매시간 호출되는 콜백
void(*OnOverImmersion)(const StovePCOverImmersion overImmersion);
// 셧다운 제한시 호출되는 콜백
void(*OnShutdown)(const StovePCShutdown shutdown);
// 2.6.0 End
};
연동하기 2) Config, Callback 설정
에서와 같이 StovePCCallback
구조체의 콜백 포인터에 콜백함수를 연결합니다.
// StovePCCallback 구조체 instance 생성
StovePCCallback callback;
// 모든 함수 포인터를 NULL로 초기화
memset(&callback, 0, sizeof(StovePCCallback));
// 구현한 함수 포인터를 연결
callback.OnError = OnMyErrorCallback; /*전역에서 정의한 콜백함수*/
callback.OnInitComplete = OnMyInitCompleteCallback; /*전역에서 정의한 콜백함수*/
callback.OnToken = OnMyTokenCallback; /*전역에서 정의한 콜백함수*/
callback.OnUser = OnMyUserInfoCallback; /*전역에서 정의한 콜백함수*/
callback.OnOwnership = OnMyOwnershipCallback; /*전역에서 정의한 콜백함수*/
// 팝업
callback.OnAutoPopup = OnMyAutoPopup; /*전역에서 정의한 콜백함수*/
callback.OnManualPopup = OnMyManualPopup; /*전역에서 정의한 콜백함수*/
callback.OnNewsPopup = OnMyNewsPopup; /*전역에서 정의한 콜백함수*/
callback.OnCouponPopup = OnMyCouponPopup; /*전역에서 정의한 콜백함수*/
callback.OnCommunityPopup = OnMyCommunityPopup; /*전역에서 정의한 콜백함수*/
// 부가서비스
callback.OnStashCustomEvent = OnMyStashCustomEvent; /*전역에서 정의한 콜백함수*/
// ADD 2.6.0 Start
callback.OnOverImmersion = OnMyOverImmersion; /*전역에서 정의한 콜백함수*/
callback.OnShutdown = OnMyShutdown; /*전역에서 정의한 콜백함수*/
// 2.6.0 End
OnStashCustomEvent
콜백을 반드시 구현할 필요는 없습니다.게임에서 사용자정의 이벤트 로그 기능을 사용할 경우만 연결하면 됩니다.
<aside> 💡 경고
OnOverImmersion
콜백은 법률에 의거 게임과몰입/중독 예방조치가 필요한 경우 반드시 구현하여야 합니다.
OnShutdown
콜백은 법률에 의거 선택적 셧다운이 필요한 경우 반드시 구현하여야 합니다.
</aside>
StovePC_StashCustomEvent
함수로 사용자정의 이벤트(게임 로그)를 로깅합니다.
// 입력 파라미터
// const char* name: 이벤트명
// const char* category1 : 1차 카테고리명
// const char* category2 : 2차 카테고리명
// const float simpleValue : 간단한 값
// const StovePCCustomEventParameter* params : 세부적인 파라미터 정보
// const int paramsSize : 세부적인 파라미터 정보 개수
StovePCResult result = StovePC_StashCustomEvent("EVENT_NAME", "CATEGORY1", "CATEGORY2", 1.0f, params, PARAMS_SIZE);
if(result == StovePCResult::STOVE_PC_NO_ERROR)
{
/* 성공 처리 */
}
StovePC_StashCustomEvent
함수가 정상적으로 처리되면 OnStashCustomEvent
콜백이 호출됩니다.
콜백에 전달되는 StovePCCustomEvent
구조체에는 API 호출시 전달한 이벤트명, 1차 카테고리명, 2차 카테고리명, 간단한 값이 포함되어 있습니다.
콜백에 전달되는 StovePCCustomEventParameter
구조체에는 API 호출시 전달한 파라미터 정보가 포함되어 있습니다.
void OnStashCustomEvent(const StovePCCustomEvent customEvent, int parameterSize, StovePCCustomEventParameter* parameter)
{
// 모든 사용자정의 이벤트 정보 출력
printf("OnStashCustomEvent");
printf(" - customEvent.name : %s", customEvent.name);
printf(" - customEvent.category1 : %s", customEvent.category1);
printf(" - customEvent.category2: %s", customEvent.category2);
printf(" - customEvent.simpleValue: %f", customEvent.simpleValue);
printf(" - parameter size : %d", parameterSize);
for (int i = 0; i < parameterSize; i++, parameter++)
{
printf(" - parameter[%d].name : %s", i, parameter->name);
printf(" - parameter[%d].value : %s", i, parameter->value);
}
}