- 마지막 업데이트
PC SDK native 레퍼런스 — 3.4.x 이전
SDK 버전 3.4.x 기준이에요. 항목 128개를 이름순으로 모은 통합 문서예요.
Contents
Base_AccessTokenRenewed
종류 함수 · 모듈 Base · 버전 3.3.0
Description
Stove에서 사용 가능한 AccessToken이 갱신되는 시점에 새로 발급된 AccessToken을 등록한 콜백 함수에 넘겨줘요.
새로운 AccessToken을 발급받는 함수가 아니에요.
Declaration
void Base_AccessTokenRenewed(OnRenewTokenFinished onFinished);
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
onFinished | OnRenewTokenFinished | Y | 새로 발급된 AccessToken을 넘겨받는 콜백 함수예요. |
Returns
없음
Callback
typedef void(__cdecl* OnRenewTokenFinished)(CallbackResult callbackResult, StovePCToken token);
| Name | Type | Description |
|---|---|---|
callbackResult | CallbackResult | 콜백 결과 값이에요. |
token | StovePCToken | 새로 발급된 토큰 정보예요. GetAccessToken(), GetExpireIn()으로 조회해요. |
콜백은 Base_RunCallback() 을 호출한 스레드에서 실행돼요. AccessToken이 갱신될 때마다 반복해서 전달돼요.
Error Codes
Result::GetMethodCode()로 조회하면 Stove::PCSDK::Base::SDKMethod::ACCESS_TOKEN_RENEWED 값을 얻어요.
| Code | Name | Description | Show to User | In-Game Message |
|---|---|---|---|---|
| 0 | SUCCESS | 성공 | x | |
| 5 | INVALID_PARAM | onFinished가 nullptr이에요. | x | |
| 16 | BASE_NOT_INITIALIZED | SDK가 초기화되지 않은 상태에서 호출했어요. | x | |
| 253 | UNMANAGED_EXCEPTION | 실행 중 예외가 발생했어요. | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
| 254 | MANAGED_EXCEPTION | 실행 중 예외가 발생했어요. | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
전체 목록은 SDKResultCode 를 참조하세요.
Memory Management
| Object | Owner | Release |
|---|---|---|
콜백의 callbackResult | 콜백 스코프 | 값으로 전달되는 지역 객체예요. 별도로 해제할 필요가 없어요 |
콜백의 token (StovePCToken) | 콜백 스코프 | 값으로 전달되므로 해제할 필요가 없어요. 다만 Getter 가 돌려주는 const wchar_t* 는 이 객체 내부 버퍼를 가리키므로, 콜백 밖에서 쓸 문자열은 콜백 안에서 복사해 두어야 해요 |
Example
using namespace Stove::PCSDK::Base;
Base_AccessTokenRenewed([](CallbackResult callbackResult, StovePCToken token)
{
if (callbackResult.GetResult().IsSuccessful())
{
// 성공 시 로직을 구현해 주세요.
const wchar_t* newAccessToken = token.GetAccessToken();
int32_t expireIn = token.GetExpireIn();
}
else
{
// 실패 시 로직을 구현해 주세요.
}
});
Notes
- 토큰이 갱신될 때마다 반복해서 호출되는 콜백이에요. 1회성 콜백이 아니에요.
- 매번 최신 토큰이 필요하다면 Base_GetAccessToken으로 그때그때 조회해도 돼요.
- 같은 기능의 구버전 이름은 Base_GetRenewToken이에요. 신규 코드는 이 함수를 사용해요.
See Also
Base_GetAccessToken
종류 함수 · 모듈 Base · 버전 3.0.0.4
Description
Stove에서 사용 가능한 AccessToken을 조회해요.
Declaration
Result Base_GetAccessToken(wchar_t* accessToken, uint32_t length);
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
accessToken | wchar_t* | Y | 유효한 AccessToken을 조회할 버퍼예요. |
length | uint32_t | Y | accessToken 배열의 길이예요. |
Returns
| Type | Description |
|---|---|
Result | 함수 호출 결과예요. result.IsSuccessful()이 true이면 성공이에요. |
Error Codes
Result::GetMethodCode()로 조회하면 Stove::PCSDK::Base::SDKMethod::GET_ACCESS_TOKEN 값을 얻어요.
| Code | Name | Description | Show to User | In-Game Message |
|---|---|---|---|---|
| 0 | SUCCESS | 성공 | x | |
| 5 | INVALID_PARAM | accessToken이 nullptr이거나 length가 0이거나, 버퍼가 작아 결과 문자열이 잘렸어요. | x | |
| 16 | BASE_NOT_INITIALIZED | SDK가 초기화되지 않은 상태에서 호출했어요. | x | |
| 19 | INVALID_ACCESS_TOKEN | 보유한 AccessToken이 유효하지 않아요(만료 등). | O | 로그인 세션이 만료되었습니다. 게임 종료 후 다시 실행해 주세요. [확인] |
| 253 | UNMANAGED_EXCEPTION | 실행 중 예외가 발생했어요. | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
| 254 | MANAGED_EXCEPTION | 실행 중 예외가 발생했어요. | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
아래 코드를 받으면 반드시 게임을 종료해야 해요. 정상 진행이 불가능한 상태예요.
19INVALID_ACCESS_TOKEN— 게임 종료 후 재실행이 필요해요
전체 목록은 SDKResultCode 를 참조하세요.
Memory Management
| Object | Owner | Release |
|---|---|---|
accessToken 버퍼 | 호출자 | 호출자가 할당한 버퍼이므로 호출자가 관리해요. |
Example
using namespace Stove::PCSDK::Base;
wchar_t accessToken[1024] = { 0 };
Result result = Base_GetAccessToken(accessToken, 1024);
if (result.IsSuccessful())
{
// 성공 시 로직을 구현해 주세요. accessToken을 사용합니다.
}
else
{
// 실패 시 로직을 구현해 주세요.
}
Notes
- 새로운 AccessToken을 발급받는 함수가 아니라, SDK가 내부적으로 관리하는 현재 유효한 AccessToken을 조회하는 함수예요.
- 조회한 토큰을 게임에서 따로 보관해 두고 다시 쓰지 마세요. SDK 가 토큰을 주기적으로 갱신하므로 보관해 둔 값은 만료될 수 있어요. 토큰이 필요할 때마다 이 함수를 호출해 그때의 유효한 값을 받아 쓰세요.
- 토큰이 갱신되는 시점에 별도로 알림을 받으려면 Base_AccessTokenRenewed를 사용해요.
See Also
Base_GetGds
종류 함수 · 모듈 Base · 버전 3.1.0
Description
GDS의 정보를 반환해요. 로그인한 사용자의 국가 정보를 조회해요.
Declaration
Result Base_GetGds(StovePCGds* gds);
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
gds | StovePCGds* | Y | 로그인한 사용자의 국가 정보를 받을 변수예요. |
Returns
| Type | Description |
|---|---|
Result | 함수 호출 결과예요. result.IsSuccessful()이 true이면 성공이에요. |
Error Codes
Result::GetMethodCode()로 조회하면 Stove::PCSDK::Base::SDKMethod::GET_GDS 값을 얻어요.
| Code | Name | Description | Show to User | In-Game Message |
|---|---|---|---|---|
| 0 | SUCCESS | 성공 | x | |
| 5 | INVALID_PARAM | gds가 nullptr이에요. | x | |
| 16 | BASE_NOT_INITIALIZED | SDK가 초기화되지 않은 상태에서 호출했어요. | x | |
| 253 | UNMANAGED_EXCEPTION | 실행 중 예외가 발생했어요. | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
| 254 | MANAGED_EXCEPTION | 실행 중 예외가 발생했어요. | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
전체 목록은 SDKResultCode 를 참조하세요.
Memory Management
| Object | Owner | Release |
|---|---|---|
gds | 호출자 | 호출자가 스택에 할당한 객체이므로 호출자가 관리해요. SDK는 내부 필드만 채워요. |
Example
using namespace Stove::PCSDK::Base;
StovePCGds gds;
Result result = Base_GetGds(&gds);
if (result.IsSuccessful())
{
// 성공 시 로직을 구현해 주세요.
const wchar_t* nation = gds.GetNation();
const wchar_t* timeZone = gds.GetTimeZone();
bool isDefault = gds.IsDefault();
}
else
{
// 실패 시 로직을 구현해 주세요.
}
Notes
IsDefault()가true이면 IP로 국가 코드를 판별하지 못해 스토브 기본 국가 코드로 처리되었다는 뜻이에요.GetRegulation()은 GDPR 등 규제적용 국가에 해당할 때만 규제명을 반환해요.
See Also
Base_GetOverImmersion
종류 함수 · 모듈 Base · 버전 3.0.0.4
Description
한국 과몰입 방지 대상자에게 게임 플레이 1시간마다 정보를 등록한 콜백 함수에 넘겨줘요.
한국 전용 API예요. Deprecated 될 예정이에요. 아직 폐기되지 않았으나, 신규 코드에서는 Base_OverImmersionNotification을 사용해야 해요.
Declaration
void Base_GetOverImmersion(OnOverImmersionFinished callback);
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
callback | OnOverImmersionFinished | Y | 과몰입 방지에 대한 결과를 넘겨받는 콜백 함수예요. |
Returns
없음
Callback
typedef void(__cdecl* OnOverImmersionFinished)(CallbackResult callbackResult, StovePCOverImmersion overImmersion);
| Name | Type | Description |
|---|---|---|
callbackResult | CallbackResult | 콜백 결과 값이에요. |
overImmersion | StovePCOverImmersion | 과몰입 방지 정보예요. 경고 메시지(GetWarningMessage()), 게임 경과시간(GetElapsedTimeInHours(), 시간 단위), 메시지 최소 노출시간(GetMinExposureTimeInSeconds(), 초 단위)을 제공해요. |
콜백은 Base_RunCallback() 을 호출한 스레드에서 실행돼요. 게임 플레이 1시간마다 반복해서 전달돼요.
Error Codes
| Code | Name | Description | Show to User | In-Game Message |
|---|---|---|---|---|
| 0 | SUCCESS | 성공 | x | |
| 5 | INVALID_PARAM | callback이 nullptr이에요. | x | |
| 16 | BASE_NOT_INITIALIZED | SDK가 초기화되지 않은 상태에서 호출했어요. | x | |
| 31 | NOT_SUPPORTED_COUNTRY | 로그인한 사용자의 GDS 국가가 한국(kr)이 아니에요. | x | |
| 253 | UNMANAGED_EXCEPTION | 실행 중 예외가 발생했어요. | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
| 254 | MANAGED_EXCEPTION | 실행 중 예외가 발생했어요. | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
전체 목록은 SDKResultCode 를 참조하세요.
Memory Management
| Object | Owner | Release |
|---|---|---|
콜백의 callbackResult | 콜백 스코프 | 값으로 전달되는 지역 객체예요. 별도로 해제할 필요가 없어요 |
콜백의 overImmersion (StovePCOverImmersion) | 콜백 스코프 | 값으로 전달되므로 해제할 필요가 없어요. 다만 Getter 가 돌려주는 const wchar_t* 는 이 객체 내부 버퍼를 가리키므로, 콜백 밖에서 쓸 문자열은 콜백 안에서 복사해 두어야 해요 |
Example
using namespace Stove::PCSDK::Base;
Base_GetOverImmersion([](CallbackResult callbackResult, StovePCOverImmersion overImmersion)
{
if (callbackResult.GetResult().IsSuccessful())
{
// 성공 시 로직을 구현해 주세요.
const wchar_t* warningMessage = overImmersion.GetWarningMessage();
}
else
{
// 실패 시 로직을 구현해 주세요.
}
});
Notes
- Deprecated 될 예정인 API예요. 신규 코드에서는 Base_OverImmersionNotification을 사용해야 해요.
- 한국 전용 API예요.
See Also
Base_GetRenewToken
종류 함수 · 모듈 Base · 버전 3.0.0.4
Description
Stove에서 사용 가능한 AccessToken이 갱신되는 시점에 새로 발급된 AccessToken을 등록한 콜백 함수에 넘겨줘요. 새로운 AccessToken을 발급받는 함수가 아니에요.
Deprecated 될 예정이에요. 아직 폐기되지 않았으나, 신규 코드에서는 Base_AccessTokenRenewed를 사용해야 해요.
Declaration
void Base_GetRenewToken(OnRenewTokenFinished onFinished);
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
onFinished | OnRenewTokenFinished | Y | 새로 발급된 AccessToken을 넘겨받는 콜백 함수예요. |
Returns
없음
Callback
typedef void(__cdecl* OnRenewTokenFinished)(CallbackResult callbackResult, StovePCToken token);
| Name | Type | Description |
|---|---|---|
callbackResult | CallbackResult | 콜백 결과 값이에요. |
token | StovePCToken | 새로 발급된 토큰 정보예요. GetAccessToken(), GetExpireIn()으로 조회해요. |
콜백은 Base_RunCallback() 을 호출한 스레드에서 실행돼요. AccessToken이 갱신될 때마다 반복해서 전달돼요.
Error Codes
| Code | Name | Description | Show to User | In-Game Message |
|---|---|---|---|---|
| 0 | SUCCESS | 성공 | x | |
| 5 | INVALID_PARAM | onFinished가 nullptr이에요. | x | |
| 16 | BASE_NOT_INITIALIZED | SDK가 초기화되지 않은 상태에서 호출했어요. | x | |
| 253 | UNMANAGED_EXCEPTION | 실행 중 예외가 발생했어요. | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
| 254 | MANAGED_EXCEPTION | 실행 중 예외가 발생했어요. | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
전체 목록은 SDKResultCode 를 참조하세요.
Memory Management
| Object | Owner | Release |
|---|---|---|
콜백의 callbackResult | 콜백 스코프 | 값으로 전달되는 지역 객체예요. 별도로 해제할 필요가 없어요 |
콜백의 token (StovePCToken) | 콜백 스코프 | 값으로 전달되므로 해제할 필요가 없어요. 다만 Getter 가 돌려주는 const wchar_t* 는 이 객체 내부 버퍼를 가리키므로, 콜백 밖에서 쓸 문자열은 콜백 안에서 복사해 두어야 해요 |
Example
using namespace Stove::PCSDK::Base;
Base_GetRenewToken([](CallbackResult callbackResult, StovePCToken token)
{
if (callbackResult.GetResult().IsSuccessful())
{
// 성공 시 로직을 구현해 주세요.
const wchar_t* newAccessToken = token.GetAccessToken();
}
else
{
// 실패 시 로직을 구현해 주세요.
}
});
Notes
- Deprecated 될 예정인 API예요. 신규 코드에서는 Base_AccessTokenRenewed를 사용해야 해요.
See Also
Base_GetShutdown
종류 함수 · 모듈 Base · 버전 3.0.0.4
Description
셧다운 대상자이면 셧다운 알림을 등록한 콜백 함수에 넘겨줘요.
Deprecated 될 예정이에요. 아직 폐기되지 않았으나, 신규 코드에서는 Base_ShutdownNotification을 사용해야 해요.
Declaration
void Base_GetShutdown(OnShutdownFinished callback);
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
callback | OnShutdownFinished | Y | 셧다운 대상자인지에 대한 결과를 넘겨받는 콜백 함수예요. |
Returns
없음
Callback
typedef void(__cdecl* OnShutdownFinished)(CallbackResult callbackResult, StovePCShutdown shutdown);
| Name | Type | Description |
|---|---|---|
callbackResult | CallbackResult | 콜백 결과 값이에요. |
shutdown | StovePCShutdown | 셧다운 알림 정보예요. 셧다운까지 남은 시간(GetInadvanceTimeInMinutes(), 분 단위), 알림 메시지(GetShutdownMessage()), 메시지 노출 시간(GetExposureTimeInSeconds(), 초 단위)을 제공해요. |
콜백은 Base_RunCallback() 을 호출한 스레드에서 실행돼요.
Error Codes
| Code | Name | Description | Show to User | In-Game Message |
|---|---|---|---|---|
| 0 | SUCCESS | 성공 | x | |
| 5 | INVALID_PARAM | callback이 nullptr이에요. | x | |
| 16 | BASE_NOT_INITIALIZED | SDK가 초기화되지 않은 상태에서 호출했어요. | x | |
| 253 | UNMANAGED_EXCEPTION | 실행 중 예외가 발생했어요. | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
| 254 | MANAGED_EXCEPTION | 실행 중 예외가 발생했어요. | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
전체 목록은 SDKResultCode 를 참조하세요.
Memory Management
| Object | Owner | Release |
|---|---|---|
콜백의 callbackResult | 콜백 스코프 | 값으로 전달되는 지역 객체예요. 별도로 해제할 필요가 없어요 |
콜백의 shutdown (StovePCShutdown) | 콜백 스코프 | 값으로 전달되므로 해제할 필요가 없어요. 다만 Getter 가 돌려주는 const wchar_t* 는 이 객체 내부 버퍼를 가리키므로, 콜백 밖에서 쓸 문자열은 콜백 안에서 복사해 두어야 해요 |
Example
using namespace Stove::PCSDK::Base;
Base_GetShutdown([](CallbackResult callbackResult, StovePCShutdown shutdown)
{
if (callbackResult.GetResult().IsSuccessful())
{
// 성공 시 로직을 구현해 주세요.
const wchar_t* shutdownMessage = shutdown.GetShutdownMessage();
}
else
{
// 실패 시 로직을 구현해 주세요.
}
});
Notes
- Deprecated 될 예정인 API예요. 신규 코드에서는 Base_ShutdownNotification을 사용해야 해요.
- 이 API는 한국 전용이 아니에요. 셧다운 정책이 적용된 계정이면 해외에서도 동작해요.
See Also
Base_GetSignin
종류 함수 · 모듈 Base · 버전 3.1.0
Description
Signin의 정보를 반환해요. 로그인한 사용자의 서명(가입 · 인증) 정보를 조회해요.
Declaration
Result Base_GetSignin(StovePCSignin* signin);
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
signin | StovePCSignin* | Y | 로그인한 사용자의 가입 · 인증 정보를 받을 변수예요. |
Returns
| Type | Description |
|---|---|
Result | 함수 호출 결과예요. result.IsSuccessful()이 true이면 성공이에요. |
Error Codes
Result::GetMethodCode()로 조회하면 Stove::PCSDK::Base::SDKMethod::GET_SIGNIN 값을 얻어요.
| Code | Name | Description | Show to User | In-Game Message |
|---|---|---|---|---|
| 0 | SUCCESS | 성공 | x | |
| 5 | INVALID_PARAM | signin이 nullptr이에요. | x | |
| 16 | BASE_NOT_INITIALIZED | SDK가 초기화되지 않은 상태에서 호출했어요. | x | |
| 253 | UNMANAGED_EXCEPTION | 실행 중 예외가 발생했어요. | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
| 254 | MANAGED_EXCEPTION | 실행 중 예외가 발생했어요. | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
전체 목록은 SDKResultCode 를 참조하세요.
Memory Management
| Object | Owner | Release |
|---|---|---|
signin | 호출자 | 호출자가 스택에 할당한 객체이므로 호출자가 관리해요. SDK는 내부 필드만 채워요. |
Example
using namespace Stove::PCSDK::Base;
StovePCSignin signin;
Result result = Base_GetSignin(&signin);
if (result.IsSuccessful())
{
// 성공 시 로직을 구현해 주세요.
bool personVerify = signin.GetPersonVerify();
const wchar_t* providerCode = signin.GetProviderCode();
int accountType = signin.GetAccountType();
}
else
{
// 실패 시 로직을 구현해 주세요.
}
Notes
GetProviderCode()는 로그인 시점의 인증 방법 구분 코드예요(SO: 이메일, FB: 페이스북, TW: 트위터, NAVER: 네이버, GP: 구글, APPLE: 애플, SAO: 일회용 번호, QR: QR코드 로그인, RT: PC클라이언트 기반 자동 로그인, LINE: 라인, STEAM: 스팀).GetAccountType()은 계정타입코드예요(2: FACEBOOK, 3: TWITTER, 6: 네이버, 9: 구글플러스, 11: Stove PC 회원가입, 12: 애플, 13: 라인, 14: 라인게임즈, 15: 스팀).
See Also
Base_GetTraceHint
종류 함수 · 모듈 Base · 버전 3.0.0.4 · 폐기 예정
Description
폐기(deprecated)된 기능이에요. 신규 인터페이스에서도 제공하지 않아요.
스토브 플랫폼 동선 추적을 위한 일련의 단서를 조회해요.
Declaration
Result Base_GetTraceHint(StovePCTraceHint* traceHint);
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
traceHint | StovePCTraceHint* | Y | 플랫폼 동선에 대한 정보를 받을 변수예요. |
Returns
| Type | Description |
|---|---|
Result | 함수 호출 결과예요. result.IsSuccessful()이 true이면 성공이에요. |
Error Codes
Result::GetMethodCode()로 조회하면 Stove::PCSDK::Base::SDKMethod::GET_TRACE_HINT 값을 얻어요.
| Code | Name | Description | Show to User | In-Game Message |
|---|---|---|---|---|
| 0 | SUCCESS | 성공 | x | |
| 5 | INVALID_PARAM | traceHint가 nullptr이에요. | x | |
| 16 | BASE_NOT_INITIALIZED | SDK가 초기화되지 않은 상태에서 호출했어요. | x | |
| 253 | UNMANAGED_EXCEPTION | 실행 중 예외가 발생했어요. | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
| 254 | MANAGED_EXCEPTION | 실행 중 예외가 발생했어요. | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
전체 목록은 SDKResultCode 를 참조하세요.
Memory Management
| Object | Owner | Release |
|---|---|---|
traceHint | 호출자 | 호출자가 스택에 할당한 객체이므로 호출자가 관리해요. SDK는 내부 필드만 채워요. |
Example
using namespace Stove::PCSDK::Base;
StovePCTraceHint traceHint;
Result result = Base_GetTraceHint(&traceHint);
if (result.IsSuccessful())
{
// 성공 시 로직을 구현해 주세요.
const wchar_t* sessionId = traceHint.GetSessionId();
const wchar_t* refSessionId = traceHint.GetRefSessionId();
}
else
{
// 실패 시 로직을 구현해 주세요.
}
Notes
GetSessionId()는 PCSDK가 초기화될 때마다 발급되는 세션 아이디이고,GetRefSessionId()는 레퍼런스(런처 또는 SGA)가 실행될 때마다 발급되는 세션 아이디예요.- 이 정보는 문제 상황 재현 시 로그 추적 단서로 사용돼요.
See Also
Base_GetUser
종류 함수 · 모듈 Base · 버전 3.0.0.4
Description
로그인한 사용자의 정보를 조회해요.
Declaration
Result Base_GetUser(StovePCUser* user);
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
user | StovePCUser* | Y | 로그인한 사용자의 정보를 받을 변수예요. |
Returns
| Type | Description |
|---|---|
Result | 함수 호출 결과예요. result.IsSuccessful()이 true이면 성공이에요. |
Error Codes
Result::GetMethodCode()로 조회하면 Stove::PCSDK::Base::SDKMethod::GET_USER 값을 얻어요.
| Code | Name | Description | Show to User | In-Game Message |
|---|---|---|---|---|
| 0 | SUCCESS | 성공 | x | |
| 5 | INVALID_PARAM | user가 nullptr이에요. | x | |
| 16 | BASE_NOT_INITIALIZED | SDK가 초기화되지 않은 상태에서 호출했어요. | x | |
| 253 | UNMANAGED_EXCEPTION | 실행 중 예외가 발생했어요. | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
| 254 | MANAGED_EXCEPTION | 실행 중 예외가 발생했어요. | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
전체 목록은 SDKResultCode 를 참조하세요.
Memory Management
| Object | Owner | Release |
|---|---|---|
user | 호출자 | 호출자가 스택에 할당한 객체이므로 호출자가 관리해요. SDK는 내부 필드만 채워요. |
Example
using namespace Stove::PCSDK::Base;
StovePCUser user;
Result result = Base_GetUser(&user);
if (result.IsSuccessful())
{
// 성공 시 로직을 구현해 주세요.
const wchar_t* nickname = user.GetNickname();
uint64_t gameUserId = user.GetGameUserId();
}
else
{
// 실패 시 로직을 구현해 주세요.
}
Notes
StovePCUser::GetMemberNumber()는 Deprecated 될 예정이에요.GetGameUserId()를 사용해야 해요.- 로그인한 사용자의 국가 · 시간대 정보는 Base_GetGds, 가입 정보는 Base_GetSignin으로 별도 조회해요.
See Also
Base_GetVersion
종류 함수 · 모듈 Base · 버전 3.0.0.4
Description
SDK의 버전 정보를 조회해요.
Declaration
Result Base_GetVersion(wchar_t* version, uint32_t length);
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
version | wchar_t* | Y | 버전 정보를 받을 버퍼예요. |
length | uint32_t | Y | version 배열의 길이예요. |
Returns
| Type | Description |
|---|---|
Result | 함수 호출 결과예요. result.IsSuccessful()이 true이면 성공이에요. |
Error Codes
Result::GetMethodCode()로 조회하면 Stove::PCSDK::Base::SDKMethod::GET_VERSION 값을 얻어요.
| Code | Name | Description | Show to User | In-Game Message |
|---|---|---|---|---|
| 0 | SUCCESS | 성공 | x | |
| 5 | INVALID_PARAM | version이 nullptr이거나 length가 0이거나, 버퍼가 작아 결과 문자열이 잘렸어요. | x | |
| 251 | PCSDK_DLL_NOT_FOUND | SDK DLL 경로를 찾지 못했어요. | x | |
| 253 | UNMANAGED_EXCEPTION | 실행 중 예외가 발생했어요. | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
| 254 | MANAGED_EXCEPTION | 실행 중 예외가 발생했어요. | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
전체 목록은 SDKResultCode 를 참조하세요.
Memory Management
| Object | Owner | Release |
|---|---|---|
version 버퍼 | 호출자 | 호출자가 할당한 버퍼이므로 호출자가 관리해요. |
Example
using namespace Stove::PCSDK::Base;
wchar_t version[64] = { 0 };
Result result = Base_GetVersion(version, 64);
if (result.IsSuccessful())
{
// 성공 시 로직을 구현해 주세요. version을 사용합니다.
}
else
{
// 실패 시 로직을 구현해 주세요.
}
Notes
- 이 함수는 동기 함수이며 콜백을 받지 않아요.
Base_Initialize
종류 함수 · 모듈 Base · 버전 3.0.0.4
Description
SDK를 초기화해요.
Declaration
void Base_Initialize(const StovePCInitializeParam* initParam, OnInitializeFinished onFinished);
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
initParam | const StovePCInitializeParam* | Y | 초기화를 하기 위한 정보(환경, 게임 ID, 앱 키)예요. |
onFinished | OnInitializeFinished | Y | 초기화에 대한 결과를 넘겨받는 콜백 함수예요. |
Returns
없음
Callback
typedef void(__cdecl* OnInitializeFinished)(CallbackResult callbackResult);
| Name | Type | Description |
|---|---|---|
callbackResult | CallbackResult | 콜백 결과 값이에요. |
콜백은 Base_RunCallback() 을 호출한 스레드에서 실행돼요.
Error Codes
Result::GetMethodCode()로 조회하면 Stove::PCSDK::Base::SDKMethod::INITIALIZE 값을 얻어요.
| Code | Name | Description | Show to User | In-Game Message |
|---|---|---|---|---|
| 0 | SUCCESS | 성공 | x | |
| 1 | FAIL | TokenActor 초기화 중 필수 정보 파싱에 실패했어요. | x | |
| 5 | INVALID_PARAM | onFinished가 nullptr이거나 environment, game_id, app_key 중 하나라도 비어 있어요. | x | |
| 18 | ALREADY_INITIALIZED | 이미 초기화되어 있는 상태에서 다시 초기화를 시도했어요. | x | |
| 82 | NOT_FOUND_REQUIRED_INFORMATION | 초기화에 필요한 필수 정보를 찾지 못했어요. | x | |
| 84 | NEED_STOVE_LAUNCHER | 게임이 스토브 PC 클라이언트를 통해 실행되지 않았어요. Base_RestartAppIfNecessary 계열 함수를 먼저 호출해야 해요. | O | 게임이 스토브 PC 클라이언트를 통해 실행되지 않아 종료됩니다.클라이언트에서 다시 게임을 실행해주세요.클라이언트 미설치 시 스토브 홈페이지에서 설치해주세요.[확인] |
| 251 | PCSDK_DLL_NOT_FOUND | SDK 버전 확인에 실패해 DLL 경로를 찾지 못했어요. | x | |
| 253 | UNMANAGED_EXCEPTION | 실행 중 예외가 발생했어요. | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
| 254 | MANAGED_EXCEPTION | 실행 중 예외가 발생했어요. | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
아래 코드를 받으면 반드시 게임을 종료해야 해요. 정상 진행이 불가능한 상태예요.
84NEED_STOVE_LAUNCHER— 스토브 PC 클라이언트를 통해 게임을 다시 실행해야 해요
전체 목록은 SDKResultCode 를 참조하세요.
Example
using namespace Stove::PCSDK::Base;
StovePCInitializeParam initParam;
initParam.SetEnvironment(L"REAL");
initParam.SetGameID(L"YOUR_GAME_ID");
initParam.SetApplicationKey(L"YOUR_APP_KEY");
Base_Initialize(&initParam, [](CallbackResult callbackResult)
{
if (callbackResult.GetResult().IsSuccessful())
{
// 성공 시 로직을 구현해 주세요.
}
else
{
// 실패 시 로직을 구현해 주세요.
}
});
Notes
- 캐시된 파라미터로 다시 초기화하려면 Base_InitializeEx를 사용해요.
- 종료할 때는 Base_UnInitialize를 호출해요.
See Also
Base_InitializeEx
종류 함수 · 모듈 Base · 버전 3.4.1
Description
캐시된 파라미터를 사용하여 SDK를 초기화해요. Base_RestartAppIfNecessary 계열 함수 호출로 캐시된 초기화 파라미터를 재사용해요.
이 함수를 호출하기 전에 Base_RestartAppIfNecessary 계열 함수를 먼저 호출해 파라미터가 캐시되어 있어야 해요.
Declaration
void Base_InitializeEx(OnInitializeFinished onFinished);
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
onFinished | OnInitializeFinished | Y | 초기화에 대한 결과를 넘겨받는 콜백 함수예요. |
Returns
없음
Callback
typedef void(__cdecl* OnInitializeFinished)(CallbackResult callbackResult);
| Name | Type | Description |
|---|---|---|
callbackResult | CallbackResult | 콜백 결과 값이에요. |
콜백은 Base_RunCallback() 을 호출한 스레드에서 실행돼요.
Error Codes
| Code | Name | Description | Show to User | In-Game Message |
|---|---|---|---|---|
| 0 | SUCCESS | 성공 | x | |
| 1 | FAIL | TokenActor 초기화 중 필수 정보 파싱에 실패했어요. | x | |
| 5 | INVALID_PARAM | onFinished가 nullptr이거나, 캐시된 environment, game_id, app_key 중 하나라도 비어 있어요. | x | |
| 18 | ALREADY_INITIALIZED | 이미 초기화되어 있는 상태에서 다시 초기화를 시도했어요. | x | |
| 82 | NOT_FOUND_REQUIRED_INFORMATION | 초기화에 필요한 필수 정보를 찾지 못했어요. | x | |
| 84 | NEED_STOVE_LAUNCHER | 게임이 스토브 PC 클라이언트를 통해 실행되지 않았어요. Base_RestartAppIfNecessary 계열 함수를 먼저 호출해야 해요. | O | 게임이 스토브 PC 클라이언트를 통해 실행되지 않아 종료됩니다.클라이언트에서 다시 게임을 실행해주세요.클라이언트 미설치 시 스토브 홈페이지에서 설치해주세요.[확인] |
| 251 | PCSDK_DLL_NOT_FOUND | SDK 버전 확인에 실패해 DLL 경로를 찾지 못했어요. | x | |
| 253 | UNMANAGED_EXCEPTION | 실행 중 예외가 발생했어요. | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
| 254 | MANAGED_EXCEPTION | 실행 중 예외가 발생했어요. | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
아래 코드를 받으면 반드시 게임을 종료해야 해요. 정상 진행이 불가능한 상태예요.
84NEED_STOVE_LAUNCHER— 스토브 PC 클라이언트를 통해 게임을 다시 실행해야 해요
전체 목록은 SDKResultCode 를 참조하세요.
Example
using namespace Stove::PCSDK::Base;
Base_InitializeEx([](CallbackResult callbackResult)
{
if (callbackResult.GetResult().IsSuccessful())
{
// 성공 시 로직을 구현해 주세요.
}
else
{
// 실패 시 로직을 구현해 주세요.
}
});
Notes
Base_RestartAppIfNecessary계열 함수가 캐시해 둔 환경 · 게임 ID · 앱 키를 재사용해요. 초기화 파라미터를 다시 만들지 않아도 돼요.
See Also
Base_OpenExternalUrl
종류 함수 · 모듈 Base · 버전 3.3.4
Description
외부 브라우저를 통해 URL을 열어요. Stove 관련 도메인을 열 때는 SSO 처리를 진행해요(예: Stove 커뮤니티, 고객센터).
Declaration
void Base_OpenExternalUrl(const wchar_t* url, OnOpenExternalUrlFinished onFinished);
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
url | const wchar_t* | Y | 열고자 하는 URL이에요. |
onFinished | OnOpenExternalUrlFinished | Y | Base_OpenExternalUrl 실행에 대한 결과를 넘겨받는 콜백 함수예요. |
Returns
없음
Callback
typedef void(__cdecl* OnOpenExternalUrlFinished)(CallbackResult callbackResult);
| Name | Type | Description |
|---|---|---|
callbackResult | CallbackResult | 콜백 결과 값이에요. |
콜백은 Base_RunCallback() 을 호출한 스레드에서 실행돼요.
Error Codes
Result::GetMethodCode()로 조회하면 Stove::PCSDK::Base::SDKMethod::OPEN_EXTERNAL_URL 값을 얻어요.
| Code | Name | Description | Show to User | In-Game Message |
|---|---|---|---|---|
| 0 | SUCCESS | 성공(URL 열기 성공) | x | |
| 5 | INVALID_PARAM | onFinished가 nullptr이에요. | x | |
| 16 | BASE_NOT_INITIALIZED | SDK가 초기화되지 않은 상태에서 호출했어요. | x | |
| 253 | UNMANAGED_EXCEPTION | 브라우저 실행에 실패했거나, 실행 중 예외가 발생했어요. | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
| 254 | MANAGED_EXCEPTION | 실행 중 예외가 발생했어요. | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
전체 목록은 SDKResultCode 를 참조하세요.
Example
using namespace Stove::PCSDK::Base;
Base_OpenExternalUrl(L"https://www.onstove.com", [](CallbackResult callbackResult)
{
if (callbackResult.GetResult().IsSuccessful())
{
// 성공 시 로직을 구현해 주세요.
}
else
{
// 실패 시 로직을 구현해 주세요.
}
});
Notes
- Stove 관련 도메인(예: Stove 커뮤니티, 고객센터)을 열 때는 SSO 처리가 함께 진행돼요.
Base_OverImmersionNotification
종류 함수 · 모듈 Base · 버전 3.3.0
Description
한국 과몰입 방지 대상자에게 게임 플레이 1시간마다 정보를 등록한 콜백 함수에 넘겨줘요.
한국 전용 API예요.
Declaration
void Base_OverImmersionNotification(OnOverImmersionFinished callback);
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
callback | OnOverImmersionFinished | Y | 과몰입 방지에 대한 결과를 넘겨받는 콜백 함수예요. |
Returns
없음
Callback
typedef void(__cdecl* OnOverImmersionFinished)(CallbackResult callbackResult, StovePCOverImmersion overImmersion);
| Name | Type | Description |
|---|---|---|
callbackResult | CallbackResult | 콜백 결과 값이에요. |
overImmersion | StovePCOverImmersion | 과몰입 방지 정보예요. 경고 메시지(GetWarningMessage()), 게임 경과시간(GetElapsedTimeInHours(), 시간 단위), 메시지 최소 노출시간(GetMinExposureTimeInSeconds(), 초 단위)을 제공해요. |
콜백은 Base_RunCallback() 을 호출한 스레드에서 실행돼요. 게임 플레이 1시간마다 반복해서 전달돼요.
Error Codes
Result::GetMethodCode()로 조회하면 Stove::PCSDK::Base::SDKMethod::OVER_IMMERSION_NOTIFICATION 값을 얻어요.
| Code | Name | Description | Show to User | In-Game Message |
|---|---|---|---|---|
| 0 | SUCCESS | 성공 | x | |
| 5 | INVALID_PARAM | callback이 nullptr이에요. | x | |
| 16 | BASE_NOT_INITIALIZED | SDK가 초기화되지 않은 상태에서 호출했어요. | x | |
| 31 | NOT_SUPPORTED_COUNTRY | 로그인한 사용자의 GDS 국가가 한국(kr)이 아니에요. | x | |
| 253 | UNMANAGED_EXCEPTION | 실행 중 예외가 발생했어요. | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
| 254 | MANAGED_EXCEPTION | 실행 중 예외가 발생했어요. | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
전체 목록은 SDKResultCode 를 참조하세요.
Memory Management
| Object | Owner | Release |
|---|---|---|
콜백의 callbackResult | 콜백 스코프 | 값으로 전달되는 지역 객체예요. 별도로 해제할 필요가 없어요 |
콜백의 overImmersion (StovePCOverImmersion) | 콜백 스코프 | 값으로 전달되므로 해제할 필요가 없어요. 다만 Getter 가 돌려주는 const wchar_t* 는 이 객체 내부 버퍼를 가리키므로, 콜백 밖에서 쓸 문자열은 콜백 안에서 복사해 두어야 해요 |
Example
using namespace Stove::PCSDK::Base;
Base_OverImmersionNotification([](CallbackResult callbackResult, StovePCOverImmersion overImmersion)
{
if (callbackResult.GetResult().IsSuccessful())
{
// 성공 시 로직을 구현해 주세요.
const wchar_t* warningMessage = overImmersion.GetWarningMessage();
int32_t elapsedTimeInHours = overImmersion.GetElapsedTimeInHours();
}
else
{
// 실패 시 로직을 구현해 주세요.
}
});
Notes
- 한국 전용 API예요.
- 게임 플레이 1시간마다 반복해서 호출되는 콜백이에요. 1회성 콜백이 아니에요.
- 같은 기능의 구버전 이름은 Base_GetOverImmersion이에요. 신규 코드는 이 함수를 사용해요.
See Also
Base_RestartAppIfNecessary
종류 함수 · 모듈 Base · 버전 3.1.0
Description
PCSDK가 런처를 통해 실행되었는지 확인해요. 런처가 실행되어 있지 않거나 런처를 통해 프로그램이 실행되지 않았다면 스토브 프로토콜 핸들러를 이용해 다시 실행해요.
동기(Synchronous) 방식으로 동작해요. 비동기로 처리하려면 Base_RestartAppIfNecessaryAsync 계열 함수를 사용해요.
Declaration
bool Base_RestartAppIfNecessary(const StovePCInitializeParam* initParam);
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
initParam | const StovePCInitializeParam* | Y | 초기화를 하기 위한 정보(환경, 게임 ID, 앱 키)예요. |
Returns
| Type | Description |
|---|---|
bool | 재실행 필요 여부예요. true 이면 스토브 프로토콜 핸들러로 재실행되므로 이후 코드가 계속 실행되지 않아요. false 이면 이미 런처를 통해 실행된 상태이므로 이어서 Base_Initialize() 를 호출해요. |
Error Codes
Result::GetMethodCode()로 조회하면 Stove::PCSDK::Base::SDKMethod::RESTART_APP_IF_NECESSARY 값을 얻어요.
발생 가능한 결과 코드는 SDKResultCode 를 참조하세요.
Example
using namespace Stove::PCSDK::Base;
StovePCInitializeParam initParam;
initParam.SetEnvironment(L"REAL");
initParam.SetGameID(L"YOUR_GAME_ID");
initParam.SetApplicationKey(L"YOUR_APP_KEY");
bool needRestart = Base_RestartAppIfNecessary(&initParam);
if (!needRestart)
{
// 성공 시 로직을 구현해 주세요. 이어서 Base_Initialize()를 호출합니다.
}
else
{
// 실패 시 로직을 구현해 주세요.
}
Notes
- 이 함수는 동기 함수이며 콜백을 받지 않아요.
- 비동기 버전은 Base_RestartAppIfNecessaryAsync, Base_RestartAppIfNecessaryAsyncEx, Base_RestartAppIfNecessaryAsyncEx2가 있어요.
See Also
Base_RestartAppIfNecessaryAsync
종류 함수 · 모듈 Base · 버전 3.3.0
Description
PCSDK가 런처를 통해 실행되었는지 확인해요. 런처가 실행되어 있지 않거나 런처를 통해 프로그램이 실행되지 않았다면 스토브 프로토콜 핸들러를 이용해 다시 실행해요.
비동기(Asynchronous) 방식으로 동작해요. waitTimeMillisec은 런처를 통해 실행되었는지 확인을 기다리는 시간이며, 권장값은 60,000(1분)이에요.
Declaration
void Base_RestartAppIfNecessaryAsync(const StovePCInitializeParam* initParam, uint32_t waitTimeMillisec, OnRestartAppIfNecessaryAsyncFinished onFinished);
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
initParam | const StovePCInitializeParam* | Y | 초기화를 하기 위한 정보(환경, 게임 ID, 앱 키)예요. |
waitTimeMillisec | uint32_t | Y | 런처를 통해 실행되었는지 확인을 기다리는 시간이에요. 권장값은 60,000(1분)이에요. |
onFinished | OnRestartAppIfNecessaryAsyncFinished | Y | 런처로부터 실행되었는지에 대한 결과를 넘겨받는 콜백 함수예요. |
Returns
없음
Callback
typedef void(__cdecl* OnRestartAppIfNecessaryAsyncFinished)(CallbackResult callbackResult, bool restartAppIfNecessary);
| Name | Type | Description |
|---|---|---|
callbackResult | CallbackResult | 콜백 결과 값이에요. |
restartAppIfNecessary | bool | 앱의 재실행이 필요한지 여부예요. |
콜백은 Base_RunCallback() 을 호출한 스레드에서 실행돼요. 재실행이 필요한 경우에도 콜백은 전달돼요.
Error Codes
Result::GetMethodCode()로 조회하면 Stove::PCSDK::Base::SDKMethod::RESTART_APP_IF_NECESSARY_ASYNC 값을 얻어요.
| Code | Name | Description | Show to User | In-Game Message |
|---|---|---|---|---|
| 0 | SUCCESS | 성공 (직전 호출이 이미 완료된 상태였던 경우도 포함) | x | |
| 29 | ASYNC_OPERATION_IN_PROGRESS | 직전에 호출한 비동기 재시작 작업이 아직 진행 중이에요. | x | |
| 30 | BASE_UNINITIALIZED | 대기 중 IPC 연결 상태가 초기화 이전 상태로 돌아갔어요. | x | |
| 87 | IPC_CONNECT_FAILED | 런처와의 IPC 연결에 실패했어요. | O | 게임이 스토브 PC 클라이언트를 통해 실행되지 않아 종료됩니다.클라이언트에서 다시 게임을 실행해주세요.클라이언트 미설치 시 스토브 홈페이지에서 설치해주세요.[확인] |
| 88 | IPC_AES_KEY_NOT_RECEIVED | 런처로부터 암호화 키를 받지 못했어요. | O | 게임이 스토브 PC 클라이언트를 통해 실행되지 않아 종료됩니다.클라이언트에서 다시 게임을 실행해주세요.클라이언트 미설치 시 스토브 홈페이지에서 설치해주세요.[확인] |
| 89 | IPC_TIMEOUT | 지정한 대기 시간(waitTimeMillisec) 안에 런처 응답을 받지 못했어요. | O | 게임이 스토브 PC 클라이언트를 통해 실행되지 않아 종료됩니다.클라이언트에서 다시 게임을 실행해주세요.클라이언트 미설치 시 스토브 홈페이지에서 설치해주세요.[확인] |
| 253 | UNMANAGED_EXCEPTION | 실행 중 예외가 발생했어요. | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
| 254 | MANAGED_EXCEPTION | 실행 중 예외가 발생했어요. | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
아래 코드를 받으면 반드시 게임을 종료해야 해요. 정상 진행이 불가능한 상태예요.
87IPC_CONNECT_FAILED— 스토브 PC 클라이언트를 통해 게임을 다시 실행해야 해요88IPC_AES_KEY_NOT_RECEIVED— 스토브 PC 클라이언트를 통해 게임을 다시 실행해야 해요89IPC_TIMEOUT— 스토브 PC 클라이언트를 통해 게임을 다시 실행해야 해요253UNMANAGED_EXCEPTION·254MANAGED_EXCEPTION— 재시작 여부를 판단할 수 없는 상태이므로 게임을 종료해야 해요
스토브 PC클라이언트를 실행하지 않고 게임 실행 파일을 직접 실행하면 이 코드가 발생해요. 게임을 종료하면 스토브 런처가 자동으로 실행돼요.
전체 목록은 SDKResultCode 를 참조하세요.
Example
using namespace Stove::PCSDK::Base;
StovePCInitializeParam initParam;
initParam.SetEnvironment(L"REAL");
initParam.SetGameID(L"YOUR_GAME_ID");
initParam.SetApplicationKey(L"YOUR_APP_KEY");
Base_RestartAppIfNecessaryAsync(&initParam, 60000, [](CallbackResult callbackResult, bool restartAppIfNecessary)
{
if (callbackResult.GetResult().IsSuccessful())
{
// 성공 시 로직을 구현해 주세요. restartAppIfNecessary가 false이면 이어서 Base_Initialize()를 호출합니다.
}
else
{
// 실패 시 로직을 구현해 주세요.
}
});
Notes
- 대기 시간과 런처 실행 여부를 함께 지정하려면 Base_RestartAppIfNecessaryAsyncEx를 사용해요.
See Also
Base_RestartAppIfNecessaryAsyncEx
종류 함수 · 모듈 Base · 버전 3.4.0
Description
PCSDK가 런처를 통해 실행되었는지 확인해요. 런처가 실행되어 있지 않거나 런처를 통해 프로그램이 실행되지 않았다면 스토브 프로토콜 핸들러를 이용해 다시 실행해요.
Base_RestartAppIfNecessaryAsync와 동작은 같지만, launchLauncher 인자로 런처가 실행되어 있지 않을 때 런처를 실행할지 여부를 지정할 수 있어요.
Declaration
void Base_RestartAppIfNecessaryAsyncEx(const StovePCInitializeParam* initParam, uint32_t waitTimeMillisec, bool launchLauncher, OnRestartAppIfNecessaryAsyncFinished onFinished);
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
initParam | const StovePCInitializeParam* | Y | 초기화를 하기 위한 정보(환경, 게임 ID, 앱 키)예요. |
waitTimeMillisec | uint32_t | Y | 런처를 통해 실행되었는지 확인을 기다리는 시간이에요. 권장값은 60,000(1분)이에요. |
launchLauncher | bool | Y | 런처를 통해 실행되지 않았을 때 런처를 실행할지 여부예요. true면 런처를 실행하고, false면 실행하지 않아요. |
onFinished | OnRestartAppIfNecessaryAsyncFinished | Y | 런처로부터 실행되었는지에 대한 결과를 넘겨받는 콜백 함수예요. |
Returns
없음
Callback
typedef void(__cdecl* OnRestartAppIfNecessaryAsyncFinished)(CallbackResult callbackResult, bool restartAppIfNecessary);
| Name | Type | Description |
|---|---|---|
callbackResult | CallbackResult | 콜백 결과 값이에요. |
restartAppIfNecessary | bool | 앱의 재실행이 필요한지 여부예요. |
콜백은 Base_RunCallback() 을 호출한 스레드에서 실행돼요. 재실행이 필요한 경우에도 콜백은 전달돼요.
Error Codes
| Code | Name | Description | Show to User | In-Game Message |
|---|---|---|---|---|
| 0 | SUCCESS | 성공 (직전 호출이 이미 완료된 상태였던 경우도 포함) | x | |
| 29 | ASYNC_OPERATION_IN_PROGRESS | 직전에 호출한 비동기 재시작 작업이 아직 진행 중이에요. | x | |
| 30 | BASE_UNINITIALIZED | 대기 중 IPC 연결 상태가 초기화 이전 상태로 돌아갔어요. | x | |
| 87 | IPC_CONNECT_FAILED | 런처와의 IPC 연결에 실패했어요. | O | 게임이 스토브 PC 클라이언트를 통해 실행되지 않아 종료됩니다.클라이언트에서 다시 게임을 실행해주세요.클라이언트 미설치 시 스토브 홈페이지에서 설치해주세요.[확인] |
| 88 | IPC_AES_KEY_NOT_RECEIVED | 런처로부터 암호화 키를 받지 못했어요. | O | 게임이 스토브 PC 클라이언트를 통해 실행되지 않아 종료됩니다.클라이언트에서 다시 게임을 실행해주세요.클라이언트 미설치 시 스토브 홈페이지에서 설치해주세요.[확인] |
| 89 | IPC_TIMEOUT | 지정한 대기 시간(waitTimeMillisec) 안에 런처 응답을 받지 못했어요. | O | 게임이 스토브 PC 클라이언트를 통해 실행되지 않아 종료됩니다.클라이언트에서 다시 게임을 실행해주세요.클라이언트 미설치 시 스토브 홈페이지에서 설치해주세요.[확인] |
| 253 | UNMANAGED_EXCEPTION | 실행 중 예외가 발생했어요. | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
| 254 | MANAGED_EXCEPTION | 실행 중 예외가 발생했어요. | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
아래 코드를 받으면 반드시 게임을 종료해야 해요. 정상 진행이 불가능한 상태예요.
87IPC_CONNECT_FAILED— 스토브 PC 클라이언트를 통해 게임을 다시 실행해야 해요88IPC_AES_KEY_NOT_RECEIVED— 스토브 PC 클라이언트를 통해 게임을 다시 실행해야 해요89IPC_TIMEOUT— 스토브 PC 클라이언트를 통해 게임을 다시 실행해야 해요253UNMANAGED_EXCEPTION·254MANAGED_EXCEPTION— 재시작 여부를 판단할 수 없는 상태이므로 게임을 종료해야 해요
스토브 PC클라이언트를 실행하지 않고 게임 실행 파일을 직접 실행하면 이 코드가 발생해요. 게임을 종료하면 스토브 런처가 자동으로 실행돼요.
전체 목록은 SDKResultCode 를 참조하세요.
Example
using namespace Stove::PCSDK::Base;
StovePCInitializeParam initParam;
initParam.SetEnvironment(L"REAL");
initParam.SetGameID(L"YOUR_GAME_ID");
initParam.SetApplicationKey(L"YOUR_APP_KEY");
Base_RestartAppIfNecessaryAsyncEx(&initParam, 60000, true, [](CallbackResult callbackResult, bool restartAppIfNecessary)
{
if (callbackResult.GetResult().IsSuccessful())
{
// 성공 시 로직을 구현해 주세요. restartAppIfNecessary가 false이면 이어서 Base_Initialize()를 호출합니다.
}
else
{
// 실패 시 로직을 구현해 주세요.
}
});
Notes
Base_RestartAppIfNecessaryAsync와 달리launchLauncher인자로 런처 자동 실행 여부를 제어할 수 있어요.waitTimeMillisec과launchLauncher를 구조체 하나에 담아 전달하려면 Base_RestartAppIfNecessaryAsyncEx2를 사용해요.
See Also
Base_RestartAppIfNecessaryAsyncEx2
종류 함수 · 모듈 Base · 버전 3.4.1
Description
스팀 연동 여부와 관계없이 사용할 수 있어요.
platformName만 스토브 외 플랫폼(Steam 등)과 함께 연동할 때 채우는 선택 필드이며, 스토브 단독 연동이라면 값을 설정하지 않거나 빈 문자열(L"")로 두면 Base_RestartAppIfNecessaryAsyncEx 와 동일하게 동작해요.
PCSDK가 런처를 통해 실행되었는지 확인해요. 런처가 실행되어 있지 않거나 런처를 통해 프로그램이 실행되지 않았다면 스토브 프로토콜 핸들러를 이용해 다시 실행해요.
Base_RestartAppIfNecessaryAsyncEx와 동작은 같지만, waitTimeMillisec과 launchLauncher 옵션이 StovePCInitializeParamEx2 구조체 안에 포함되어 있어요.
Declaration
void Base_RestartAppIfNecessaryAsyncEx2(const StovePCInitializeParamEx2* initParam, OnRestartAppIfNecessaryAsyncFinished onFinished);
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
initParam | const StovePCInitializeParamEx2* | Y | 초기화를 하기 위한 정보예요. 환경 · 게임 ID · 앱 키뿐 아니라 waitTimeMillisec, launchLauncher, platformName을 포함해요. |
onFinished | OnRestartAppIfNecessaryAsyncFinished | Y | 런처로부터 실행되었는지에 대한 결과를 넘겨받는 콜백 함수예요. |
Returns
없음
Callback
typedef void(__cdecl* OnRestartAppIfNecessaryAsyncFinished)(CallbackResult callbackResult, bool restartAppIfNecessary);
| Name | Type | Description |
|---|---|---|
callbackResult | CallbackResult | 콜백 결과 값이에요. |
restartAppIfNecessary | bool | 앱의 재실행이 필요한지 여부예요. |
콜백은 Base_RunCallback() 을 호출한 스레드에서 실행돼요. 재실행이 필요한 경우에도 콜백은 전달돼요.
Error Codes
| Code | Name | Description | Show to User | In-Game Message |
|---|---|---|---|---|
| 0 | SUCCESS | 성공 (직전 호출이 이미 완료된 상태였던 경우도 포함) | x | |
| 29 | ASYNC_OPERATION_IN_PROGRESS | 직전에 호출한 비동기 재시작 작업이 아직 진행 중이에요. | x | |
| 30 | BASE_UNINITIALIZED | 대기 중 IPC 연결 상태가 초기화 이전 상태로 돌아갔어요. | x | |
| 87 | IPC_CONNECT_FAILED | 런처와의 IPC 연결에 실패했어요. | O | 게임이 스토브 PC 클라이언트를 통해 실행되지 않아 종료됩니다.클라이언트에서 다시 게임을 실행해주세요.클라이언트 미설치 시 스토브 홈페이지에서 설치해주세요.[확인] |
| 88 | IPC_AES_KEY_NOT_RECEIVED | 런처로부터 암호화 키를 받지 못했어요. | O | 게임이 스토브 PC 클라이언트를 통해 실행되지 않아 종료됩니다.클라이언트에서 다시 게임을 실행해주세요.클라이언트 미설치 시 스토브 홈페이지에서 설치해주세요.[확인] |
| 89 | IPC_TIMEOUT | 지정한 대기 시간(initParam.wait_time_millisec) 안에 런처 응답을 받지 못했어요. | O | 게임이 스토브 PC 클라이언트를 통해 실행되지 않아 종료됩니다.클라이언트에서 다시 게임을 실행해주세요.클라이언트 미설치 시 스토브 홈페이지에서 설치해주세요.[확인] |
| 253 | UNMANAGED_EXCEPTION | 실행 중 예외가 발생했어요. | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
| 254 | MANAGED_EXCEPTION | 실행 중 예외가 발생했어요. | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
아래 코드를 받으면 반드시 게임을 종료해야 해요. 정상 진행이 불가능한 상태예요.
87IPC_CONNECT_FAILED— 스토브 PC 클라이언트를 통해 게임을 다시 실행해야 해요88IPC_AES_KEY_NOT_RECEIVED— 스토브 PC 클라이언트를 통해 게임을 다시 실행해야 해요89IPC_TIMEOUT— 스토브 PC 클라이언트를 통해 게임을 다시 실행해야 해요253UNMANAGED_EXCEPTION·254MANAGED_EXCEPTION— 재시작 여부를 판단할 수 없는 상태이므로 게임을 종료해야 해요
스토브 PC클라이언트를 실행하지 않고 게임 실행 파일을 직접 실행하면 이 코드가 발생해요. 게임을 종료하면 스토브 런처가 자동으로 실행돼요.
전체 목록은 SDKResultCode 를 참조하세요.
Example
using namespace Stove::PCSDK::Base;
StovePCInitializeParamEx2 initParam;
initParam.SetEnvironment(L"REAL");
initParam.SetGameID(L"YOUR_GAME_ID");
initParam.SetApplicationKey(L"YOUR_APP_KEY");
initParam.SetWaitTimeMillisec(60000);
initParam.SetLaunchLauncher(true);
initParam.SetPlatformName(L"Stove");
Base_RestartAppIfNecessaryAsyncEx2(&initParam, [](CallbackResult callbackResult, bool restartAppIfNecessary)
{
if (callbackResult.GetResult().IsSuccessful())
{
// 성공 시 로직을 구현해 주세요. restartAppIfNecessary가 false이면 이어서 Base_Initialize()를 호출합니다.
}
else
{
// 실패 시 로직을 구현해 주세요.
}
});
Notes
waitTimeMillisec,launchLauncher,platformName을StovePCInitializeParamEx2구조체 하나로 전달하는 방식이에요.StovePCInitializeParamEx2는 3.4.1에 추가된 구조체예요.
See Also
Base_RunCallback
종류 함수 · 모듈 Base · 버전 3.0.0.4
Description
각각의 SDK 모듈에서 등록한 콜백 함수를 실행해요. 등록된 콜백을 전부 실행해요.
게임 루프에서 호출해야 해요.
while(true)형태로 이 함수만 반복 호출하는 방식으로 사용하지 않아요.
Declaration
void Base_RunCallback();
Parameters
없음
Returns
없음
Error Codes
없음
Example
using namespace Stove::PCSDK::Base;
// 게임 루프 예시
while (isGameRunning)
{
// ... 게임 로직 ...
Base_RunCallback();
// ... 렌더링 등 나머지 루프 로직 ...
}
Notes
- 모든 비동기 API의 콜백은 이 함수를 호출한 스레드에서 실행돼요. SDK 내부 스레드가 아니에요.
- 대기 시간을 지정하려면 Base_RunCallbackWithTimeout을 사용해요.
See Also
Base_RunCallbackWithTimeout
종류 함수 · 모듈 Base · 버전 3.3.0
Description
각각의 SDK 모듈에서 등록한 콜백 함수를 실행해요. 등록된 콜백을 실행할 때 시간을 계산하여 timeoutMillisec을 초과하면 실행을 중지해요. 다음에 호출될 때 이어서 실행해요.
Declaration
void Base_RunCallbackWithTimeout(uint32_t timeoutMillisec);
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
timeoutMillisec | uint32_t | Y | 타임아웃 시간(밀리초)예요. |
Returns
없음
Error Codes
없음
Example
using namespace Stove::PCSDK::Base;
// 게임 루프 예시 (최대 10ms 대기)
while (isGameRunning)
{
// ... 게임 로직 ...
Base_RunCallbackWithTimeout(10);
// ... 렌더링 등 나머지 루프 로직 ...
}
Notes
timeoutMillisec을 초과하면 남은 콜백은 다음 호출 때 이어서 실행돼요.- 일반적인 사용에는 Base_RunCallback을 사용하고, 대기 시간 제어가 필요할 때 이 함수를 사용해요.
See Also
Base_SetGameProfile
종류 함수 · 모듈 Base · 버전 3.0.0.4
Description
게임 프로필을 설정해요.
Declaration
Result Base_SetGameProfile(const StovePCGameProfile* gameProfile);
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
gameProfile | const StovePCGameProfile* | Y | 게임 프로필 정보(월드 ID, 캐릭터 식별자)예요. |
Returns
| Type | Description |
|---|---|
Result | 함수 호출 결과예요. result.IsSuccessful()이 true이면 성공이에요. |
Error Codes
Result::GetMethodCode()로 조회하면 Stove::PCSDK::Base::SDKMethod::SET_GAME_PROFILE 값을 얻어요.
| Code | Name | Description | Show to User | In-Game Message |
|---|---|---|---|---|
| 0 | SUCCESS | 성공 | x | |
| 5 | INVALID_PARAM | gameProfile이 nullptr이에요. | x | |
| 16 | BASE_NOT_INITIALIZED | SDK가 초기화되지 않은 상태에서 호출했어요. | x | |
| 253 | UNMANAGED_EXCEPTION | 실행 중 예외가 발생했어요. | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
| 254 | MANAGED_EXCEPTION | 실행 중 예외가 발생했어요. | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
전체 목록은 SDKResultCode 를 참조하세요.
Example
using namespace Stove::PCSDK::Base;
StovePCGameProfile gameProfile(L"world_01", 12345);
Result result = Base_SetGameProfile(&gameProfile);
if (result.IsSuccessful())
{
// 성공 시 로직을 구현해 주세요.
}
else
{
// 실패 시 로직을 구현해 주세요.
}
Notes
StovePCGameProfile은worldId,characterNumber를 생성자로 바로 지정하거나SetWorldId()/SetCharacterNumber()로 설정할 수 있어요.
Base_SetLanguage
종류 함수 · 모듈 Base · 버전 3.1.0
Description
SDK의 언어 정보를 설정해요. 지원하는 언어는 StoveLanguage 열거값(system, en, ko, ja, zh_cn, zh_tw, de, fr, es, pt, th, vi)으로 지정해요.
문자열로 언어를 지정하려면 Base_SetLanguageEx를 사용해요.
새로 연동하는 경우에는 Base_SetLanguageEx를 사용하세요. 열거형에 없는 언어까지 문자열로 지정할 수 있어 이후 언어가 추가되어도 그대로 쓸 수 있어요.
Declaration
Result Base_SetLanguage(StoveLanguage language);
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
language | StoveLanguage | Y | 언어 정보예요. |
Returns
| Type | Description |
|---|---|
Result | 함수 호출 결과예요. result.IsSuccessful()이 true이면 성공이에요. |
Error Codes
Result::GetMethodCode()로 조회하면 Stove::PCSDK::Base::SDKMethod::SET_LANGUAGE 값을 얻어요.
| Code | Name | Description | Show to User | In-Game Message |
|---|---|---|---|---|
| 0 | SUCCESS | 성공 | x | |
| 5 | INVALID_PARAM | language가 지원하지 않는 언어 코드예요. | x | |
| 16 | BASE_NOT_INITIALIZED | SDK가 초기화되지 않은 상태에서 호출했어요. | x | |
| 253 | UNMANAGED_EXCEPTION | 실행 중 예외가 발생했어요. | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
| 254 | MANAGED_EXCEPTION | 실행 중 예외가 발생했어요. | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
전체 목록은 SDKResultCode 를 참조하세요.
Example
using namespace Stove::PCSDK::Base;
Result result = Base_SetLanguage(StoveLanguage::ko);
if (result.IsSuccessful())
{
// 성공 시 로직을 구현해 주세요.
}
else
{
// 실패 시 로직을 구현해 주세요.
}
Notes
StoveLanguage에 없는 언어를 지정해야 한다면 문자열 기반의 Base_SetLanguageEx를 사용해요.
See Also
Base_SetLanguageEx
종류 함수 · 모듈 Base · 버전 3.4.0
Description
PCSDK의 언어 정보를 설정해요. Base_SetLanguage와 달리 문자열로 언어를 지정해요.
Declaration
Result Base_SetLanguageEx(const wchar_t* language);
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
language | const wchar_t* | Y | 언어 정보 문자열이에요. |
Returns
| Type | Description |
|---|---|
Result | 함수 호출 결과예요. result.IsSuccessful()이 true이면 성공이에요. |
Error Codes
| Code | Name | Description | Show to User | In-Game Message |
|---|---|---|---|---|
| 0 | SUCCESS | 성공 | x | |
| 5 | INVALID_PARAM | language가 nullptr이거나, 지원하지 않는 언어 코드예요. | x | |
| 16 | BASE_NOT_INITIALIZED | SDK가 초기화되지 않은 상태에서 호출했어요. | x | |
| 253 | UNMANAGED_EXCEPTION | 실행 중 예외가 발생했어요. | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
| 254 | MANAGED_EXCEPTION | 실행 중 예외가 발생했어요. | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
전체 목록은 SDKResultCode 를 참조하세요.
Example
using namespace Stove::PCSDK::Base;
Result result = Base_SetLanguageEx(L"ko");
if (result.IsSuccessful())
{
// 성공 시 로직을 구현해 주세요.
}
else
{
// 실패 시 로직을 구현해 주세요.
}
Notes
StoveLanguage열거값에 없는 언어 코드를 지정할 수 있다는 점이Base_SetLanguage와의 차이예요.
See Also
Base_ShutdownNotification
종류 함수 · 모듈 Base · 버전 3.3.0
Description
셧다운 대상자이면 셧다운 알림을 등록한 콜백 함수에 넘겨줘요.
이 API는 한국 전용이 아니에요. 셧다운 정책이 적용된 계정이라면 해외 사용자에게도 동작해요.
Declaration
void Base_ShutdownNotification(OnShutdownFinished callback);
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
callback | OnShutdownFinished | Y | 셧다운 대상자인지에 대한 결과를 넘겨받는 콜백 함수예요. |
Returns
없음
Callback
typedef void(__cdecl* OnShutdownFinished)(CallbackResult callbackResult, StovePCShutdown shutdown);
| Name | Type | Description |
|---|---|---|
callbackResult | CallbackResult | 콜백 결과 값이에요. |
shutdown | StovePCShutdown | 셧다운 알림 정보예요. 셧다운까지 남은 시간(GetInadvanceTimeInMinutes(), 분 단위), 알림 메시지(GetShutdownMessage()), 메시지 노출 시간(GetExposureTimeInSeconds(), 초 단위)을 제공해요. |
콜백은 Base_RunCallback() 을 호출한 스레드에서 실행돼요.
Error Codes
Result::GetMethodCode()로 조회하면 Stove::PCSDK::Base::SDKMethod::SHUTDOWN_NOTIFICATION 값을 얻어요.
| Code | Name | Description | Show to User | In-Game Message |
|---|---|---|---|---|
| 0 | SUCCESS | 성공 | x | |
| 5 | INVALID_PARAM | callback이 nullptr이에요. | x | |
| 16 | BASE_NOT_INITIALIZED | SDK가 초기화되지 않은 상태에서 호출했어요. | x | |
| 253 | UNMANAGED_EXCEPTION | 실행 중 예외가 발생했어요. | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
| 254 | MANAGED_EXCEPTION | 실행 중 예외가 발생했어요. | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
전체 목록은 SDKResultCode 를 참조하세요.
Memory Management
| Object | Owner | Release |
|---|---|---|
콜백의 callbackResult | 콜백 스코프 | 값으로 전달되는 지역 객체예요. 별도로 해제할 필요가 없어요 |
콜백의 shutdown (StovePCShutdown) | 콜백 스코프 | 값으로 전달되므로 해제할 필요가 없어요. 다만 Getter 가 돌려주는 const wchar_t* 는 이 객체 내부 버퍼를 가리키므로, 콜백 밖에서 쓸 문자열은 콜백 안에서 복사해 두어야 해요 |
Example
using namespace Stove::PCSDK::Base;
Base_ShutdownNotification([](CallbackResult callbackResult, StovePCShutdown shutdown)
{
if (callbackResult.GetResult().IsSuccessful())
{
// 성공 시 로직을 구현해 주세요.
const wchar_t* shutdownMessage = shutdown.GetShutdownMessage();
int32_t inadvanceTimeInMinutes = shutdown.GetInadvanceTimeInMinutes();
}
else
{
// 실패 시 로직을 구현해 주세요.
}
});
Notes
- 한국 전용 API가 아니에요. 셧다운 정책이 적용된 계정이면 해외에서도 동작해요.
- 같은 기능의 구버전 이름은 Base_GetShutdown이에요. 신규 코드는 이 함수를 사용해요.
See Also
Base_UnInitialize
종류 함수 · 모듈 Base · 버전 3.0.0.4
Description
SDK의 자원을 해제해요. Base_Initialize / Base_InitializeEx와 짝을 이루는 함수예요.
게임을 종료하기 전에 반드시 호출해야 해요. 게임 이용 시간을 집계해 서버에 반영하는 처리가 이 함수에서 이루어지므로, 호출하지 않고 프로세스를 내리면 해당 플레이 구간의 이용 시간이 누락돼요.
Declaration
Result Base_UnInitialize();
Parameters
없음
Returns
| Type | Description |
|---|---|
Result | 함수 호출 결과예요. result.IsSuccessful()이 true이면 성공이에요. |
Error Codes
Result::GetMethodCode()로 조회하면 Stove::PCSDK::Base::SDKMethod::UNINITIALIZE 값을 얻어요.
| Code | Name | Description | Show to User | In-Game Message |
|---|---|---|---|---|
| 0 | SUCCESS | 성공 | x | |
| 16 | BASE_NOT_INITIALIZED | SDK가 초기화되지 않은 상태에서 호출했어요. | x | |
| 253 | UNMANAGED_EXCEPTION | 실행 중 예외가 발생했어요. | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
| 254 | MANAGED_EXCEPTION | 실행 중 예외가 발생했어요. | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
전체 목록은 SDKResultCode 를 참조하세요.
Example
using namespace Stove::PCSDK::Base;
Result result = Base_UnInitialize();
if (result.IsSuccessful())
{
// 성공 시 로직을 구현해 주세요.
}
else
{
// 실패 시 로직을 구현해 주세요.
}
Notes
Base_Initialize()/Base_InitializeEx()와 짝을 이루는 종료 함수예요.- 게임 종료 경로가 여러 개라면(정상 종료 · 예외 종료 · 강제 종료 처리) 모든 경로에서 이 함수를 거치도록 두세요. 이용 시간 집계가 이 시점에 정리돼요.
See Also
Base_VietnamAgeRatingNotification
종류 함수 · 모듈 Base · 버전 3.4.1
Description
베트남 연령 등급 안내 오버레이 정보를 등록한 콜백 함수에 넘겨줘요.
베트남 전용 API예요. 타이머 없이 런처의 SHOW/HIDE 패킷으로만 동작해요. 1회성 콜백이며, 렌더링이 가능한 시점 이후에 호출해야 해요.
Declaration
void Base_VietnamAgeRatingNotification(OnVietnamAgeRatingFinished callback);
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
callback | OnVietnamAgeRatingFinished | Y | 베트남 연령 등급 안내에 대한 결과를 넘겨받는 콜백 함수예요. |
Returns
없음
Callback
typedef void(__cdecl* OnVietnamAgeRatingFinished)(CallbackResult callbackResult, StovePCVietnamAgeRatingInfo vietnamAgeRatingInfo);
| Name | Type | Description |
|---|---|---|
callbackResult | CallbackResult | 콜백 결과 값이에요. |
vietnamAgeRatingInfo | StovePCVietnamAgeRatingInfo | 베트남 연령 등급 정보예요. 오버레이 표시 상태(GetOverlayState()), 오버레이 색상 종류(GetOverlayType(), 0=검은색·1=흰색), 오버레이 크기(GetOverlayScale(), 0.0 ~ 1.0), 오버레이 투명도(GetOverlayOpacity(), 0.0 ~ 1.0), 게임 이용 등급(GetAgeRating(), 0=전체이용가·12=12세·16=16세·18=18세), 안내 메시지(GetAgeRatingMessage()), 표시 위치 X · Y(GetDisplayPositionX()/GetDisplayPositionY()), 언어 코드(GetLanguage(), 예: "ko", "en", "ja", "vi", "zh-cn", "zh-tw", "th")를 제공해요. |
콜백은 Base_RunCallback() 을 호출한 스레드에서 실행돼요. 1회성 콜백이며, 렌더링이 가능한 시점 이후에 호출해야 해요. 타이머 없이 런처의 SHOW/HIDE 패킷으로만 동작해요.
Error Codes
Result::GetMethodCode()로 조회하면 Stove::PCSDK::Base::SDKMethod::VIETNAM_AGE_RATING_NOTIFICATION 값을 얻어요.
| Code | Name | Description | Show to User | In-Game Message |
|---|---|---|---|---|
| 0 | SUCCESS | 성공 | x | |
| 5 | INVALID_PARAM | callback이 nullptr이에요. | x | |
| 16 | BASE_NOT_INITIALIZED | SDK가 초기화되지 않은 상태에서 호출했어요. | x | |
| 31 | NOT_SUPPORTED_COUNTRY | 로그인한 사용자의 GDS 국가가 베트남(vn)이 아니에요. | x | |
| 253 | UNMANAGED_EXCEPTION | 실행 중 예외가 발생했어요. | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
| 254 | MANAGED_EXCEPTION | 실행 중 예외가 발생했어요. | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
전체 목록은 SDKResultCode 를 참조하세요.
Memory Management
| Object | Owner | Release |
|---|---|---|
콜백의 callbackResult | 콜백 스코프 | 값으로 전달되는 지역 객체예요. 별도로 해제할 필요가 없어요 |
콜백의 vietnamAgeRatingInfo (StovePCVietnamAgeRatingInfo) | 콜백 스코프 | 값으로 전달되므로 해제할 필요가 없어요. 다만 Getter 가 돌려주는 const wchar_t* 는 이 객체 내부 버퍼를 가리키므로, 콜백 밖에서 쓸 문자열은 콜백 안에서 복사해 두어야 해요 |
Example
using namespace Stove::PCSDK::Base;
Base_VietnamAgeRatingNotification([](CallbackResult callbackResult, StovePCVietnamAgeRatingInfo vietnamAgeRatingInfo)
{
if (callbackResult.GetResult().IsSuccessful())
{
// 성공 시 로직을 구현해 주세요.
StoveOverlayState overlayState = vietnamAgeRatingInfo.GetOverlayState();
const wchar_t* message = vietnamAgeRatingInfo.GetAgeRatingMessage();
}
else
{
// 실패 시 로직을 구현해 주세요.
}
});
Notes
- 베트남 전용 API예요.
- 1회성 콜백이에요. 렌더링이 가능한 시점 이후에 호출해야 해요.
See Also
Base_VietnamOverimmersionNotification
종류 함수 · 모듈 Base · 버전 3.4.1
Description
베트남 과몰입 방지 대상자에게 게임 플레이 중 정기적으로 정보를 등록한 콜백 함수에 넘겨줘요.
베트남 전용 API예요.
Declaration
void Base_VietnamOverimmersionNotification(OnVietnamOverimmersionFinished callback);
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
callback | OnVietnamOverimmersionFinished | Y | 베트남 과몰입 방지에 대한 결과를 넘겨받는 콜백 함수예요. |
Returns
없음
Callback
typedef void(__cdecl* OnVietnamOverimmersionFinished)(CallbackResult callbackResult, StovePCVietnamOverimmersionInfo vietnamOverimmersionInfo);
| Name | Type | Description |
|---|---|---|
callbackResult | CallbackResult | 콜백 결과 값이에요. |
vietnamOverimmersionInfo | StovePCVietnamOverimmersionInfo | 베트남 과몰입 정보예요. 오버레이 표시 상태(GetOverlayState()), 오버레이 색상 종류(GetOverlayType(), 0=검은색·1=흰색), 오버레이 크기(GetOverlayScale(), 0.0 ~ 1.0), 오버레이 투명도(GetOverlayOpacity(), 0.0 ~ 1.0), 게임 이용 등급(GetAgeRating(), 0=전체이용가·12=12세·16=16세·18=18세), 과몰입 경고 메시지(GetOverimmersionMessage()), 마크업 태그가 포함된 디자인용 메시지(GetStyledMessage()), 게임 경과시간(GetElapsedTime(), 분 단위), 메시지 노출 시간(GetExposureTime(), 초 단위), Expand 애니메이션 시간(GetExpandAnimationTime(), 초 단위), 표시 위치 X · Y(GetDisplayPositionX()/GetDisplayPositionY()), 언어 코드(GetLanguage())를 제공해요. |
콜백은 Base_RunCallback() 을 호출한 스레드에서 실행돼요. 게임 플레이 중 정기적으로 반복해서 전달돼요.
Error Codes
Result::GetMethodCode()로 조회하면 Stove::PCSDK::Base::SDKMethod::VIETNAM_OVER_IMMERSION_NOTIFICATION 값을 얻어요.
| Code | Name | Description | Show to User | In-Game Message |
|---|---|---|---|---|
| 0 | SUCCESS | 성공 | x | |
| 5 | INVALID_PARAM | callback이 nullptr이에요. | x | |
| 16 | BASE_NOT_INITIALIZED | SDK가 초기화되지 않은 상태에서 호출했어요. | x | |
| 31 | NOT_SUPPORTED_COUNTRY | 로그인한 사용자의 GDS 국가가 베트남(vn)이 아니에요. | x | |
| 253 | UNMANAGED_EXCEPTION | 실행 중 예외가 발생했어요. | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
| 254 | MANAGED_EXCEPTION | 실행 중 예외가 발생했어요. | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
전체 목록은 SDKResultCode 를 참조하세요.
Memory Management
| Object | Owner | Release |
|---|---|---|
콜백의 callbackResult | 콜백 스코프 | 값으로 전달되는 지역 객체예요. 별도로 해제할 필요가 없어요 |
콜백의 vietnamOverimmersionInfo (StovePCVietnamOverimmersionInfo) | 콜백 스코프 | 값으로 전달되므로 해제할 필요가 없어요. 다만 Getter 가 돌려주는 const wchar_t* 는 이 객체 내부 버퍼를 가리키므로, 콜백 밖에서 쓸 문자열은 콜백 안에서 복사해 두어야 해요 |
Example
using namespace Stove::PCSDK::Base;
Base_VietnamOverimmersionNotification([](CallbackResult callbackResult, StovePCVietnamOverimmersionInfo vietnamOverimmersionInfo)
{
if (callbackResult.GetResult().IsSuccessful())
{
// 성공 시 로직을 구현해 주세요.
const wchar_t* message = vietnamOverimmersionInfo.GetOverimmersionMessage();
int32_t elapsedTime = vietnamOverimmersionInfo.GetElapsedTime();
}
else
{
// 실패 시 로직을 구현해 주세요.
}
});
Notes
- 베트남 전용 API예요.
- 게임 플레이 중 정기적으로 반복해서 호출되는 콜백이에요. 1회성 콜백이 아니에요.
See Also
CallbackResult
종류 구조체 · 모듈 Base · 버전 3.0.0.4
Description
비동기 API 의 콜백 함수 첫 번째 인자로 전달되는 결과 구조체예요. 내부에 Result 를 포함하고, 에러 발생 이유에 대한 상세 메세지와 외부에서 발생한 에러 값, 호출자에 대한 식별자를 함께 담아요.
CallbackResult 는 Result 와 마찬가지로 Stove::PCSDK 네임스페이스에 정의된 공통 타입이에요. Stove::PCSDK::Base 전용이 아니며, 결제 · 팝업 등 다른 모든 기능의 비동기 콜백도 동일한 CallbackResult 타입을 사용해요. 값 타입이며 콜백 함수 인자로 값으로 전달돼요. 별도의 해제 호출은 필요하지 않지만, 콜백이 반환되면 내부 버퍼(errorMessage 등)는 함께 소멸해요.
Declaration
namespace Stove
{
namespace PCSDK
{
struct CallbackResult
{
public:
Result GetResult() const;
const wchar_t* GetErrorMessage() const;
int32_t GetExternalError() const;
public:
Result result;
wchar_t* errorMessage = nullptr;
int32_t externalError;
uint64_t callerIdentifier;
};
}
}
Members
| Name | Type | Access | Description |
|---|---|---|---|
result / GetResult() | Result | 읽기 | 이 콜백의 Result 값이에요. 공개 필드이며 Getter 로도 동일한 값을 얻을 수 있어요. |
errorMessage / GetErrorMessage() | const wchar_t* | 읽기 | Error 가 발생한 이유에 대한 상세 메세지예요. |
externalError / GetExternalError() | int32_t | 읽기 | 외부에서 발생한 Error 값이에요(HTTP error 또는 API result code). |
callerIdentifier | uint64_t | 읽기 | 호출자에 대한 Identifier 이에요. |
Example
using namespace Stove::PCSDK;
using namespace Stove::PCSDK::Base;
void __cdecl OnInitializeFinishedCallback(CallbackResult callbackResult)
{
if (callbackResult.result.IsSuccessful())
{
// 성공 시 로직을 구현해 주세요.
}
else
{
// 실패 시 로직을 구현해 주세요.
}
}
Notes
Base_Initialize(),Base_RestartAppIfNecessaryAsync()등 콜백 기반 비동기 API 의 첫 번째 콜백 인자로 전달돼요.- 콜백은
Base_RunCallback()을 호출한 스레드에서 실행돼요. callerIdentifier는 호출자를 구분하기 위한 식별자예요.
See Also
CloseButtonType
종류 열거형 · 모듈 View · 버전 3.0.0.4
Description
팝업 닫기 버튼의 유형을 식별하는 열거형이에요. Stove::PCSDK::View::CloseButtonType예요.
이 열거형은 헤더에 공개되어 있으나, 이 문서가 다루는 구 C++ 인터페이스의 다른 공개 함수·구조체(ViewSDK.h, ViewSDKStructures.h) 시그니처에서는 직접 참조되지 않아요.
Declaration
enum class CloseButtonType : uint32_t
{
CUSTOM = 0,
PRESET_01 = 1,
PRESET_02 = 2,
PRESET_03 = 3,
PRESET_04 = 4,
PRESET_05 = 5,
PRESET_06 = 6,
DEFAULT = 7,
};
Enum Values
| Code | Name | Description |
|---|---|---|
| 0 | CUSTOM | Custom |
| 1 | PRESET_01 | Preset 1 |
| 2 | PRESET_02 | Preset 2 |
| 3 | PRESET_03 | Preset 3 |
| 4 | PRESET_04 | Preset 4 |
| 5 | PRESET_05 | Preset 5 |
| 6 | PRESET_06 | Preset 6 |
| 7 | DEFAULT | Default |
Example
using namespace Stove::PCSDK::View;
CloseButtonType type = CloseButtonType::DEFAULT;
Notes
- 이 열거형을 매개변수나 반환값으로 받는 공개 함수·구조체는
ViewSDK.h,ViewSDKStructures.h범위에서 확인되지 않아요. - SDK 내부에는 사용하는 곳이 있어요. 쿠폰 팝업/고객센터 팝업을 구성할 때 팝업 닫기 버튼 옵션의 기본값(
PRESET_01)으로 내부적으로 고정 설정돼요. 다만 이 값을 게임이 직접 조회하거나 지정할 수 있는 공개 API는 없어요.
See Also
DiscountType
종류 열거형 · 모듈 IAP · 버전 3.0.0.4
Description
상품의 할인 방식을 나타내요. IAP_FetchProducts / IAP_FetchProductsEx 콜백으로 전달되는 StovePCProduct / StovePCProductEx 의 GetDiscountType() 으로 확인할 수 있어요. IsDiscount() 가 true 인 경우에만 유효해요.
Declaration
enum class DiscountType : uint32_t
{
NONE = 0,
FIXED_RATE = 1,
FLAT_RATE = 2,
};
Enum Values
| Code | Name | Description |
|---|---|---|
| 0 | NONE | 할인 없음 |
| 1 | FIXED_RATE | 정률 할인 |
| 2 | FLAT_RATE | 정액 할인 |
Example
using namespace Stove::PCSDK::IAP;
if (product.IsDiscount() && product.GetDiscountType() == DiscountType::FIXED_RATE)
{
int32_t discountValue = product.GetDiscountTypeValue();
}
Notes
- 할인 값의 실제 의미(정률의 %, 정액의 화폐 단위)는
GetDiscountTypeValue()와 함께 확인해야 해요.
See Also
IAP_CloseAllPopups
종류 함수 · 모듈 IAP · 버전 3.1.3
Description
결제 기능을 통해 열린 모든 팝업을 닫아요.
Declaration
Result IAP_CloseAllPopups();
Parameters
없음
Returns
| Type | Description |
|---|---|
Result | 함수 호출 결과. result.IsSuccessful() 로 성공 여부를 판정해요 |
Error Codes
| Code | Name | Description | Show to User | In-Game Message |
|---|---|---|---|---|
| 0 | SUCCESS | 성공 | x | |
| 17 | NOT_INITIALIZED | 결제 기능이 초기화되지 않았어요. IAP_Initialize() 를 먼저 호출해야 해요. | x | |
| 80 | VIEWUI_NOT_INITIALIZED | 팝업 표시에 사용하는 내부 UI 모듈이 초기화되어 있지 않아요. | x | |
| 89 | WEBVIEW_CLOSE_ALL_FAIL | 열려 있는 팝업을 모두 닫는 데 실패했어요. | x | |
| 253 | UNMANAGED_EXCEPTION | 처리 중 알 수 없는 예외가 발생했어요. | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
| 254 | MANAGED_EXCEPTION | 처리 중 예외가 발생했어요. | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
그 외 발생 가능한 결과 코드는 SDKResultCode 를 참조하세요.
Example
using namespace Stove::PCSDK::IAP;
Result result = IAP_CloseAllPopups();
if (result.IsSuccessful())
{
// 성공 시 로직을 구현해 주세요.
}
else
{
// 실패 시 로직을 구현해 주세요.
}
Notes
- 이 함수는 동기 함수이며 콜백을 받지 않아요.
- 결제 기능이 띄운 팝업(구매, 약관 동의, 1회성 결제, 게임 탈퇴 등)만 대상이에요. 팝업 기능으로 띄운 팝업은 대상이 아니에요.
See Also
- IAP_StartPurchase
- IAP_WithdrawGame
IAP_ConfirmPurchase
종류 함수 · 모듈 IAP · 버전 3.0.0.4
Description
상품구매 완료 후 구매 ID(주문 마스터 번호)로 정상 처리되었는지 확인해요. IAP_StartPurchase 의 StovePCPurchaseOperation 이 DEFAULT 또는 WITH_WEBVIEW 인 경우 결제 완료 후 이 함수를 호출해 구매를 확정해요. transactionMasterNumber 에는 IAP_StartPurchase 결과로 받은 StovePCPurchaseResult::GetTransactionMasterNumber() 값을 전달해요.
Declaration
void IAP_ConfirmPurchase(int64_t transactionMasterNumber, OnConfirmPurchaseFinished onFinished);
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
transactionMasterNumber | int64_t | Y | 주문 마스터 번호 |
onFinished | OnConfirmPurchaseFinished | Y | 상품 구매 완료에 대한 정보를 등록한 콜백 함수 |
Returns
없음
Callback
typedef void(__cdecl* OnConfirmPurchaseFinished)(CallbackResult callbackResult, bool status, StovePCPurchasedProduct* purchasedProducts, uint32_t purchasedProductSize, StovePCChargeInfo* chargeInfos, uint32_t chargeInfoSize);
| Name | Type | Description |
|---|---|---|
callbackResult | CallbackResult | 콜백 결과 값 |
status | bool | 구매 상태 |
purchasedProducts | StovePCPurchasedProduct* | 구매한 상품 정보 StovePCPurchasedProduct 배열 |
purchasedProductSize | uint32_t | purchasedProducts 배열의 크기 |
chargeInfos | StovePCChargeInfo* | 결제에 사용된 화폐(차지) 정보 StovePCChargeInfo 배열 |
chargeInfoSize | uint32_t | chargeInfos 배열의 크기 |
Base_RunCallback() 을 호출한 스레드에서 실행돼요. 호출 1건당 1회만 전달돼요.
Error Codes
| Code | Name | Description | Show to User | In-Game Message |
|---|---|---|---|---|
| 0 | SUCCESS | 성공 | x | |
| 17 | NOT_INITIALIZED | 결제 기능이 초기화되지 않았어요. IAP_Initialize() 를 먼저 호출해야 해요. | x | |
| 21 | NULL_ENTITY | 언어 설정 정보를 가져오지 못했어요. | x | |
| 253 | UNMANAGED_EXCEPTION | 처리 중 알 수 없는 예외가 발생했어요. | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
| 254 | MANAGED_EXCEPTION | 처리 중 예외가 발생했어요. | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
그 외 발생 가능한 결과 코드는 SDKResultCode 를 참조하세요.
Memory Management
| Object | Owner | Release |
|---|---|---|
콜백의 callbackResult | 콜백 스코프 | 값으로 전달되는 지역 객체예요. 별도로 해제할 필요가 없어요 |
콜백의 purchasedProducts, chargeInfos 배열과 각 원소 | SDK | 해제 금지. 콜백이 끝나면 무효처리되며, 필요한 값은 콜백 안에서 복사해 두어야 해요 |
Example
using namespace Stove::PCSDK::IAP;
void __cdecl OnConfirmPurchaseFinished(CallbackResult callbackResult, bool status,
StovePCPurchasedProduct* purchasedProducts, uint32_t purchasedProductSize,
StovePCChargeInfo* chargeInfos, uint32_t chargeInfoSize)
{
if (callbackResult.GetResult().IsSuccessful() && status)
{
// 성공 시 로직을 구현해 주세요.
for (uint32_t i = 0; i < purchasedProductSize; ++i)
{
int64_t productId = purchasedProducts[i].GetProductId();
}
}
else
{
// 실패 시 로직을 구현해 주세요.
}
}
// 호출 (transactionMasterNumber 는 IAP_StartPurchase() 결과의 GetTransactionMasterNumber() 값)
IAP_ConfirmPurchase(transactionMasterNumber, OnConfirmPurchaseFinished);
Notes
- 이 함수는 비동기 함수이며 결과는
onFinished콜백으로만 전달돼요. - IAP_StartPurchase 의
StovePCPurchaseOperation이WITH_WEBVIEW_AND_CONFIRM_RESULT인 경우에는 SDK가 이 함수를 자동으로 호출하므로 별도로 호출할 필요가 없어요. status와callbackResult의 성공 여부는 별개예요. 호출 자체가 성공했더라도status가false이면 구매가 최종 확정되지 않은 상태예요.
See Also
IAP_FetchInventory
종류 함수 · 모듈 IAP · 버전 3.0.0.4
Description
전체 구매한 상품목록을 조회해요. 조회 결과는 onFinished 콜백으로 전달돼요.
IAP_Initialize() 로 초기화한 뒤 호출해야 해요.
Declaration
void IAP_FetchInventory(OnFetchInventoryFinished onFinished);
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
onFinished | OnFetchInventoryFinished | Y | 전체 구매한 상품목록에 대한 정보를 등록한 콜백 함수 |
Returns
없음
Callback
typedef void(__cdecl* OnFetchInventoryFinished)(CallbackResult callbackResult, StovePCInventoryItem* inventoryItems, uint32_t inventoryItemSize);
| Name | Type | Description |
|---|---|---|
callbackResult | CallbackResult | 콜백 결과 값 |
inventoryItems | StovePCInventoryItem* | 구매한 상품 정보 StovePCInventoryItem 배열 |
inventoryItemSize | uint32_t | inventoryItems 배열의 크기 |
Base_RunCallback() 을 호출한 스레드에서 실행돼요. 호출 1건당 1회만 전달돼요.
Error Codes
| Code | Name | Description | Show to User | In-Game Message |
|---|---|---|---|---|
| 0 | SUCCESS | 성공 | x | |
| 17 | NOT_INITIALIZED | 결제 기능이 초기화되지 않았어요. IAP_Initialize() 를 먼저 호출해야 해요. | x | |
| 253 | UNMANAGED_EXCEPTION | 처리 중 알 수 없는 예외가 발생했어요. | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
| 254 | MANAGED_EXCEPTION | 처리 중 예외가 발생했어요. | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
그 외 발생 가능한 결과 코드는 SDKResultCode 를 참조하세요.
Memory Management
| Object | Owner | Release |
|---|---|---|
콜백의 callbackResult | 콜백 스코프 | 값으로 전달되는 지역 객체예요. 별도로 해제할 필요가 없어요 |
콜백의 inventoryItems 배열과 각 원소 | SDK | 해제 금지. 콜백이 끝나면 무효처리되며, 필요한 값은 콜백 안에서 복사해 두어야 해요 |
Example
using namespace Stove::PCSDK::IAP;
void __cdecl OnFetchInventoryFinished(CallbackResult callbackResult, StovePCInventoryItem* inventoryItems, uint32_t inventoryItemSize)
{
if (callbackResult.GetResult().IsSuccessful())
{
// 성공 시 로직을 구현해 주세요.
}
else
{
// 실패 시 로직을 구현해 주세요.
}
}
// 호출
IAP_FetchInventory(OnFetchInventoryFinished);
Notes
- 이 함수는 비동기 함수이며 결과는
onFinished콜백으로만 전달돼요.
See Also
IAP_FetchProducts
종류 함수 · 모듈 IAP · 버전 3.0.0.4 · 폐기 예정
Description
이 기본형은 사용하지 않아요. 대신 IAP_FetchProductsEx 를 사용하세요.
스토브 플랫폼에 등록된 상품 정보를 조회해요. params 로 카테고리 · 페이지 번호 · 페이지 크기를 지정할 수 있어요.
IAP_Initialize() 로 초기화한 뒤 호출해야 해요.
Declaration
void IAP_FetchProducts(const StovePCFetchProductParam* params, OnFetchProductsFinished onFinished);
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
params | const StovePCFetchProductParam* | Y | 조회할 상품 정보(카테고리 ID, 페이지 번호, 페이지 크기) |
onFinished | OnFetchProductsFinished | Y | 조회한 상품 정보를 등록한 콜백 함수 |
Returns
없음
Callback
typedef void(__cdecl* OnFetchProductsFinished)(CallbackResult callbackResult, StovePCProduct* products, uint32_t productSize);
| Name | Type | Description |
|---|---|---|
callbackResult | CallbackResult | 콜백 결과 값 |
products | StovePCProduct* | 조회된 StovePCProduct 배열 |
productSize | uint32_t | products 배열의 크기 |
Base_RunCallback() 을 호출한 스레드에서 실행돼요. 호출 1건당 1회만 전달돼요.
Error Codes
| Code | Name | Description | Show to User | In-Game Message |
|---|---|---|---|---|
| 0 | SUCCESS | 성공 | x | |
| 17 | NOT_INITIALIZED | 결제 기능이 초기화되지 않았어요. IAP_Initialize() 를 먼저 호출해야 해요. | x | |
| 253 | UNMANAGED_EXCEPTION | 처리 중 알 수 없는 예외가 발생했어요. | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
| 254 | MANAGED_EXCEPTION | 처리 중 예외가 발생했어요. | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
그 외 발생 가능한 결과 코드는 SDKResultCode 를 참조하세요.
Memory Management
| Object | Owner | Release |
|---|---|---|
params | 호출자 | 호출자가 생성한 일반 C++ 객체예요. 함수가 반환된 뒤 별도의 해제 함수를 호출할 필요가 없으며, 객체가 스코프를 벗어나면 소멸자가 자동으로 자원을 정리해요 |
콜백의 callbackResult | 콜백 스코프 | 값으로 전달되는 지역 객체예요. 별도로 해제할 필요가 없어요 |
콜백의 products 배열과 각 원소 | SDK | 해제 금지. 콜백이 끝나면 무효처리되며, 필요한 값은 콜백 안에서 복사해 두어야 해요 |
Example
using namespace Stove::PCSDK::IAP;
void __cdecl OnFetchProductsFinished(CallbackResult callbackResult, StovePCProduct* products, uint32_t productSize)
{
if (callbackResult.GetResult().IsSuccessful())
{
// 성공 시 로직을 구현해 주세요.
for (uint32_t i = 0; i < productSize; ++i)
{
int64_t productId = products[i].GetProductId();
}
}
else
{
// 실패 시 로직을 구현해 주세요.
}
}
// 호출
StovePCFetchProductParam params;
params.SetPageNumber(1);
params.SetPageSize(20);
IAP_FetchProducts(¶ms, OnFetchProductsFinished);
Notes
- 이 함수는 비동기 함수이며 결과는
onFinished콜백으로만 전달돼요. params의 카테고리 ID를 비워 두면 전체 상품 목록을 조회해요. 페이지 번호를 전달하지 않으면 1, 페이지 크기를 전달하지 않으면 20이 기본값으로 사용돼요.- 실제 연동에는 항상 IAP_FetchProductsEx 를 사용하세요. 구매 가능 코드(
purchase_availability_code)도Ex변형에서만 받을 수 있어요.
See Also
IAP_FetchProductsEx
종류 함수 · 모듈 IAP · 버전 3.4.1
Description
스토브 플랫폼에 등록된 상품 정보를 조회해요. params 로 카테고리 · 페이지 번호 · 페이지 크기를 지정할 수 있어요.
IAP_FetchProducts() 와의 차이는 콜백으로 전달되는 상품 정보가 StovePCProduct 대신 StovePCProductEx 라는 점이에요. StovePCProductEx 는 StovePCProduct 의 모든 필드에 더해 구매 가능 코드(purchase_availability_code)를 추가로 제공해요. 구매 가능 코드가 1이어도, 남은 수량 대비 더 많은 수량으로 구매를 요청하면 구매 불가 응답이 올 수 있어요.
IAP_Initialize() 로 초기화한 뒤 호출해야 해요.
Declaration
void IAP_FetchProductsEx(const StovePCFetchProductParam* params, OnFetchProductsExFinished onFinished);
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
params | const StovePCFetchProductParam* | Y | 조회할 상품 정보(카테고리 ID, 페이지 번호, 페이지 크기) |
onFinished | OnFetchProductsExFinished | Y | 조회한 상품 정보를 등록한 콜백 함수 |
Returns
없음
Callback
typedef void(__cdecl* OnFetchProductsExFinished)(CallbackResult callbackResult, StovePCProductEx* products, uint32_t productSize);
| Name | Type | Description |
|---|---|---|
callbackResult | CallbackResult | 콜백 결과 값 |
products | StovePCProductEx* | 조회된 StovePCProductEx 배열 |
productSize | uint32_t | products 배열의 크기 |
Base_RunCallback() 을 호출한 스레드에서 실행돼요. 호출 1건당 1회만 전달돼요.
Error Codes
| Code | Name | Description | Show to User | In-Game Message |
|---|---|---|---|---|
| 0 | SUCCESS | 성공 | x | |
| 17 | NOT_INITIALIZED | 결제 기능이 초기화되지 않았어요. IAP_Initialize() 를 먼저 호출해야 해요. | x | |
| 253 | UNMANAGED_EXCEPTION | 처리 중 알 수 없는 예외가 발생했어요. | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
| 254 | MANAGED_EXCEPTION | 처리 중 예외가 발생했어요. | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
그 외 발생 가능한 결과 코드는 SDKResultCode 를 참조하세요.
Memory Management
| Object | Owner | Release |
|---|---|---|
params | 호출자 | 호출자가 생성한 일반 C++ 객체예요. 함수가 반환된 뒤 별도의 해제 함수를 호출할 필요가 없으며, 객체가 스코프를 벗어나면 소멸자가 자동으로 자원을 정리해요 |
콜백의 callbackResult | 콜백 스코프 | 값으로 전달되는 지역 객체예요. 별도로 해제할 필요가 없어요 |
콜백의 products 배열과 각 원소 | SDK | 해제 금지. 콜백이 끝나면 무효처리되며, 필요한 값은 콜백 안에서 복사해 두어야 해요 |
Example
using namespace Stove::PCSDK::IAP;
void __cdecl OnFetchProductsExFinished(CallbackResult callbackResult, StovePCProductEx* products, uint32_t productSize)
{
if (callbackResult.GetResult().IsSuccessful())
{
// 성공 시 로직을 구현해 주세요.
for (uint32_t i = 0; i < productSize; ++i)
{
int16_t availabilityCode = products[i].GetPurchaseAvailabilityCode();
}
}
else
{
// 실패 시 로직을 구현해 주세요.
}
}
// 호출
StovePCFetchProductParam params;
params.SetPageNumber(1);
params.SetPageSize(20);
IAP_FetchProductsEx(¶ms, OnFetchProductsExFinished);
Notes
- 이 함수는 비동기 함수이며 결과는
onFinished콜백으로만 전달돼요. params의 카테고리 ID를 비워 두면 전체 상품 목록을 조회해요. 페이지 번호를 전달하지 않으면 1, 페이지 크기를 전달하지 않으면 20이 기본값으로 사용돼요.- 구매 가능 코드가 필요하지 않으면 IAP_FetchProducts 를 사용해도 돼요.
See Also
IAP_FetchShopCategories
종류 함수 · 모듈 IAP · 버전 3.0.0.4
Description
스토브 플랫폼에 등록된 상점 카테고리를 조회해요. 조회 결과는 onFinished 콜백으로 전달돼요.
IAP_Initialize() 로 초기화한 뒤 호출해야 해요.
Declaration
void IAP_FetchShopCategories(OnFetchShopCategoriesFinished onFinished);
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
onFinished | OnFetchShopCategoriesFinished | Y | 상점 카테고리 조회 결과를 등록한 콜백 함수 |
Returns
없음
Callback
typedef void(__cdecl* OnFetchShopCategoriesFinished)(CallbackResult callbackResult, StovePCShopCategory* shopCategorys, uint32_t shopCategorySize);
| Name | Type | Description |
|---|---|---|
callbackResult | CallbackResult | 콜백 결과 값 |
shopCategorys | StovePCShopCategory* | 조회된 StovePCShopCategory 배열 |
shopCategorySize | uint32_t | shopCategorys 배열의 크기 |
Base_RunCallback() 을 호출한 스레드에서 실행돼요. 호출 1건당 1회만 전달돼요.
Error Codes
| Code | Name | Description | Show to User | In-Game Message |
|---|---|---|---|---|
| 0 | SUCCESS | 성공 | x | |
| 17 | NOT_INITIALIZED | 결제 기능이 초기화되지 않았어요. IAP_Initialize() 를 먼저 호출해야 해요. | x | |
| 253 | UNMANAGED_EXCEPTION | 처리 중 알 수 없는 예외가 발생했어요. | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
| 254 | MANAGED_EXCEPTION | 처리 중 예외가 발생했어요. | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
그 외 발생 가능한 결과 코드는 SDKResultCode 를 참조하세요.
Memory Management
| Object | Owner | Release |
|---|---|---|
콜백의 callbackResult | 콜백 스코프 | 값으로 전달되는 지역 객체예요. 별도로 해제할 필요가 없어요 |
콜백의 shopCategorys 배열과 각 원소 | SDK | 해제 금지. 콜백이 끝나면 무효처리되며, 필요한 값은 콜백 안에서 복사해 두어야 해요 |
Example
using namespace Stove::PCSDK::IAP;
void __cdecl OnFetchShopCategoriesFinished(CallbackResult callbackResult, StovePCShopCategory* shopCategorys, uint32_t shopCategorySize)
{
if (callbackResult.GetResult().IsSuccessful())
{
// 성공 시 로직을 구현해 주세요.
for (uint32_t i = 0; i < shopCategorySize; ++i)
{
const wchar_t* categoryId = shopCategorys[i].GetCategoryId();
}
}
else
{
// 실패 시 로직을 구현해 주세요.
}
}
// 호출
IAP_FetchShopCategories(OnFetchShopCategoriesFinished);
Notes
- 이 함수는 비동기 함수이며 결과는
onFinished콜백으로만 전달돼요. - 조회한
CategoryId는 IAP_FetchProducts 호출 시 카테고리 필터로 사용할 수 있어요.
See Also
IAP_FetchTermsAgreement
종류 함수 · 모듈 IAP · 버전 3.0.0.4
Description
필수 약관 동의 여부를 조회해요. 동의하지 않은 경우 결과에 포함된 URL로 약관 동의 페이지를 열어 동의를 받아야 해요. 진행 방식은 options 에 설정한 StovePCTermsOperation 값에 따라 달라져요.
DEFAULT: Stove Webview를 사용하지 않아요. 결과에 포함된 일회용 URL로 약관 동의 페이지를 직접 열어야 해요.WITH_WEBVIEW: Stove Webview를 통해 약관 동의 페이지를 열고 진행해요.
IAP_Initialize() 로 초기화한 뒤 호출해야 해요.
Declaration
void IAP_FetchTermsAgreement(const StovePCTermsOption* options, OnFetchTermsAgreementFinished onFinished);
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
options | const StovePCTermsOption* | Y | API에 대한 옵션을 전달하는 구조체 |
onFinished | OnFetchTermsAgreementFinished | Y | 필수 약관 동의에 대한 정보를 등록한 콜백 함수 |
Returns
없음
Callback
typedef void(__cdecl* OnFetchTermsAgreementFinished)(CallbackResult callbackResult, bool agreed, const wchar_t* url);
| Name | Type | Description |
|---|---|---|
callbackResult | CallbackResult | 콜백 결과 값 |
agreed | bool | 이용약관 동의 여부 |
url | const wchar_t* | 이용약관 URL 주소 (agreed == true 이면 빈 값) |
Base_RunCallback() 을 호출한 스레드에서 실행돼요. 호출 1건당 1회만 전달돼요.
Error Codes
| Code | Name | Description | Show to User | In-Game Message |
|---|---|---|---|---|
| 0 | SUCCESS | 성공 | x | |
| 17 | NOT_INITIALIZED | 결제 기능이 초기화되지 않았어요. IAP_Initialize() 를 먼저 호출해야 해요. | x | |
| 80 | VIEWUI_NOT_INITIALIZED | 약관 동의 화면을 열어야 하는데 내부 UI 모듈이 초기화되어 있지 않아요. | x | |
| 82 | WEBVIEW_CREATE_FAIL | 약관 동의 화면 생성에 실패했어요. | x | |
| 83 | WEBVIEW_LOAD_URL_FAIL | 약관 동의 화면의 주소를 불러오지 못했어요. | x | |
| 87 | WEBVIEW_CREATE_COOKIE_FAIL | 약관 동의 화면의 호스트 주소를 찾지 못했어요. | O | 구매를 위해서는 약관 동의가 필요합니다. 현재 약관 동의 화면을 불러오지 못했습니다. 다시 시도해 주세요. [확인] |
| 89 | WEBVIEW_CLOSE_ALL_FAIL | 약관 동의 화면을 열기 전에 기존 팝업을 정리하지 못했어요. | x | |
| 253 | UNMANAGED_EXCEPTION | 처리 중 알 수 없는 예외가 발생했어요. | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
| 254 | MANAGED_EXCEPTION | 처리 중 예외가 발생했어요. | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
그 외 발생 가능한 결과 코드는 SDKResultCode 를 참조하세요.
Memory Management
| Object | Owner | Release |
|---|---|---|
options | 호출자 | 호출자가 생성한 일반 C++ 객체예요. 함수가 반환된 뒤 별도의 해제 함수를 호출할 필요가 없으며, 객체가 스코프를 벗어나면 소멸자가 자동으로 자원을 정리해요 |
콜백의 callbackResult, url | SDK | 해제 금지. 콜백이 끝나면 무효처리되며, 필요한 값은 콜백 안에서 복사해 두어야 해요 |
Example
using namespace Stove::PCSDK::IAP;
void __cdecl OnFetchTermsAgreementFinished(CallbackResult callbackResult, bool agreed, const wchar_t* url)
{
if (callbackResult.GetResult().IsSuccessful())
{
// 성공 시 로직을 구현해 주세요.
if (!agreed)
{
// url 로 약관 동의 페이지를 열어야 합니다.
}
}
else
{
// 실패 시 로직을 구현해 주세요.
}
}
// 호출
StovePCTermsOption options;
options.SetOperation(StovePCTermsOperation::DEFAULT);
IAP_FetchTermsAgreement(&options, OnFetchTermsAgreementFinished);
Notes
- 이 함수는 비동기 함수이며 결과는
onFinished콜백으로만 전달돼요. - 팝업이 닫히는 시점의 결과가 필요하면 IAP_FetchTermsAgreementEx 를 사용해요.
See Also
IAP_FetchTermsAgreementEx
종류 함수 · 모듈 IAP · 버전 3.3.4
Description
필수 약관 동의 여부를 조회해요. 진행 방식은 IAP_FetchTermsAgreement 와 동일하게 options 의 StovePCTermsOperation 값에 따라 달라져요.
IAP_FetchTermsAgreement() 와의 차이는 onDestroy 콜백을 추가로 받는다는 점이에요. onDestroy 는 이 호출로 열린 팝업이 모두 닫힌 뒤 전달돼요.
IAP_Initialize() 로 초기화한 뒤 호출해야 해요.
Declaration
void IAP_FetchTermsAgreementEx(const StovePCTermsOption* options, OnFetchTermsAgreementFinished onFinished, OnIAPPopupDestroyFinished onDestroy);
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
options | const StovePCTermsOption* | Y | API에 대한 옵션을 전달하는 구조체 |
onFinished | OnFetchTermsAgreementFinished | Y | 필수 약관 동의에 대한 정보를 등록한 콜백 함수 |
onDestroy | OnIAPPopupDestroyFinished | Y | 팝업이 닫힐 경우에 대한 결과를 넘겨받는 콜백 함수 |
Returns
없음
Callback
typedef void(__cdecl* OnFetchTermsAgreementFinished)(CallbackResult callbackResult, bool agreed, const wchar_t* url);
typedef void(__cdecl* OnIAPPopupDestroyFinished)(CallbackResult callbackResult);
| Name | Type | Description |
|---|---|---|
callbackResult | CallbackResult | 호출 결과 |
agreed | bool | 이용약관 동의 여부 |
url | const wchar_t* | 이용약관 URL 주소 (agreed == true 이면 빈 값) |
Base_RunCallback() 을 호출한 스레드에서 실행돼요.
onFinished는 호출 1건당 1회만 전달돼요.onDestroy는 이 호출로 생성된 팝업이 모두 닫힌 뒤 전달돼요.
Error Codes
| Code | Name | Description | Show to User | In-Game Message |
|---|---|---|---|---|
| 0 | SUCCESS | 성공 | x | |
| 17 | NOT_INITIALIZED | 결제 기능이 초기화되지 않았어요. IAP_Initialize() 를 먼저 호출해야 해요. | x | |
| 80 | VIEWUI_NOT_INITIALIZED | 약관 동의 화면을 열어야 하는데 내부 UI 모듈이 초기화되어 있지 않아요. | x | |
| 82 | WEBVIEW_CREATE_FAIL | 약관 동의 화면 생성에 실패했어요. | x | |
| 83 | WEBVIEW_LOAD_URL_FAIL | 약관 동의 화면의 주소를 불러오지 못했어요. | x | |
| 87 | WEBVIEW_CREATE_COOKIE_FAIL | 약관 동의 화면의 호스트 주소를 찾지 못했어요. | O | 구매를 위해서는 약관 동의가 필요합니다. 현재 약관 동의 화면을 불러오지 못했습니다. 다시 시도해 주세요. [확인] |
| 89 | WEBVIEW_CLOSE_ALL_FAIL | 약관 동의 화면을 열기 전에 기존 팝업을 정리하지 못했어요. | x | |
| 90 | WEBVIEW_CLOSE_FAIL | 약관 동의 화면을 닫는 과정에서 실패했어요. onDestroy 콜백으로 전달돼요. | x | |
| 253 | UNMANAGED_EXCEPTION | 처리 중 알 수 없는 예외가 발생했어요. | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
| 254 | MANAGED_EXCEPTION | 처리 중 예외가 발생했어요. | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
그 외 발생 가능한 결과 코드는 SDKResultCode 를 참조하세요.
Memory Management
| Object | Owner | Release |
|---|---|---|
options | 호출자 | 호출자가 생성한 일반 C++ 객체예요. 함수가 반환된 뒤 별도의 해제 함수를 호출할 필요가 없으며, 객체가 스코프를 벗어나면 소멸자가 자동으로 자원을 정리해요 |
콜백의 callbackResult, url | SDK | 해제 금지. 콜백이 끝나면 무효처리되며, 필요한 값은 콜백 안에서 복사해 두어야 해요 |
Example
using namespace Stove::PCSDK::IAP;
void __cdecl OnFetchTermsAgreementFinished(CallbackResult callbackResult, bool agreed, const wchar_t* url)
{
if (callbackResult.GetResult().IsSuccessful())
{
// 성공 시 로직을 구현해 주세요.
}
else
{
// 실패 시 로직을 구현해 주세요.
}
}
void __cdecl OnFetchTermsAgreementPopupDestroyed(CallbackResult callbackResult)
{
// 약관 동의 과정에서 열린 팝업이 모두 닫혔을 때 로직을 구현해 주세요.
}
// 호출
StovePCTermsOption options;
options.SetOperation(StovePCTermsOperation::WITH_WEBVIEW);
IAP_FetchTermsAgreementEx(&options, OnFetchTermsAgreementFinished, OnFetchTermsAgreementPopupDestroyed);
Notes
- 이 함수는 비동기 함수이며 결과는
onFinished콜백으로 전달돼요. onDestroy콜백이 필요하지 않으면 IAP_FetchTermsAgreement 를 사용해도 돼요.
See Also
IAP_FetchVoidedPurchases
종류 함수 · 모듈 IAP · 버전 3.0.0.4 · 폐기 예정
Description
환불 조회 기능은 폐기(deprecated)된 기능이에요. 신규 인터페이스에서는 제공하지 않아요. 기존 인터페이스에서만 계속 제공돼요.
현재 사용자가 환불 처리한 구매 기록 목록을 조회해요. 조회 결과는 onFinished 콜백으로 전달돼요.
IAP_Initialize() 로 초기화한 뒤 호출해야 해요.
Declaration
void IAP_FetchVoidedPurchases(OnFetchVoidedPurchasesFinished onFinished);
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
onFinished | OnFetchVoidedPurchasesFinished | Y | 현재 사용자가 환불 처리한 구매 기록 목록 정보를 등록한 콜백 함수 |
Returns
없음
Callback
typedef void(__cdecl* OnFetchVoidedPurchasesFinished)(CallbackResult callbackResult, StovePCVoidedPurchase* voidedPurchases, uint32_t voidedPurchaseSize);
| Name | Type | Description |
|---|---|---|
callbackResult | CallbackResult | 콜백 결과 값 |
voidedPurchases | StovePCVoidedPurchase* | 환불 처리 정보 StovePCVoidedPurchase 배열 |
voidedPurchaseSize | uint32_t | voidedPurchases 배열의 크기 |
Base_RunCallback() 을 호출한 스레드에서 실행돼요. 호출 1건당 1회만 전달돼요.
Error Codes
| Code | Name | Description | Show to User | In-Game Message |
|---|---|---|---|---|
| 0 | SUCCESS | 성공 | x | |
| 17 | NOT_INITIALIZED | 결제 기능이 초기화되지 않았어요. IAP_Initialize() 를 먼저 호출해야 해요. | x | |
| 253 | UNMANAGED_EXCEPTION | 처리 중 알 수 없는 예외가 발생했어요. | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
| 254 | MANAGED_EXCEPTION | 처리 중 예외가 발생했어요. | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
그 외 발생 가능한 결과 코드는 SDKResultCode 를 참조하세요.
Memory Management
| Object | Owner | Release |
|---|---|---|
콜백의 callbackResult | 콜백 스코프 | 값으로 전달되는 지역 객체예요. 별도로 해제할 필요가 없어요 |
콜백의 voidedPurchases 배열과 각 원소 | SDK | 해제 금지. 콜백이 끝나면 무효처리되며, 필요한 값은 콜백 안에서 복사해 두어야 해요 |
Example
using namespace Stove::PCSDK::IAP;
void __cdecl OnFetchVoidedPurchasesFinished(CallbackResult callbackResult, StovePCVoidedPurchase* voidedPurchases, uint32_t voidedPurchaseSize)
{
if (callbackResult.GetResult().IsSuccessful())
{
// 성공 시 로직을 구현해 주세요.
for (uint32_t i = 0; i < voidedPurchaseSize; ++i)
{
int64_t tid = voidedPurchases[i].GetTid();
}
}
else
{
// 실패 시 로직을 구현해 주세요.
}
}
// 호출
IAP_FetchVoidedPurchases(OnFetchVoidedPurchasesFinished);
Notes
- 이 함수는 비동기 함수이며 결과는
onFinished콜백으로만 전달돼요. - 마켓을 지정해 조회하는 IAP_FetchVoidedPurchasesEx 는 현재 SDK 에서 제공하지 않아요.
See Also
IAP_FetchVoidedPurchasesEx
종류 함수 · 모듈 IAP · 버전 3.4.1 · 폐기 예정
Description
이 함수는 현재 SDK 에서 제공하지 않아요. 환불 조회 기능 자체도 폐기(deprecated)된 기능이에요.
현재 사용자가 환불 처리한 구매 기록 목록을 조회해요.
IAP_FetchVoidedPurchases() 와의 차이는 두 가지예요. 조회할 마켓을 StovePCVoidedPurchasesMarketType 값으로 지정하는 marketType 매개변수를 받으며, 콜백으로 전달되는 항목의 자료형이 StovePCVoidedPurchase 대신 마켓 관련 필드(마켓 코드, 마켓 주문번호 등)가 추가된 StovePCVoidedPurchasesEx 이에요.
IAP_Initialize() 로 초기화한 뒤 호출해야 해요.
Declaration
void IAP_FetchVoidedPurchasesEx(StovePCVoidedPurchasesMarketType marketType, OnFetchVoidedPurchasesExFinished onFinished);
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
marketType | StovePCVoidedPurchasesMarketType | Y | 조회할 마켓 타입 |
onFinished | OnFetchVoidedPurchasesExFinished | Y | 현재 사용자가 환불 처리한 구매 기록 목록 정보를 등록한 콜백 함수 |
Returns
없음
Callback
typedef void(__cdecl* OnFetchVoidedPurchasesExFinished)(CallbackResult callbackResult, StovePCVoidedPurchasesEx* voidedPurchasesEx, uint32_t voidedPurchaseSize);
| Name | Type | Description |
|---|---|---|
callbackResult | CallbackResult | 콜백 결과 값 |
voidedPurchasesEx | StovePCVoidedPurchasesEx* | 환불 처리 정보 StovePCVoidedPurchasesEx 배열 |
voidedPurchaseSize | uint32_t | voidedPurchasesEx 배열의 크기 |
Base_RunCallback() 을 호출한 스레드에서 실행돼요. 호출 1건당 1회만 전달돼요.
Error Codes
| Code | Name | Description | Show to User | In-Game Message |
|---|---|---|---|---|
| — | — | 이 함수는 현재 SDK 에서 제공하지 않아요. | — | — |
그 외 발생 가능한 결과 코드는 SDKResultCode 를 참조하세요.
Memory Management
| Object | Owner | Release |
|---|---|---|
콜백의 callbackResult | 콜백 스코프 | 값으로 전달되는 지역 객체예요. 별도로 해제할 필요가 없어요 |
콜백의 voidedPurchasesEx 배열과 각 원소 | SDK | 해제 금지. 콜백이 끝나면 무효처리되며, 필요한 값은 콜백 안에서 복사해 두어야 해요 |
Example
using namespace Stove::PCSDK::IAP;
void __cdecl OnFetchVoidedPurchasesExFinished(CallbackResult callbackResult, StovePCVoidedPurchasesEx* voidedPurchasesEx, uint32_t voidedPurchaseSize)
{
if (callbackResult.GetResult().IsSuccessful())
{
// 성공 시 로직을 구현해 주세요.
for (uint32_t i = 0; i < voidedPurchaseSize; ++i)
{
int64_t tid = voidedPurchasesEx[i].GetTid();
}
}
else
{
// 실패 시 로직을 구현해 주세요.
}
}
// 호출 (STEAM 마켓만 조회)
IAP_FetchVoidedPurchasesEx(StovePCVoidedPurchasesMarketType::STEAM, OnFetchVoidedPurchasesExFinished);
Notes
- 이 함수는 비동기 함수이며 결과는
onFinished콜백으로만 전달돼요. - 마켓 구분 없이 조회하려면 IAP_FetchVoidedPurchases 를 사용해도 돼요.
See Also
IAP_GetVersion
종류 함수 · 모듈 IAP · 버전 3.4.1
Description
결제 기능의 버전 정보를 조회해요.
Declaration
Result IAP_GetVersion(__out wchar_t* version, uint32_t length);
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
version | wchar_t* (out) | Y | 버전 정보를 받을 버퍼 |
length | uint32_t | Y | version 배열의 길이 |
Returns
| Type | Description |
|---|---|
Result | 함수 호출 결과. result.IsSuccessful() 로 성공 여부를 판정해요 |
Error Codes
| Code | Name | Description | Show to User | In-Game Message |
|---|---|---|---|---|
| 0 | SUCCESS | 성공 | x | |
| 251 | PCSDK_DLL_NOT_FOUND | SDK DLL 파일의 경로를 찾을 수 없어요. | x | |
| 253 | UNMANAGED_EXCEPTION | SDK 내부에서 예기치 않은 예외가 발생했어요. | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
| 254 | MANAGED_EXCEPTION | SDK 내부에서 예기치 않은 예외가 발생했어요. | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
그 외 발생 가능한 결과 코드는 SDKResultCode 를 참조하세요.
Memory Management
| Object | Owner | Release |
|---|---|---|
version | 호출자 | 호출자가 할당한 버퍼예요. 별도로 해제할 필요가 없어요 |
Example
using namespace Stove::PCSDK::IAP;
wchar_t version[64] = { 0 };
Result result = IAP_GetVersion(version, 64);
if (result.IsSuccessful())
{
// 성공 시 로직을 구현해 주세요. version 을 사용합니다.
}
else
{
// 실패 시 로직을 구현해 주세요.
}
Notes
- 이 함수는 동기 함수이며 콜백을 받지 않아요.
See Also
IAP_Initialize
종류 함수 · 모듈 IAP · 버전 3.0.0.4
Description
결제 기능을 초기화해요. 구매·결제 관련 API를 호출하기 전에 반드시 먼저 호출해야 해요.
구 인터페이스에서는 SDK와 결제 기능을 각각 별도로 초기화해야 해요. Base_Initialize() 로 SDK를 먼저 초기화한 뒤 IAP_Initialize() 를 호출해야 하며, Base_Initialize() 가 선행되지 않으면 실패해요.
Declaration
Result IAP_Initialize(const wchar_t* shopKey);
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
shopKey | const wchar_t* | Y | 파트너스로부터 발급받은 shopKey |
Returns
| Type | Description |
|---|---|
Result | 함수 호출 결과. result.IsSuccessful() 로 성공 여부를 판정해요 |
Error Codes
| Code | Name | Description | Show to User | In-Game Message |
|---|---|---|---|---|
| 0 | SUCCESS | 성공 | x | |
| 16 | BASE_NOT_INITIALIZED | SDK가 초기화되지 않았어요. Base_Initialize() 를 먼저 호출해야 해요. | x | |
| 18 | ALREADY_INITIALIZED | 이미 초기화가 되었어요. IAP_UnInitialize() 호출 후 다시 시도해야 해요. | x | |
| 80 | VIEWUI_NOT_INITIALIZED | 결제 화면 표시에 사용하는 내부 UI 모듈 초기화에 실패했어요. | x | |
| 253 | UNMANAGED_EXCEPTION | 처리 중 알 수 없는 예외가 발생했어요. | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
| 254 | MANAGED_EXCEPTION | 처리 중 예외가 발생했어요. | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
그 외 발생 가능한 결과 코드는 SDKResultCode 를 참조하세요.
Example
using namespace Stove::PCSDK::IAP;
Result result = IAP_Initialize(L"YOUR_SHOP_KEY");
if (result.IsSuccessful())
{
// 성공 시 로직을 구현해 주세요.
}
else
{
// 실패 시 로직을 구현해 주세요.
}
Notes
- 이 함수는 동기 함수이며 콜백을 받지 않아요.
- 구 인터페이스는 모듈별로 개별 초기화가 필요해요. SDK, 결제 등 사용하는 기능마다
Base_Initialize(),IAP_Initialize()를 각각 호출해야 해요. 신규 인터페이스(Stove_Initialize)는initParam설정에 따라 SDK · 팝업 · 결제 기능을 한 번의 호출로 함께 초기화해요. - 내부 윈도우 핸들이 필요한 경우에는 이 함수 대신 IAP_InitializeWithWndInfo 를 사용해요.
See Also
IAP_InitializeWithWndInfo
종류 함수 · 모듈 IAP · 버전 3.3.3
Description
결제 기능을 초기화해요. Internal Style 팝업의 부모 윈도우가 될 메인 윈도우 핸들이 필요해요.
구 인터페이스에서는 SDK와 결제 기능을 각각 별도로 초기화해야 해요. Base_Initialize() 로 SDK를 먼저 초기화한 뒤 이 함수를 호출해야 해요.
IAP_Initialize() 와의 차이는 Internal Style 팝업(SDK가 자체 렌더링하는 팝업)의 부모 윈도우 핸들을 함께 전달한다는 점이에요. Internal Style 팝업을 사용하지 않는다면 IAP_Initialize 를 사용해도 돼요.
Declaration
Result IAP_InitializeWithWndInfo(const wchar_t* shopKey, const void* mainWndHandle);
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
shopKey | const wchar_t* | Y | 파트너스로부터 발급받은 shopKey |
mainWndHandle | const void* | Y | Internal Style 팝업의 부모 윈도우가 될 메인 윈도우 핸들 (HWND) |
Returns
| Type | Description |
|---|---|
Result | 함수 호출 결과. result.IsSuccessful() 로 성공 여부를 판정해요 |
Error Codes
| Code | Name | Description | Show to User | In-Game Message |
|---|---|---|---|---|
| 0 | SUCCESS | 성공 | x | |
| 16 | BASE_NOT_INITIALIZED | SDK가 초기화되지 않았어요. Base_Initialize() 를 먼저 호출해야 해요. | x | |
| 18 | ALREADY_INITIALIZED | 이미 초기화가 되었어요. IAP_UnInitialize() 호출 후 다시 시도해야 해요. | x | |
| 80 | VIEWUI_NOT_INITIALIZED | 결제 화면 표시에 사용하는 내부 UI 모듈 초기화에 실패했어요. | x | |
| 253 | UNMANAGED_EXCEPTION | 처리 중 알 수 없는 예외가 발생했어요. | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
| 254 | MANAGED_EXCEPTION | 처리 중 예외가 발생했어요. | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
그 외 발생 가능한 결과 코드는 SDKResultCode 를 참조하세요.
Example
using namespace Stove::PCSDK::IAP;
Result result = IAP_InitializeWithWndInfo(L"YOUR_SHOP_KEY", hWnd);
if (result.IsSuccessful())
{
// 성공 시 로직을 구현해 주세요.
}
else
{
// 실패 시 로직을 구현해 주세요.
}
Notes
- 이 함수는 동기 함수이며 콜백을 받지 않아요.
- 구 인터페이스는 모듈별로 개별 초기화가 필요해요. SDK, 결제 등 사용하는 기능마다 개별적으로 초기화 함수를 호출해야 해요. 신규 인터페이스(
Stove_Initialize)는initParam에 메인 윈도우 핸들을 설정하면 SDK · 팝업 · 결제 기능을 한 번의 호출로 함께 초기화해요.
See Also
IAP_StartPayment
종류 함수 · 모듈 IAP · 버전 3.0.0.4 · 폐기 예정
Description
폐기(deprecated)된 기능이에요. 대신 IAP_StartPurchase 를 사용하세요.
1회성 결제를 시작하기 위한 결제 URL을 전달받거나 WebView2를 이용하여 결제를 시작해요. 진행 방식은 options 에 설정한 StovePCPaymentOperation 값에 따라 달라져요.
DEFAULT: Stove Webview를 사용하지 않아요. 결과에 포함된 일회용 URL로 결제 페이지를 직접 열어야 해요.WITH_WEBVIEW: Stove Webview를 통해 결제 페이지를 열고 결제를 진행해요.
IAP_Initialize() 로 초기화한 뒤 호출해야 해요.
Declaration
void IAP_StartPayment(const StovePCPaymentOption* options, OnStartPaymentFinished onFinished);
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
options | const StovePCPaymentOption* | Y | API에 대한 옵션을 전달하는 구조체 |
onFinished | OnStartPaymentFinished | Y | 1회성 결제에 대한 정보를 등록한 콜백 함수 |
Returns
없음
Callback
typedef void(__cdecl* OnStartPaymentFinished)(CallbackResult callbackResult, const wchar_t* url);
| Name | Type | Description |
|---|---|---|
callbackResult | CallbackResult | 콜백 결과 값 |
url | const wchar_t* | 1회용 결제 URL 주소 |
Base_RunCallback() 을 호출한 스레드에서 실행돼요. 호출 1건당 1회만 전달돼요.
Error Codes
| Code | Name | Description | Show to User | In-Game Message |
|---|---|---|---|---|
| 0 | SUCCESS | 성공 | x | |
| 17 | NOT_INITIALIZED | 결제 기능이 초기화되지 않았어요. IAP_Initialize() 를 먼저 호출해야 해요. | x | |
| 80 | VIEWUI_NOT_INITIALIZED | 결제 화면을 열어야 하는데 내부 UI 모듈이 초기화되어 있지 않아요. | x | |
| 82 | WEBVIEW_CREATE_FAIL | 결제 화면 생성에 실패했어요. | x | |
| 83 | WEBVIEW_LOAD_URL_FAIL | 결제 화면의 주소를 불러오지 못했어요. | x | |
| 89 | WEBVIEW_CLOSE_ALL_FAIL | 새 결제 화면을 열기 전에 기존 팝업을 정리하지 못했어요. | x | |
| 253 | UNMANAGED_EXCEPTION | 처리 중 알 수 없는 예외가 발생했어요. | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
| 254 | MANAGED_EXCEPTION | 처리 중 예외가 발생했어요. | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
그 외 발생 가능한 결과 코드는 SDKResultCode 를 참조하세요.
Memory Management
| Object | Owner | Release |
|---|---|---|
options | 호출자 | 호출자가 생성한 일반 C++ 객체예요. 함수가 반환된 뒤 별도의 해제 함수를 호출할 필요가 없으며, 객체가 스코프를 벗어나면 소멸자가 자동으로 자원을 정리해요 |
콜백의 callbackResult, url | SDK | 해제 금지. 콜백이 끝나면 무효처리되며, 필요한 값은 콜백 안에서 복사해 두어야 해요 |
Example
using namespace Stove::PCSDK::IAP;
void __cdecl OnStartPaymentFinished(CallbackResult callbackResult, const wchar_t* url)
{
if (callbackResult.GetResult().IsSuccessful())
{
// 성공 시 로직을 구현해 주세요. Operation == DEFAULT 인 경우 url 로 결제 페이지를 열어야 합니다.
}
else
{
// 실패 시 로직을 구현해 주세요.
}
}
// 호출
StovePCPaymentOption options;
options.SetOperation(StovePCPaymentOperation::DEFAULT);
IAP_StartPayment(&options, OnStartPaymentFinished);
Notes
- 이 함수는 비동기 함수이며 결과는
onFinished콜백으로만 전달돼요. - IAP_StartPurchase와 달리 게임 캐시(1회성 결제)를 충전하는 API이며 별도의 확정(Confirm) 절차가 없어요.
- 팝업이 닫히는 시점의 결과가 필요하면 IAP_StartPaymentEx 를 사용해요.
See Also
IAP_StartPaymentEx
종류 함수 · 모듈 IAP · 버전 3.3.4 · 폐기 예정
Description
폐기(deprecated)된 기능이에요. 대신 IAP_StartPurchaseEx 를 사용하세요.
1회성 결제를 시작하기 위한 결제 URL을 전달받거나 WebView2를 이용하여 결제를 시작해요. 진행 방식은 IAP_StartPayment 와 동일하게 options 의 StovePCPaymentOperation 값에 따라 달라져요.
IAP_StartPayment() 와의 차이는 onDestroy 콜백을 추가로 받는다는 점이에요. onDestroy 는 이 호출로 열린 팝업이 모두 닫힌 뒤 전달돼요.
IAP_Initialize() 로 초기화한 뒤 호출해야 해요.
Declaration
void IAP_StartPaymentEx(const StovePCPaymentOption* options, OnStartPaymentFinished onFinished, OnIAPPopupDestroyFinished onDestroy);
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
options | const StovePCPaymentOption* | Y | API에 대한 옵션을 전달하는 구조체 |
onFinished | OnStartPaymentFinished | Y | 1회성 결제에 대한 정보를 등록한 콜백 함수 |
onDestroy | OnIAPPopupDestroyFinished | Y | 팝업이 닫힐 경우에 대한 결과를 넘겨받는 콜백 함수 |
Returns
없음
Callback
typedef void(__cdecl* OnStartPaymentFinished)(CallbackResult callbackResult, const wchar_t* url);
typedef void(__cdecl* OnIAPPopupDestroyFinished)(CallbackResult callbackResult);
| Name | Type | Description |
|---|---|---|
callbackResult | CallbackResult | 호출 결과 |
url | const wchar_t* | 1회용 결제 URL 주소 |
Base_RunCallback() 을 호출한 스레드에서 실행돼요.
onFinished는 호출 1건당 1회만 전달돼요.onDestroy는 이 호출로 생성된 팝업이 모두 닫힌 뒤 전달돼요.
Error Codes
| Code | Name | Description | Show to User | In-Game Message |
|---|---|---|---|---|
| 0 | SUCCESS | 성공 | x | |
| 17 | NOT_INITIALIZED | 결제 기능이 초기화되지 않았어요. IAP_Initialize() 를 먼저 호출해야 해요. | x | |
| 80 | VIEWUI_NOT_INITIALIZED | 결제 화면을 열어야 하는데 내부 UI 모듈이 초기화되어 있지 않아요. | x | |
| 82 | WEBVIEW_CREATE_FAIL | 결제 화면 생성에 실패했어요. | x | |
| 83 | WEBVIEW_LOAD_URL_FAIL | 결제 화면의 주소를 불러오지 못했어요. | x | |
| 89 | WEBVIEW_CLOSE_ALL_FAIL | 새 결제 화면을 열기 전에 기존 팝업을 정리하지 못했어요. | x | |
| 90 | WEBVIEW_CLOSE_FAIL | 결제 화면을 닫는 과정에서 실패했어요. onDestroy 콜백으로 전달돼요. | x | |
| 253 | UNMANAGED_EXCEPTION | 처리 중 알 수 없는 예외가 발생했어요. | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
| 254 | MANAGED_EXCEPTION | 처리 중 예외가 발생했어요. | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
그 외 발생 가능한 결과 코드는 SDKResultCode 를 참조하세요.
Memory Management
| Object | Owner | Release |
|---|---|---|
options | 호출자 | 호출자가 생성한 일반 C++ 객체예요. 함수가 반환된 뒤 별도의 해제 함수를 호출할 필요가 없으며, 객체가 스코프를 벗어나면 소멸자가 자동으로 자원을 정리해요 |
콜백의 callbackResult, url | SDK | 해제 금지. 콜백이 끝나면 무효처리되며, 필요한 값은 콜백 안에서 복사해 두어야 해요 |
Example
using namespace Stove::PCSDK::IAP;
void __cdecl OnStartPaymentFinished(CallbackResult callbackResult, const wchar_t* url)
{
if (callbackResult.GetResult().IsSuccessful())
{
// 성공 시 로직을 구현해 주세요.
}
else
{
// 실패 시 로직을 구현해 주세요.
}
}
void __cdecl OnStartPaymentPopupDestroyed(CallbackResult callbackResult)
{
// 결제 과정에서 열린 팝업이 모두 닫혔을 때 로직을 구현해 주세요.
}
// 호출
StovePCPaymentOption options;
options.SetOperation(StovePCPaymentOperation::WITH_WEBVIEW);
IAP_StartPaymentEx(&options, OnStartPaymentFinished, OnStartPaymentPopupDestroyed);
Notes
- 이 함수는 비동기 함수이며 결과는
onFinished콜백으로 전달돼요. onDestroy콜백이 필요하지 않으면 IAP_StartPayment 를 사용해도 돼요.
See Also
IAP_StartPurchase
종류 함수 · 모듈 IAP · 버전 3.0.0.4
Description
상품구매를 시작하기 위한 결제 URL을 전달받거나 WebView2를 이용하여 결제를 시작해요. 진행 방식은 params 의 StovePCPurchaseOption 에 설정한 StovePCPurchaseOperation 값에 따라 달라져요.
DEFAULT: Stove Webview 를 사용하지 않아요. 결과에 포함된 일회용 URL로 결제 페이지를 직접 열어야 하며, 결제 후에는 IAP_ConfirmPurchase 를 수동으로 호출해 구매 결과를 확인해야 해요.WITH_WEBVIEW: Stove Webview를 통해 결제 페이지를 열고 결제를 진행해요. 웹뷰 내 결제 완료 후에도IAP_ConfirmPurchase를 수동으로 호출해야 해요.WITH_WEBVIEW_AND_CONFIRM_RESULT(권장) : Stove Webview를 통해 결제를 진행하고, 결제 성공 시 SDK가 자동으로IAP_ConfirmPurchase를 호출하여 확정된 구매 결과를onFinished로 돌려줘요.
IAP_Initialize() 로 초기화한 뒤 호출해야 해요.
Declaration
void IAP_StartPurchase(const StovePCStartPurchaseParam* params, OnStartPurchaseFinished onFinished);
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
params | const StovePCStartPurchaseParam* | Y | 구매할 상품 목록과 구매 옵션 |
onFinished | OnStartPurchaseFinished | Y | 상품 구매 결과를 등록한 콜백 함수 |
Returns
없음
Callback
typedef void(__cdecl* OnStartPurchaseFinished)(CallbackResult callbackResult, StovePCPurchaseResult purchaseResult);
| Name | Type | Description |
|---|---|---|
callbackResult | CallbackResult | 콜백 결과 값 |
purchaseResult | StovePCPurchaseResult | 구매 결과. StovePCPurchaseOperation 값에 따라 채워지는 필드가 달라요(Overview 참고) |
Base_RunCallback() 을 호출한 스레드에서 실행돼요. 호출 1건당 1회만 전달돼요.
Error Codes
| Code | Name | Description | Show to User | In-Game Message |
|---|---|---|---|---|
| 0 | SUCCESS | 성공 | x | |
| 17 | NOT_INITIALIZED | 결제 기능이 초기화되지 않았어요. IAP_Initialize() 를 먼저 호출해야 해요. | x | |
| 80 | VIEWUI_NOT_INITIALIZED | 결제 화면을 열어야 하는데 내부 UI 모듈이 초기화되어 있지 않아요. | x | |
| 82 | WEBVIEW_CREATE_FAIL | 결제 화면 생성에 실패했어요. | x | |
| 83 | WEBVIEW_LOAD_URL_FAIL | 결제 화면의 주소를 불러오지 못했어요. | x | |
| 84 | WEBVIEW_CLOSED_BEFORE_PURCHASE | 결제가 완료되기 전에 사용자가 결제 화면을 닫았어요. | O | 구매가 정상적으로 완료되지 않았습니다. 다시 시도해 주세요. [확인] |
| 85 | PARAMETER_LENGTH_EXCEEDED | serviceTxnNo 가 50자를 넘었거나 extraData 가 500자를 넘었어요. | O | 결제 정보가 유효하지 않아 결제를 진행할 수 없습니다. 다시 시도해 주세요. [확인] |
| 86 | INVALID_JSON_STRING | extraData 가 유효한 JSON 형식이 아니에요. | O | 결제 정보가 유효하지 않아 결제를 진행할 수 없습니다. 다시 시도해 주세요. [확인] |
| 88 | INVALID_ORDER_PRODUCT_INFORMATION | 주문 상품 중 수량이 0 이하이거나 판매 가격이 음수인 항목이 있어요. | O | 결제 정보가 유효하지 않아 결제를 진행할 수 없습니다. 다시 시도해 주세요. [확인] |
| 89 | WEBVIEW_CLOSE_ALL_FAIL | 새 결제 화면을 열기 전에 기존 팝업을 정리하지 못했어요. | x | |
| 252 | NOT_IMPLEMENTED | 지원하지 않는 operation 값이 지정되었어요. | x | |
| 253 | UNMANAGED_EXCEPTION | 처리 중 알 수 없는 예외가 발생했어요. | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
| 254 | MANAGED_EXCEPTION | 처리 중 예외가 발생했어요. | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
WITH_WEBVIEW_AND_CONFIRM_RESULT 로 호출하면 결제 완료 후 구매 확정이 자동으로 수행되며, 구매 확정이 실패하면 그 결과코드가 onFinished 로 전달돼요.
그 외 발생 가능한 결과 코드는 SDKResultCode 를 참조하세요.
Memory Management
| Object | Owner | Release |
|---|---|---|
params | 호출자 | 호출자가 생성한 일반 C++ 객체예요. 함수가 반환된 뒤 별도의 해제 함수를 호출할 필요가 없으며, 객체가 스코프를 벗어나면 소멸자가 자동으로 자원을 정리해요 |
콜백의 callbackResult, purchaseResult | 콜백 스코프 | 값으로 전달되는 지역 객체예요. 별도로 해제할 필요가 없으며, 콜백이 끝나면 무효처리되므로 필요한 값은 콜백 안에서 복사해 두어야 해요 |
Example
using namespace Stove::PCSDK::IAP;
void __cdecl OnStartPurchaseFinished(CallbackResult callbackResult, StovePCPurchaseResult purchaseResult)
{
if (callbackResult.GetResult().IsSuccessful())
{
// 성공 시 로직을 구현해 주세요.
// Operation == DEFAULT 인 경우 GetOneTimePaymentUrl() 로 결제 페이지를 열고,
// 결제 완료 후 IAP_ConfirmPurchase() 를 호출해 구매를 확정해야 합니다.
int64_t transactionMasterNumber = purchaseResult.GetTransactionMasterNumber();
}
else
{
// 실패 시 로직을 구현해 주세요.
}
}
// 호출
StovePCOrderProduct orderProduct;
orderProduct.SetProductId(productId);
orderProduct.SetSalePrice(salePrice);
orderProduct.SetQuantity(1);
StovePCPurchaseOption purchaseOption;
purchaseOption.SetOperation(StovePCPurchaseOperation::DEFAULT);
StovePCStartPurchaseParam params;
params.CreateOrderProduct(1);
params.SetOrderProduct(0, &orderProduct);
params.SetPurchaseOption(purchaseOption);
IAP_StartPurchase(¶ms, OnStartPurchaseFinished);
Notes
- 이 함수는 비동기 함수이며 결과는
onFinished콜백으로만 전달돼요. DEFAULT또는WITH_WEBVIEW로 시작한 구매는 반드시 IAP_ConfirmPurchase 를 호출해 확정해야 해요.WITH_WEBVIEW_AND_CONFIRM_RESULT는 SDK가 자동으로 확정을 처리해요.purchaseResult의GetPurchaseProgress()(PurchaseProgress) 값으로 결제창을 직접 띄워야 하는지 판단할 수 있어요.- 팝업이 닫히는 시점의 결과가 필요하면 IAP_StartPurchaseEx 를 사용해요.
See Also
IAP_StartPurchaseEx
종류 함수 · 모듈 IAP · 버전 3.3.4
Description
상품구매를 시작하기 위한 결제 URL을 전달받거나 WebView2를 이용하여 결제를 시작해요. 진행 방식은 IAP_StartPurchase 와 동일하게 params 의 StovePCPurchaseOperation 값에 따라 달라져요.
IAP_StartPurchase() 와의 차이는 onDestroy 콜백을 추가로 받는다는 점이에요. onDestroy 는 이 호출로 열린 팝업이 모두 닫힌 뒤 전달돼요.
IAP_Initialize() 로 초기화한 뒤 호출해야 해요.
Declaration
void IAP_StartPurchaseEx(const StovePCStartPurchaseParam* params,
OnStartPurchaseFinished onFinished, OnIAPPopupDestroyFinished onDestroy);
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
params | const StovePCStartPurchaseParam* | Y | 구매할 상품 목록과 구매 옵션 |
onFinished | OnStartPurchaseFinished | Y | 상품 구매 결과를 등록한 콜백 함수 |
onDestroy | OnIAPPopupDestroyFinished | Y | 팝업이 닫힐 경우에 대한 결과를 넘겨받는 콜백 함수 |
Returns
없음
Callback
typedef void(__cdecl* OnStartPurchaseFinished)(CallbackResult callbackResult, StovePCPurchaseResult purchaseResult);
typedef void(__cdecl* OnIAPPopupDestroyFinished)(CallbackResult callbackResult);
| Name | Type | Description |
|---|---|---|
callbackResult | CallbackResult | 호출 결과 |
purchaseResult | StovePCPurchaseResult | 구매 결과. StovePCPurchaseOperation 값에 따라 채워지는 필드가 달라요 |
Base_RunCallback() 을 호출한 스레드에서 실행돼요.
onFinished는 호출 1건당 1회만 전달돼요.onDestroy는 이 호출로 생성된 팝업이 모두 닫힌 뒤 전달돼요.
Error Codes
| Code | Name | Description | Show to User | In-Game Message |
|---|---|---|---|---|
| 0 | SUCCESS | 성공 | x | |
| 17 | NOT_INITIALIZED | 결제 기능이 초기화되지 않았어요. IAP_Initialize() 를 먼저 호출해야 해요. | x | |
| 80 | VIEWUI_NOT_INITIALIZED | 결제 화면을 열어야 하는데 내부 UI 모듈이 초기화되어 있지 않아요. | x | |
| 82 | WEBVIEW_CREATE_FAIL | 결제 화면 생성에 실패했어요. | x | |
| 83 | WEBVIEW_LOAD_URL_FAIL | 결제 화면의 주소를 불러오지 못했어요. | x | |
| 84 | WEBVIEW_CLOSED_BEFORE_PURCHASE | 결제가 완료되기 전에 사용자가 결제 화면을 닫았어요. | O | 구매가 정상적으로 완료되지 않았습니다. 다시 시도해 주세요. [확인] |
| 85 | PARAMETER_LENGTH_EXCEEDED | serviceTxnNo 가 50자를 넘었거나 extraData 가 500자를 넘었어요. | O | 결제 정보가 유효하지 않아 결제를 진행할 수 없습니다. 다시 시도해 주세요. [확인] |
| 86 | INVALID_JSON_STRING | extraData 가 유효한 JSON 형식이 아니에요. | O | 결제 정보가 유효하지 않아 결제를 진행할 수 없습니다. 다시 시도해 주세요. [확인] |
| 88 | INVALID_ORDER_PRODUCT_INFORMATION | 주문 상품 중 수량이 0 이하이거나 판매 가격이 음수인 항목이 있어요. | O | 결제 정보가 유효하지 않아 결제를 진행할 수 없습니다. 다시 시도해 주세요. [확인] |
| 89 | WEBVIEW_CLOSE_ALL_FAIL | 새 결제 화면을 열기 전에 기존 팝업을 정리하지 못했어요. | x | |
| 90 | WEBVIEW_CLOSE_FAIL | 결제 화면을 닫는 과정에서 실패했어요. onDestroy 콜백으로 전달돼요. | x | |
| 252 | NOT_IMPLEMENTED | 지원하지 않는 operation 값이 지정되었어요. | x | |
| 253 | UNMANAGED_EXCEPTION | 처리 중 알 수 없는 예외가 발생했어요. | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
| 254 | MANAGED_EXCEPTION | 처리 중 예외가 발생했어요. | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
WITH_WEBVIEW_AND_CONFIRM_RESULT 로 호출하면 결제 완료 후 구매 확정이 자동으로 수행되며, 구매 확정이 실패하면 그 결과코드가 onFinished 로 전달돼요.
그 외 발생 가능한 결과 코드는 SDKResultCode 를 참조하세요.
Memory Management
| Object | Owner | Release |
|---|---|---|
params | 호출자 | 호출자가 생성한 일반 C++ 객체예요. 함수가 반환된 뒤 별도의 해제 함수를 호출할 필요가 없으며, 객체가 스코프를 벗어나면 소멸자가 자동으로 자원을 정리해요 |
콜백의 callbackResult, purchaseResult | 콜백 스코프 | 값으로 전달되는 지역 객체예요. 별도로 해제할 필요가 없으며, 콜백이 끝나면 무효처리되므로 필요한 값은 콜백 안에서 복사해 두어야 해요 |
Example
using namespace Stove::PCSDK::IAP;
void __cdecl OnStartPurchaseFinished(CallbackResult callbackResult, StovePCPurchaseResult purchaseResult)
{
if (callbackResult.GetResult().IsSuccessful())
{
// 성공 시 로직을 구현해 주세요.
}
else
{
// 실패 시 로직을 구현해 주세요.
}
}
void __cdecl OnStartPurchasePopupDestroyed(CallbackResult callbackResult)
{
// 구매 과정에서 열린 팝업이 모두 닫혔을 때 로직을 구현해 주세요.
}
// 호출
StovePCOrderProduct orderProduct;
orderProduct.SetProductId(productId);
orderProduct.SetSalePrice(salePrice);
orderProduct.SetQuantity(1);
StovePCPurchaseOption purchaseOption;
purchaseOption.SetOperation(StovePCPurchaseOperation::WITH_WEBVIEW_AND_CONFIRM_RESULT);
StovePCStartPurchaseParam params;
params.CreateOrderProduct(1);
params.SetOrderProduct(0, &orderProduct);
params.SetPurchaseOption(purchaseOption);
IAP_StartPurchaseEx(¶ms, OnStartPurchaseFinished, OnStartPurchasePopupDestroyed);
Notes
- 이 함수는 비동기 함수이며 결과는
onFinished콜백으로 전달돼요. DEFAULT또는WITH_WEBVIEW로 시작한 구매는 반드시 IAP_ConfirmPurchase 를 호출해 확정해야 해요.WITH_WEBVIEW_AND_CONFIRM_RESULT는 SDK가 자동으로 확정을 처리해요.onDestroy콜백이 필요하지 않으면 IAP_StartPurchase 를 사용해도 돼요.
See Also
IAP_UnInitialize
종류 함수 · 모듈 IAP · 버전 3.0.0.4
Description
결제 기능의 자원을 해제해요. 게임을 종료하거나 결제 기능을 다시 초기화해야 할 때 호출해요.
Declaration
Result IAP_UnInitialize();
Parameters
없음
Returns
| Type | Description |
|---|---|
Result | 함수 호출 결과. result.IsSuccessful() 로 성공 여부를 판정해요 |
Error Codes
| Code | Name | Description | Show to User | In-Game Message |
|---|---|---|---|---|
| 0 | SUCCESS | 성공 | x | |
| 17 | NOT_INITIALIZED | 결제 기능이 초기화되지 않았어요. IAP_Initialize() 를 먼저 호출해야 해요. | x | |
| 81 | VIEWUI_UNINIT_FAILED | 내부 UI 모듈을 정리하는 데 실패했어요. | x | |
| 253 | UNMANAGED_EXCEPTION | 처리 중 알 수 없는 예외가 발생했어요. | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
| 254 | MANAGED_EXCEPTION | 처리 중 예외가 발생했어요. | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
그 외 발생 가능한 결과 코드는 SDKResultCode 를 참조하세요.
Example
using namespace Stove::PCSDK::IAP;
Result result = IAP_UnInitialize();
if (result.IsSuccessful())
{
// 성공 시 로직을 구현해 주세요.
}
else
{
// 실패 시 로직을 구현해 주세요.
}
Notes
- 이 함수는 동기 함수이며 콜백을 받지 않아요.
- 구 인터페이스는 모듈별로 개별 종료가 필요해요. 사용한 모듈마다 각각의 UnInitialize 함수를 호출해야 해요.
See Also
Log_GetVersion
종류 함수 · 모듈 Log · 버전 3.4.1
Description
로그 기능의 버전 정보를 version 버퍼에 채워 돌려줘요.
Declaration
Result Log_GetVersion(__out wchar_t* version, uint32_t length);
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
version | wchar_t* | Y | 버전 정보를 전달받을 버퍼예요. 호출자가 할당해요. |
length | uint32_t | Y | version 버퍼의 길이예요. |
Returns
| Type | Description |
|---|---|
Result | 함수 호출 결과예요. result.IsSuccessful()이 true이면 성공이에요. |
Error Codes
이 함수는 BaseSDK의 버전 조회 결과를 그대로 반환해요. Log 고유의 결과코드는 없어요.
그 외 발생 가능한 결과 코드는 SDKResultCode 를 참조하세요.
Memory Management
| Object | Owner | Release |
|---|---|---|
version 버퍼 | 호출자 | 호출자가 할당한 버퍼이므로 호출자가 관리해요. |
Example
using namespace Stove::PCSDK::Log;
wchar_t version[64] = { 0 };
Result result = Log_GetVersion(version, 64);
if (result.IsSuccessful())
{
// 성공 시 로직을 구현해 주세요.
}
else
{
// 실패 시 로직을 구현해 주세요.
}
Notes
version버퍼는length보다 크거나 같아야 하며, 부족한 경우 결과가 실패할 수 있어요.
See Also
Log_Initialize
종류 함수 · 모듈 Log · 버전 3.4.1
Description
로그 기능을 초기화해요. 로그 기능은 릴리즈노트 기준 3.4.1 에 전체가 추가되었어요.
SDK가 먼저 초기화되어 있어야 하며, 중복 초기화는 허용되지 않아요.
Declaration
Result Log_Initialize();
Parameters
없음
Returns
| Type | Description |
|---|---|
Result | 함수 호출 결과예요. result.IsSuccessful()이 true이면 성공이에요. |
Error Codes
Result::GetMethodCode()로 조회하면 Stove::PCSDK::Log::SDKMethod::INITIALIZE 값을 얻어요.
| Code | Name | Description | Show to User | In-Game Message |
|---|---|---|---|---|
| 0 | SUCCESS | 성공했어요. | x | |
| 16 | BASE_NOT_INITIALIZED | SDK가 초기화되지 않았어요. Base_Initialize() 를 먼저 호출해야 해요. | x | |
| 18 | ALREADY_INITIALIZED | 이미 초기화되어 있어요. | x | |
| 80 | LOCAL_DB_CREATE_WORKING_DIRECTORY_FAILED | 로그를 저장할 로컬 작업 디렉터리를 만들지 못했어요. | x | |
| 81 | LOCAL_DB_CONNECT_FAILED | 로그를 저장할 로컬 데이터베이스에 연결하지 못했어요. | x | |
| 82 | LOCAL_DB_CREATE_TABLE_FAILED | 로그를 저장할 로컬 데이터베이스 테이블을 만들지 못했어요. | x | |
| 251 | PCSDK_DLL_NOT_FOUND | 초기화 과정에서 내부적으로 수행하는 버전 확인이 실패한 경우 반환돼요. | x | |
| 253 | UNMANAGED_EXCEPTION | SDK 내부에서 알 수 없는 예외가 발생했어요. | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
| 254 | MANAGED_EXCEPTION | SDK 내부에서 예외가 발생했어요. | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
그 외 발생 가능한 결과 코드는 SDKResultCode 를 참조하세요.
Example
using namespace Stove::PCSDK::Log;
Result result = Log_Initialize();
if (result.IsSuccessful())
{
// 성공 시 로직을 구현해 주세요.
}
else
{
// 실패 시 로직을 구현해 주세요.
}
Notes
- 사용을 마쳤을 때는 Log_UnInitialize 를 호출해 자원을 해제해요.
- SDK가 초기화되지 않은 상태에서 호출하면
BASE_NOT_INITIALIZED가 반환될 수 있어요.
See Also
Log_Send
종류 함수 · 모듈 Log · 버전 3.4.1
Description
STOVE 로그 서버에 로그를 전송해요. logSendParam 에 채운 값이 그대로 로그 항목이 되어 전송돼요.
Declaration
void Log_Send(const StovePCLogSendParam* logSendParam, OnLogSendFinished onFinished);
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
logSendParam | const StovePCLogSendParam* | Y | 로그를 전송하기 위한 정보예요. |
onFinished | OnLogSendFinished | Y | 로그 전송 결과를 전달받는 콜백 함수예요. |
Returns
없음
Callback
typedef void(__cdecl* OnLogSendFinished)(CallbackResult callbackResult);
| Name | Type | Description |
|---|---|---|
callbackResult | CallbackResult | 콜백 결과 값이에요. |
콜백은 Base_RunCallback() 을 호출한 스레드에서 실행돼요. 전송 처리가 끝나면 1회 호출돼요.
Error Codes
Result::GetMethodCode()로 조회하면 Stove::PCSDK::Log::SDKMethod::LOG_SEND 값을 얻어요.
| Code | Name | Description | Show to User | In-Game Message |
|---|---|---|---|---|
| 0 | SUCCESS | 로그가 로컬 데이터베이스에 정상적으로 기록되었어요. | x | |
| 17 | NOT_INITIALIZED | 로그 기능이 초기화되지 않은 상태에서 호출했어요. | x | |
| 84 | LOCAL_DB_BACKUP_LOG_FAILED | 로그를 로컬 데이터베이스에 기록하는 데 실패했어요. | x | |
| 85 | INVALID_LOG_PARAMETER | logSendParam.contents가 올바른 JSON 형식이 아니에요. | x | |
| 86 | LOG_SIZE_EXCEEDED | 로그 내용이 허용된 최대 크기(50KB)를 초과했어요. | x | |
| 253 | UNMANAGED_EXCEPTION | SDK 내부에서 알 수 없는 예외가 발생했어요. | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
| 254 | MANAGED_EXCEPTION | SDK 내부에서 예외가 발생했어요. | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
그 외 발생 가능한 결과 코드는 SDKResultCode 를 참조하세요.
Memory Management
| Object | Owner | Release |
|---|---|---|
logSendParam | 호출자 | 호출자가 생성한 일반 C++ 객체예요. 함수가 반환된 뒤 별도의 해제 함수를 호출할 필요가 없으며, 객체가 스코프를 벗어나면 소멸자가 자동으로 자원을 정리해요 |
콜백의 callbackResult | SDK | 해제 금지. 콜백이 끝나면 무효처리되며, 필요한 값은 콜백 안에서 복사해 두어야 해요 |
Example
using namespace Stove::PCSDK::Log;
StovePCLogSendParam logSendParam;
logSendParam.SetAuid(auid);
logSendParam.SetCuid(cuid);
logSendParam.SetContents(L"{\"event\":\"login\"}");
Log_Send(&logSendParam, [](CallbackResult callbackResult)
{
if (callbackResult.GetResult().IsSuccessful())
{
// 성공 시 로직을 구현해 주세요.
}
else
{
// 실패 시 로직을 구현해 주세요.
}
});
Notes
- 값을 모르는 필드는 설정하지 않아도 돼요. 필드 설명은 StovePCLogSendParam 를 참조하세요.
- 로그 기능은
Log_Send()하나만 로그 전송 API 로 제공해요. Log_Send()의 콜백은 로그가 로컬 데이터베이스에 기록되는 즉시SUCCESS로 호출돼요. 실제 로그 서버로의 전송 성공 여부는 이 콜백으로 전달되지 않아요.- 로컬 DB 기록 실패(
LOCAL_DB_BACKUP_LOG_FAILED등)를 제외하면 이 콜백은 사실상 항상 성공을 돌려줘요. 게임 로직을 이 콜백의 결과로 분기하도록 설계하지 않는 것을 권장해요.
See Also
Log_UnInitialize
종류 함수 · 모듈 Log · 버전 3.4.1
Description
로그 기능의 리소스를 해제해요. Log_Initialize 와 짝을 이루는 함수예요.
Declaration
Result Log_UnInitialize();
Parameters
없음
Returns
| Type | Description |
|---|---|
Result | 함수 호출 결과예요. result.IsSuccessful()이 true이면 성공이에요. |
Error Codes
Result::GetMethodCode()로 조회하면 Stove::PCSDK::Log::SDKMethod::UNINITIALIZE 값을 얻어요.
| Code | Name | Description | Show to User | In-Game Message |
|---|---|---|---|---|
| 0 | SUCCESS | 성공했어요. | x | |
| 17 | NOT_INITIALIZED | 로그 기능이 초기화되지 않은 상태에서 호출했어요. | x | |
| 83 | LOCAL_DB_DISCONNECT_FAILED | 로컬 데이터베이스 연결 해제에 실패했어요. | x | |
| 253 | UNMANAGED_EXCEPTION | SDK 내부에서 알 수 없는 예외가 발생했어요. | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
| 254 | MANAGED_EXCEPTION | SDK 내부에서 예외가 발생했어요. | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
그 외 발생 가능한 결과 코드는 SDKResultCode 를 참조하세요.
Example
using namespace Stove::PCSDK::Log;
Result result = Log_UnInitialize();
if (result.IsSuccessful())
{
// 성공 시 로직을 구현해 주세요.
}
else
{
// 실패 시 로직을 구현해 주세요.
}
Notes
- Log_Initialize() 와 짝을 이루는 종료 함수예요.
See Also
PCBang_CheckPCBangStatus
종류 함수 · 모듈 PCBang · 버전 3.0.2
Description
PC방 여부 및 상품 사용 상태를 조회해요.
Declaration
void PCBang_CheckPCBangStatus(OnPCBangCheckPCBangStatusOnFinished onFinished);
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
onFinished | OnPCBangCheckPCBangStatusOnFinished | Y | 조회 결과를 전달받는 콜백 함수예요. |
Returns
없음
Callback
typedef void(__cdecl* OnPCBangCheckPCBangStatusOnFinished)(CallbackResult callbackResult, StovePCBangStatus pcBangStatus);
| Name | Type | Description |
|---|---|---|
callbackResult | CallbackResult | 콜백 결과 값이에요. |
pcBangStatus | StovePCBangStatus | PC방 여부 및 상품 사용 상태 정보예요. |
콜백은 Base_RunCallback() 을 호출한 스레드에서 실행돼요. 조회가 끝나면 1회 호출돼요.
Error Codes
Result::GetMethodCode()로 조회하면 Stove::PCSDK::PCBang::SDKMethod::CHECK_PCBANG_STATUS 값을 얻어요.
| Code | Name | Description | Show to User | In-Game Message |
|---|---|---|---|---|
| 0 | SUCCESS | 성공 | x | |
| 17 | NOT_INITIALIZED | SDK 또는 PC방 기능이 초기화되지 않았어요. PCBang_Initialize() 를 먼저 호출해야 해요. | x | |
| 22 | HTTP_ERROR | 상태 조회 요청의 네트워크 통신이 실패했어요. | O | 네트워크 연결이 원활하지 않습니다. 네트워크 상태를 확인하고 다시 실행해 주세요. [확인] |
| 23 | RESPONSE_ERROR | 서버 응답이 올바르지 않아요. | O | 네트워크 연결이 원활하지 않습니다. 네트워크 상태를 확인하고 다시 실행해 주세요. [확인] |
| 25 | RESPONSE_VALUE_IS_NULL | 서버 응답 값이 비어 있어요. | O | 네트워크 연결이 원활하지 않습니다. 네트워크 상태를 확인하고 다시 실행해 주세요. [확인] |
| 249 | NETWORK_TRANSPORT_ERROR | 네트워크 전송 과정에서 오류가 발생했어요. | x | |
| 253 | UNMANAGED_EXCEPTION | SDK 내부에서 예기치 않은 예외가 발생했어요. | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
| 254 | MANAGED_EXCEPTION | SDK 내부에서 예기치 않은 예외가 발생했어요. | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
그 외 발생 가능한 결과 코드는 SDKResultCode 를 참조하세요.
Memory Management
| Object | Owner | Release |
|---|---|---|
콜백의 callbackResult | 콜백 스코프 | 값으로 전달되는 지역 객체예요. 별도로 해제할 필요가 없어요 |
콜백의 pcBangStatus (StovePCBangStatus) | 콜백 스코프 | 값으로 전달되므로 해제할 필요가 없어요. 다만 Getter 가 돌려주는 const wchar_t* 는 이 객체 내부 버퍼를 가리키므로, 콜백 밖에서 쓸 문자열은 콜백 안에서 복사해 두어야 해요 |
Example
using namespace Stove::PCSDK::PCBang;
PCBang_CheckPCBangStatus([](CallbackResult callbackResult, StovePCBangStatus pcBangStatus)
{
if (callbackResult.GetResult().IsSuccessful())
{
PCBangPremium premiumStatus = pcBangStatus.GetPremiumStatus();
// 성공 시 로직을 구현해 주세요.
}
else
{
// 실패 시 로직을 구현해 주세요.
}
});
Notes
- 조회 결과는 StovePCBangStatus 로 전달돼요.
See Also
PCBang_GetVersion
종류 함수 · 모듈 PCBang · 버전 3.4.1
Description
PC방 기능의 버전 정보를 version 버퍼에 채워 돌려줘요.
Declaration
Result PCBang_GetVersion(__out wchar_t* version, uint32_t length);
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
version | wchar_t* | Y | 버전 정보를 전달받을 버퍼예요. 호출자가 할당해요. |
length | uint32_t | Y | version 버퍼의 길이예요. |
Returns
| Type | Description |
|---|---|
Result | 함수 호출 결과예요. result.IsSuccessful()이 true이면 성공이에요. |
Error Codes
이 함수는 BaseSDK의 버전 조회 결과를 그대로 반환해요. PCBang 고유의 결과코드는 없어요.
그 외 발생 가능한 결과 코드는 SDKResultCode 를 참조하세요.
Memory Management
| Object | Owner | Release |
|---|---|---|
version 버퍼 | 호출자 | 호출자가 할당한 버퍼이므로 호출자가 관리해요. |
Example
using namespace Stove::PCSDK::PCBang;
wchar_t version[64] = { 0 };
Result result = PCBang_GetVersion(version, 64);
if (result.IsSuccessful())
{
// 성공 시 로직을 구현해 주세요.
}
else
{
// 실패 시 로직을 구현해 주세요.
}
Notes
version버퍼는length보다 크거나 같아야 하며, 부족한 경우 결과가 실패할 수 있어요.- 이 함수는 릴리즈노트 기준 3.4.1 에 추가되었어요.
See Also
PCBang_Initialize
종류 함수 · 모듈 PCBang · 버전 3.0.2
Description
PC방 기능을 초기화해요.
SDK가 먼저 초기화되어 있어야 하며, 중복 초기화는 허용되지 않아요.
Declaration
Result PCBang_Initialize();
Parameters
없음
Returns
| Type | Description |
|---|---|
Result | 함수 호출 결과예요. result.IsSuccessful()이 true이면 성공이에요. |
Error Codes
Result::GetMethodCode()로 조회하면 Stove::PCSDK::PCBang::SDKMethod::INITIALIZE 값을 얻어요.
| Code | Name | Description | Show to User | In-Game Message |
|---|---|---|---|---|
| 0 | SUCCESS | 성공 | x | |
| 16 | BASE_NOT_INITIALIZED | SDK가 초기화되지 않았어요. Base_Initialize() 를 먼저 호출해야 해요. | x | |
| 18 | ALREADY_INITIALIZED | 이미 초기화되어 있어요. PCBang_UnInitialize() 호출 후 다시 시도해야 해요. | x | |
| 251 | PCSDK_DLL_NOT_FOUND | 초기화 과정에서 내부적으로 수행되는 버전 확인이 실패해 초기화가 완료되지 않았어요. | x | |
| 253 | UNMANAGED_EXCEPTION | SDK 내부에서 예기치 않은 예외가 발생했어요. | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
| 254 | MANAGED_EXCEPTION | SDK 내부에서 예기치 않은 예외가 발생했어요. | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
그 외 발생 가능한 결과 코드는 SDKResultCode 를 참조하세요.
Example
using namespace Stove::PCSDK::PCBang;
Result result = PCBang_Initialize();
if (result.IsSuccessful())
{
// 성공 시 로직을 구현해 주세요.
}
else
{
// 실패 시 로직을 구현해 주세요.
}
Notes
- 사용을 마쳤을 때는 PCBang_UnInitialize 를 호출해 자원을 해제해요.
- SDK가 초기화되지 않은 상태에서 호출하면
BASE_NOT_INITIALIZED가 반환될 수 있어요.
See Also
PCBang_UnInitialize
종류 함수 · 모듈 PCBang · 버전 3.0.2
Description
PC방 기능의 자원을 해제해요. PCBang_Initialize 와 짝을 이루는 함수예요.
Declaration
Result PCBang_UnInitialize();
Parameters
없음
Returns
| Type | Description |
|---|---|
Result | 함수 호출 결과예요. result.IsSuccessful()이 true이면 성공이에요. |
Error Codes
Result::GetMethodCode()로 조회하면 Stove::PCSDK::PCBang::SDKMethod::UNINITIALIZE 값을 얻어요.
| Code | Name | Description | Show to User | In-Game Message |
|---|---|---|---|---|
| 0 | SUCCESS | 성공 | x | |
| 17 | NOT_INITIALIZED | 아직 초기화되지 않았거나 이미 종료된 상태예요. | x | |
| 253 | UNMANAGED_EXCEPTION | SDK 내부에서 예기치 않은 예외가 발생했어요. | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
| 254 | MANAGED_EXCEPTION | SDK 내부에서 예기치 않은 예외가 발생했어요. | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
그 외 발생 가능한 결과 코드는 SDKResultCode 를 참조하세요.
Example
using namespace Stove::PCSDK::PCBang;
Result result = PCBang_UnInitialize();
if (result.IsSuccessful())
{
// 성공 시 로직을 구현해 주세요.
}
else
{
// 실패 시 로직을 구현해 주세요.
}
Notes
- PCBang_Initialize() 와 짝을 이루는 종료 함수예요.
See Also
PCBang_UserLogin
종류 함수 · 모듈 PCBang · 버전 3.0.2
Description
PC방 서비스에서 게임 유저를 로그인해요. 로그인 결과를 받는 콜백과, 4분마다 갱신된 혜택 정보를 받는 콜백을 함께 전달해요.
Declaration
void PCBang_UserLogin(OnPCBangUserLoginOnFinished onUserLoginFinished, OnPCBangRefreshUserBenefitsOnFinished onRefreshBenefitsFinished);
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
onUserLoginFinished | OnPCBangUserLoginOnFinished | Y | 로그인 결과를 전달받는 콜백 함수예요. |
onRefreshBenefitsFinished | OnPCBangRefreshUserBenefitsOnFinished | Y | 4분마다 갱신된 유저 혜택 정보를 전달받는 콜백 함수예요. |
Returns
없음
Callback
로그인 결과 콜백 — onUserLoginFinished
typedef void(__cdecl* OnPCBangUserLoginOnFinished)(CallbackResult callbackResult, StovePCBangUserLogin userLogin);
| Name | Type | Description |
|---|---|---|
callbackResult | CallbackResult | 콜백 결과 값이에요. |
userLogin | StovePCBangUserLogin | 로그인 결과 정보예요. |
콜백은 Base_RunCallback() 을 호출한 스레드에서 실행돼요. 로그인 처리가 끝나면 1회 호출돼요.
혜택 갱신 콜백 — onRefreshBenefitsFinished
typedef void(__cdecl* OnPCBangRefreshUserBenefitsOnFinished)(CallbackResult callbackResult, StovePCRefreshUserBenefits refreshUserBenefits);
| Name | Type | Description |
|---|---|---|
callbackResult | CallbackResult | 콜백 결과 값이에요. |
refreshUserBenefits | StovePCRefreshUserBenefits | 갱신된 유저 혜택 정보예요. |
콜백은 Base_RunCallback() 을 호출한 스레드에서 실행돼요. 4분마다 갱신된 유저 혜택 정보를 전달하며 반복 호출돼요.
Error Codes
Result::GetMethodCode()로 조회하면 로그인 결과 콜백은 Stove::PCSDK::PCBang::SDKMethod::USER_LOGIN, 혜택 갱신 콜백은 Stove::PCSDK::PCBang::SDKMethod::REFRESH_USER_BENEFITS 값을 얻어요.
로그인 결과 콜백 (onUserLoginFinished)
| Code | Name | Description | Show to User | In-Game Message |
|---|---|---|---|---|
| 0 | SUCCESS | 성공 | x | |
| 17 | NOT_INITIALIZED | SDK 또는 PC방 기능이 초기화되지 않았어요. PCBang_Initialize() 를 먼저 호출해야 해요. | x | |
| 22 | HTTP_ERROR | 로그인 요청의 네트워크 통신이 실패했어요. | O | 네트워크 연결이 원활하지 않습니다. 네트워크 상태를 확인하고 다시 실행해 주세요. [확인] |
| 23 | RESPONSE_ERROR | 서버 응답이 올바르지 않아요. | O | 네트워크 연결이 원활하지 않습니다. 네트워크 상태를 확인하고 다시 실행해 주세요. [확인] |
| 25 | RESPONSE_VALUE_IS_NULL | 서버 응답 값이 비어 있어요. | O | 네트워크 연결이 원활하지 않습니다. 네트워크 상태를 확인하고 다시 실행해 주세요. [확인] |
| 26 | RESPONSE_INVALID_VALUE_FORMAT | 서버 응답 값의 형식이 올바르지 않아요. | O | 네트워크 연결이 원활하지 않습니다. 네트워크 상태를 확인하고 다시 실행해 주세요. [확인] |
| 249 | NETWORK_TRANSPORT_ERROR | 네트워크 전송 과정에서 오류가 발생했어요. | x | |
| 253 | UNMANAGED_EXCEPTION | SDK 내부에서 예기치 않은 예외가 발생했어요. | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
| 254 | MANAGED_EXCEPTION | SDK 내부에서 예기치 않은 예외가 발생했어요. | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
혜택 갱신 콜백 (onRefreshBenefitsFinished)
| Code | Name | Description | Show to User | In-Game Message |
|---|---|---|---|---|
| 0 | SUCCESS | 성공 | x | |
| 17 | NOT_INITIALIZED | SDK 또는 PC방 기능이 초기화되지 않았어요. | x | |
| 22 | HTTP_ERROR | 혜택 갱신 요청의 네트워크 통신이 실패했어요. | O | 네트워크 연결이 원활하지 않습니다. 네트워크 상태를 확인하고 다시 실행해 주세요. [확인] |
| 23 | RESPONSE_ERROR | 서버 응답이 올바르지 않아요. | O | 네트워크 연결이 원활하지 않습니다. 네트워크 상태를 확인하고 다시 실행해 주세요. [확인] |
| 25 | RESPONSE_VALUE_IS_NULL | 서버 응답 값이 비어 있어요. | O | 네트워크 연결이 원활하지 않습니다. 네트워크 상태를 확인하고 다시 실행해 주세요. [확인] |
| 26 | RESPONSE_INVALID_VALUE_FORMAT | 서버 응답 값의 형식이 올바르지 않아요. | O | 네트워크 연결이 원활하지 않습니다. 네트워크 상태를 확인하고 다시 실행해 주세요. [확인] |
| 249 | NETWORK_TRANSPORT_ERROR | 네트워크 전송 과정에서 오류가 발생했어요. | x | |
| 253 | UNMANAGED_EXCEPTION | SDK 내부에서 예기치 않은 예외가 발생했어요. | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
| 254 | MANAGED_EXCEPTION | SDK 내부에서 예기치 않은 예외가 발생했어요. | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
그 외 발생 가능한 결과 코드는 SDKResultCode 를 참조하세요.
Memory Management
| Object | Owner | Release |
|---|---|---|
콜백의 callbackResult | 콜백 스코프 | 값으로 전달되는 지역 객체예요. 별도로 해제할 필요가 없어요 |
콜백의 userLogin (StovePCBangUserLogin) | 콜백 스코프 | 값으로 전달되므로 해제할 필요가 없어요. 다만 Getter 가 돌려주는 const wchar_t* 는 이 객체 내부 버퍼를 가리키므로, 콜백 밖에서 쓸 문자열은 콜백 안에서 복사해 두어야 해요 |
콜백의 refreshUserBenefits (StovePCRefreshUserBenefits) | 콜백 스코프 | 값으로 전달되므로 해제할 필요가 없어요. 다만 Getter 가 돌려주는 const wchar_t* 는 이 객체 내부 버퍼를 가리키므로, 콜백 밖에서 쓸 문자열은 콜백 안에서 복사해 두어야 해요 |
Example
using namespace Stove::PCSDK::PCBang;
PCBang_UserLogin(
[](CallbackResult callbackResult, StovePCBangUserLogin userLogin)
{
if (callbackResult.GetResult().IsSuccessful())
{
// 성공 시 로직을 구현해 주세요.
}
else
{
// 실패 시 로직을 구현해 주세요.
}
},
[](CallbackResult callbackResult, StovePCRefreshUserBenefits refreshUserBenefits)
{
if (callbackResult.GetResult().IsSuccessful())
{
// 갱신된 혜택 정보를 반영하는 로직을 구현해 주세요.
}
else
{
// 실패 시 로직을 구현해 주세요.
}
});
Notes
PCBANG_FREE(무료가맹) 상태에서도 혜택 갱신 콜백은 계속 호출돼요.- 로그아웃할 때는 PCBang_UserLogout 을 호출해요.
- 로그인 결과는 StovePCBangUserLogin, 혜택 갱신 결과는 StovePCRefreshUserBenefits 를 참조하세요.
See Also
PCBang_UserLogout
종류 함수 · 모듈 PCBang · 버전 3.0.2
Description
PC방 서비스에서 게임 유저를 로그아웃해요.
Declaration
void PCBang_UserLogout(OnPCBangUserLogoutOnFinished onFinished);
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
onFinished | OnPCBangUserLogoutOnFinished | Y | 로그아웃 결과를 전달받는 콜백 함수예요. |
Returns
없음
Callback
typedef void(__cdecl* OnPCBangUserLogoutOnFinished)(CallbackResult callbackResult);
| Name | Type | Description |
|---|---|---|
callbackResult | CallbackResult | 콜백 결과 값이에요. |
콜백은 Base_RunCallback() 을 호출한 스레드에서 실행돼요. 로그아웃 처리가 끝나면 1회 호출돼요.
Error Codes
Result::GetMethodCode()로 조회하면 Stove::PCSDK::PCBang::SDKMethod::USER_LOGOUT 값을 얻어요.
| Code | Name | Description | Show to User | In-Game Message |
|---|---|---|---|---|
| 0 | SUCCESS | 성공 | x | |
| 17 | NOT_INITIALIZED | SDK 또는 PC방 기능이 초기화되지 않았어요. PCBang_Initialize() 를 먼저 호출해야 해요. | x | |
| 22 | HTTP_ERROR | 로그아웃 요청의 네트워크 통신이 실패했어요. | O | 네트워크 연결이 원활하지 않습니다. 네트워크 상태를 확인하고 다시 실행해 주세요. [확인] |
| 23 | RESPONSE_ERROR | 서버 응답이 올바르지 않아요. | O | 네트워크 연결이 원활하지 않습니다. 네트워크 상태를 확인하고 다시 실행해 주세요. [확인] |
| 25 | RESPONSE_VALUE_IS_NULL | 서버 응답 값이 비어 있어요. | O | 네트워크 연결이 원활하지 않습니다. 네트워크 상태를 확인하고 다시 실행해 주세요. [확인] |
| 249 | NETWORK_TRANSPORT_ERROR | 네트워크 전송 과정에서 오류가 발생했어요. | x | |
| 253 | UNMANAGED_EXCEPTION | SDK 내부에서 예기치 않은 예외가 발생했어요. | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
| 254 | MANAGED_EXCEPTION | SDK 내부에서 예기치 않은 예외가 발생했어요. | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
그 외 발생 가능한 결과 코드는 SDKResultCode 를 참조하세요.
Example
using namespace Stove::PCSDK::PCBang;
PCBang_UserLogout([](CallbackResult callbackResult)
{
if (callbackResult.GetResult().IsSuccessful())
{
// 성공 시 로직을 구현해 주세요.
}
else
{
// 실패 시 로직을 구현해 주세요.
}
});
Notes
- PCBang_UserLogin() 으로 시작한 세션을 종료하는 함수예요.
See Also
PCBangPremium
종류 열거형 · 모듈 PCBang · 버전 3.0.0.4
Description
PC방의 프리미엄을 확인하는 열거형이에요. StovePCBangUserLogin, StovePCBangStatus, StovePCRefreshUserBenefits 의 유저 혜택 코드 필드 값으로 쓰예요.
이 값은 SDKResultCode 와 별개예요. PCBANG_ERROR는 조회 실패를 나타내는 값이고, 나머지 값은 PC방 가맹 상태를 나타내요.
Declaration
enum class PCBangPremium : int32_t
{
PCBANG_ERROR = -1,
PCBANG_PREMIUM = 1,
PCBANG_FREE = 2,
PCBANG_FREE_OTHER = 3,
};
Enum Values
| Code | Name | Description |
|---|---|---|
| -1 | PCBANG_ERROR | 에러 |
| — | (0) | 사용하지 않아요 (건너뜀) |
| 1 | PCBANG_PREMIUM | 프리미엄 |
| 2 | PCBANG_FREE | 무료가맹 |
| 3 | PCBANG_FREE_OTHER | 집(PC 방 이외) 무료가맹 |
Example
using namespace Stove::PCSDK::PCBang;
void __cdecl OnCheckPCBangStatusFinished(CallbackResult callbackResult, StovePCBangStatus pcBangStatus)
{
if (callbackResult.GetResult().IsSuccessful())
{
if (pcBangStatus.GetPremiumStatus() == PCBangPremium::PCBANG_FREE)
{
// PCBANG_FREE 상태에 대한 로직을 구현해 주세요.
}
}
}
Notes
PCBANG_FREE(무료가맹) 상태에서도 PCBang_UserLogin() 의 혜택 갱신 콜백은 계속 호출돼요.PCBANG_ERROR는 조회 실패를 나타내는 값으로, 결과 코드(SDKResultCode)와는 별개예요.
See Also
ProductTypeCode
종류 열거형 · 모듈 IAP · 버전 3.0.0.4
Description
상품의 아이템 유형을 나타내요. IAP_FetchProducts / IAP_FetchProductsEx 콜백으로 전달되는 StovePCProduct / StovePCProductEx 의 GetProductTypeCode() 로 확인할 수 있어요.
Declaration
enum class ProductTypeCode : uint32_t
{
NONE = 0,
INDIE_PACKAGE_GAME_ITEM = 1,
IN_GAME_ITEM = 2,
PACKAGE_ITEM = 3,
};
Enum Values
| Code | Name | Description |
|---|---|---|
| 0 | NONE | 없음 |
| 1 | INDIE_PACKAGE_GAME_ITEM | 인디 패키지 게임 아이템 |
| 2 | IN_GAME_ITEM | 인 게임 아이템 |
| 3 | PACKAGE_ITEM | 패키지 아이템 |
Example
using namespace Stove::PCSDK::IAP;
if (product.GetProductTypeCode() == ProductTypeCode::IN_GAME_ITEM)
{
// 인 게임 아이템 로직을 구현해 주세요.
}
Notes
- 이 값은 상품 조회 결과에서만 읽어와요. 요청 파라미터로는 사용하지 않아요.
See Also
PurchaseLimitTypeCode
종류 열거형 · 모듈 IAP · 버전 3.0.0.4
Description
상품의 구매 제한 방식을 나타내요. IAP_FetchProducts / IAP_FetchProductsEx 콜백으로 전달되는 StovePCProduct / StovePCProductEx 의 GetPurchaseLimitTypeCode() 로 확인할 수 있어요.
Declaration
enum class PurchaseLimitTypeCode : uint32_t
{
NONE = 0,
UNLIMITED = 1,
MEMBER = 2,
CHARACTER = 3
};
Enum Values
| Code | Name | Description |
|---|---|---|
| 0 | NONE | 제한 없음 |
| 1 | UNLIMITED | 무제한 |
| 2 | MEMBER | 회원별 제한 |
| 3 | CHARACTER | 캐릭터별 제한 |
Example
using namespace Stove::PCSDK::IAP;
if (product.GetPurchaseLimitTypeCode() == PurchaseLimitTypeCode::CHARACTER)
{
int32_t limitCount = product.GetPurchaseLimitCount();
}
Notes
- 값이
CHARACTER일 때GetPurchaseLimitCount()는 회원 별 제한 수량을 의미해요.
See Also
PurchaseProgress
종류 열거형 · 모듈 IAP · 버전 3.0.0.4
Description
IAP_StartPurchase / IAP_StartPurchaseEx 콜백으로 전달되는 StovePCPurchaseResult 의 GetPurchaseProgress() 로 확인할 수 있어요. 결제창을 호출자가 직접 띄워야 하는지 판단하는 데 사용해요.
Declaration
enum class PurchaseProgress : uint32_t
{
NONE = 0,
NEED_PAYMENT_WINDOW = 1,
NOT_NEED_PAYMENT_WINDOW = 2
};
Enum Values
| Code | Name | Description |
|---|---|---|
| 0 | NONE | 없음 |
| 1 | NEED_PAYMENT_WINDOW | 일회용 결제 URL로 결제 창 호출 필요 |
| 2 | NOT_NEED_PAYMENT_WINDOW | 0원 구매로 결제가 완료되었거나 Webview 사용으로 인해 URL 수동 호출 불필요 |
Example
using namespace Stove::PCSDK::IAP;
if (purchaseResult.GetPurchaseProgress() == PurchaseProgress::NEED_PAYMENT_WINDOW)
{
// purchaseResult.GetOneTimePaymentUrl() 로 결제 페이지를 열어야 합니다.
}
Notes
StovePCPurchaseOperation::DEFAULT로 구매를 시작한 경우 이 값을 확인해 결제창 호출 여부를 판단해요.
See Also
Result
종류 구조체 · 모듈 Base · 버전 3.0.0.4
Description
동기 API 호출 결과를 담는 구조체예요. 결과를 만들어 낸 SDK 이름, 메서드 코드, 결과 코드를 담고 있으며 IsSuccessful() 로 성공 여부를 확인해요.
Result 는 Stove::PCSDK 네임스페이스에 정의된 공통 타입이에요. Stove::PCSDK::Base 전용이 아니며, 결제 · 팝업 · PC방 등 다른 모든 기능의 동기 API 도 동일한 Result 타입을 반환값으로 사용해요. GetMethodCode() / GetResultCode() 로 얻은 값은 그 API 를 호출한 모듈의 SDKMethod / SDKResultCode (또는 공통 SDKResultCode) 값과 대응돼요. 값 타입이며 스택에 그대로 두고 쓰면 되고, 별도의 해제 호출이 필요하지 않아요.
Declaration
namespace Stove
{
namespace PCSDK
{
struct Result
{
public:
bool IsSuccessful() const;
const wchar_t* GetSDKName() const;
uint32_t GetMethodCode() const;
uint32_t GetResultCode() const;
};
}
}
Members
| Name | Type | Access | Description |
|---|---|---|---|
IsSuccessful() | bool | 읽기 | API 의 성공 여부예요. |
GetSDKName() | const wchar_t* | 읽기 | 이 결과를 만들어 낸 SDK 의 이름이에요. |
GetMethodCode() | uint32_t | 읽기 | 이 결과를 만들어 낸 함수의 Method Code 값이에요. |
GetResultCode() | uint32_t | 읽기 | 이 결과를 만들어 낸 함수의 Result Code 값이에요. |
Example
using namespace Stove::PCSDK;
using namespace Stove::PCSDK::Base;
Result result = Base_UnInitialize();
if (result.IsSuccessful())
{
// 성공 시 로직을 구현해 주세요.
}
else
{
// 실패 시 로직을 구현해 주세요.
}
Notes
Base_UnInitialize(),Base_GetUser()등 콜백을 쓰지 않는 동기 API 의 반환값으로 쓰예요. 비동기 API 의 콜백 결과는 CallbackResult 를 사용해요.GetMethodCode()는 SDKMethod 값과,GetResultCode()는 SDKResultCode 값과 대응돼요. 단, 이 두 열거형은 모듈마다 같은 이름으로 각각 존재하므로,GetSDKName()으로 확인한 모듈의 열거형과 비교해야 해요.
See Also
SDKMethod (Base)
종류 열거형 · 모듈 Base · 버전 3.0.0.4
Description
SDK 에서 사용하는 함수들의 Code 값이에요. Result 의 GetMethodCode() 가 반환하는 값이며, 어느 API 호출로 이 결과가 만들어졌는지 식별해요.
이 문서는 Stove::PCSDK::Base::SDKMethod 를 설명해요. 같은 이름의 SDKMethod 열거형이 BaseSDK 를 포함한 모듈마다 각각 존재하며, 값과 의미가 서로 달라요. 네임스페이스(Stove::PCSDK::<Module>::SDKMethod)로만 구분되므로 다른 모듈의 값과 섞어 쓰지 않아야 해요.
소스에
Internal method로 표시된 값은 SDK 내부 통신용이며 아래 표에서 제외했어요.
Declaration
namespace Stove
{
namespace PCSDK
{
namespace Base
{
enum class SDKMethod : uint32_t
{
INITIALIZE = 1U,
UNINITIALIZE = 2U,
// ... 이하 Values 표 참조
VIETNAM_OVER_IMMERSION_NOTIFICATION = 80U,
};
}
}
}
Enum Values
| Code | Name | Description |
|---|---|---|
| 1 | INITIALIZE | Base_Initialize |
| 2 | UNINITIALIZE | Base_UnInitialize |
| 5 | GET_VERSION | Base_GetVersion |
| — | 6 ~ 63 | 사용하지 않아요 (내부 전용 값 및 예약 구간) |
| 64 | GET_ACCESS_TOKEN | Base_GetAccessToken |
| 65 | ACCESS_TOKEN_RENEWED | Base_AccessTokenRenewed |
| 66 | GET_USER | Base_GetUser |
| 67 | SET_LANGUAGE | Base_SetLanguage |
| 68 | OVER_IMMERSION_NOTIFICATION | Base_OverImmersionNotification |
| 69 | SHUTDOWN_NOTIFICATION | Base_ShutdownNotification |
| 70 | LOG_ADD | Base_LogAdd (Deprecated) — 현재 공개된 BaseSDK.h 에는 대응하는 함수가 없어요. |
| 71 | GET_TRACE_HINT | Base_GetTraceHint |
| 72 | SET_GAME_PROFILE | Base_SetGameProfile |
| 73 | GET_GDS | Base_GetGds |
| 74 | GET_SIGNIN | Base_GetSignin |
| 75 | RESTART_APP_IF_NECESSARY | Base_RestartAppIfNecessary |
| 76 | RESTART_APP_IF_NECESSARY_ASYNC | Base_RestartAppIfNecessaryAsync |
| 77 | OPEN_EXTERNAL_URL | Base_OpenExternalUrl |
| 78 | GET_CLOUD_SAVING_PATH | Base_GetCloudSavingPath — 스토어인디 전용 |
| 79 | VIETNAM_AGE_RATING_NOTIFICATION | Base_VietnamAgeRatingNotification |
| 80 | VIETNAM_OVER_IMMERSION_NOTIFICATION | Base_VietnamOverimmersionNotification |
| 81 | CLOSE_ALL_POPUPS | 열려 있는 모든 팝업을 닫아요. 단일 바이너리 통합으로 IAP · View 의 팝업 닫기가 BaseSDK 로 합쳐지면서 이 코드로 옮겨졌어요 |
| — | 82 ~ 95 | 사용하지 않아요 (예약 구간) |
내부 전용 값(INTERNAL_SEND_81PLUG=3, INTERNAL_UPDATE_81PLUG=4, INTERNAL_SEND_AMPLITUDE=6, 96 ~ 121 구간의 값 26개)은 SDK 내부 전용이므로 위 표에서 제외했어요.
Example
using namespace Stove::PCSDK;
using namespace Stove::PCSDK::Base;
Result result = Base_UnInitialize();
if (result.GetMethodCode() == static_cast<uint32_t>(SDKMethod::UNINITIALIZE))
{
// Base_UnInitialize 호출 결과입니다.
}
Notes
Stove::PCSDK::Base::SDKMethod이며, 다른 모듈에도 각각 별도의SDKMethod열거형이 있어요. 값이 모듈마다 겹치므로 반드시 모듈을 구분해서 비교해야 해요.- 70번(
LOG_ADD)은 현재 공개 헤더에 대응 함수가 없는 값이에요. 코드 값 자체는 하위 호환을 위해 남아 있어요.
See Also
SDKMethod (IAP)
종류 열거형 · 모듈 IAP · 버전 3.0.0.4
Description
이 문서의 SDKMethod 는 Stove::PCSDK::IAP::SDKMethod 이에요. SDK, 팝업 등 다른 모듈에도 같은 이름의 열거형이 있으나 서로 다른 타입이므로 혼동하지 않도록 주의해요.
Result::GetMethodCode() / CallbackResult::GetResult().GetMethodCode() 로 반환되는 값이며, 어떤 API 호출에 대한 결과인지 식별하는 데 사용해요.
1 ~ 5는 결제 기능의 공통 동작(초기화 · 버전 조회)에, 80 ~ 89는 결제 기능 고유 동작에 사용되는 번호예요. 그 사이 번호(6 ~ 79)는 이 기능에서 사용하지 않는 예약 구간이에요.
Declaration
enum class SDKMethod : uint32_t
{
INITIALIZE = 1U,
// ... 이하 Values 표 참조
WITHDRAW_GAME = 89U,
};
Enum Values
| Code | Name | Description |
|---|---|---|
| 1 | INITIALIZE | IAP_Initialize |
| 2 | UNINITIALIZE | IAP_UnInitialize |
| 5 | GET_VERSION | IAP_GetVersion |
| 80 | FETCH_SHOP_CATEGORIES | IAP_FetchShopCategories |
| 81 | FETCH_PRODUCTS | IAP_FetchProducts |
| 82 | START_PURCHASE | IAP_StartPurchase |
| 83 | CONFIRM_PURCHASE | IAP_ConfirmPurchase |
| 84 | FETCH_INVENTORY | IAP_FetchInventory |
| 85 | FETCH_TERMS_AGREEMENT | IAP_FetchTermsAgreement |
| 86 | START_PAYMENT | IAP_StartPayment |
| 87 | FETCH_VOIDED_PURCHASES | IAP_FetchVoidedPurchases |
| 88 | CLOSE_ALL_POPUPS | IAP_CloseAllPopups |
| 89 | WITHDRAW_GAME | IAP_WithdrawGame — 로스트아크모바일 전용 |
값 3(INTERNAL_SEND_81PLUG) · 4(INTERNAL_UPDATE_81PLUG)는 내부 전용(Deprecated)이라 문서에 포함하지 않아요.
Ex 접미사 함수(IAP_FetchProductsEx, IAP_StartPurchaseEx, IAP_FetchTermsAgreementEx, IAP_StartPaymentEx, IAP_FetchVoidedPurchasesEx, IAP_InitializeWithWndInfo)에 대응하는 별도 코드는 소스에 정의되어 있지 않아요. 기본형과 같은 코드를 공유하는 것으로 보이나 소스에 명시적인 근거는 없어요.
Example
using namespace Stove::PCSDK::IAP;
Result result = IAP_Initialize(L"YOUR_SHOP_KEY");
if (result.GetMethodCode() == static_cast<uint32_t>(SDKMethod::INITIALIZE))
{
// IAP_Initialize 호출에 대한 결과입니다.
}
Notes
- 같은 이름의
SDKMethod가 SDK, 팝업 등 다른 모듈에도 존재해요. 이 문서는 결제 기능의SDKMethod만 다뤄요. - 결과 코드(SDKResultCode)와 번호 범위가 겹치는 것처럼 보이지만(80~89) 서로 다른 열거형이므로 혼동하지 않도록 주의해요.
See Also
SDKMethod (Log)
종류 열거형 · 모듈 Log · 버전 3.4.1
Description
로그 기능에서 사용하는 함수들의 Method Code 예요. 함수 호출 결과인 Result::GetMethodCode() (또는 콜백의 CallbackResult.GetResult().GetMethodCode()) 로 조회한 값과 대응돼요.
이 문서는
Stove::PCSDK::Log네임스페이스의SDKMethod이에요.Stove::PCSDK::PCBang네임스페이스에도 같은 이름의 열거형이 별도로 존재하며 값 구성이 달라요. 실제로 어느 모듈의 값인지는Result::GetSDKName()으로 확인해요.
Declaration
enum class SDKMethod : uint32_t
{
INITIALIZE = 1U,
UNINITIALIZE = 2U,
// ... 이하 Values 표 참조
LOG_SEND = 80U
};
Enum Values
| Code | Name | Description |
|---|---|---|
| 1 | INITIALIZE | Log_Initialize |
| 2 | UNINITIALIZE | Log_UnInitialize |
| 5 | GET_VERSION | Log_GetVersion |
| — | (6–79) | 사용하지 않아요 (건너뜀) |
| 80 | LOG_SEND | Log_Send |
내부 전용 값(INTERNAL_SEND_81PLUG=3, INTERNAL_UPDATE_81PLUG=4)은 문서에 포함하지 않아요.
Example
using namespace Stove::PCSDK;
using namespace Stove::PCSDK::Log;
Result result = Log_Initialize();
if (result.GetMethodCode() == static_cast<uint32_t>(SDKMethod::INITIALIZE))
{
// 이 결과가 Log_Initialize 호출에 대한 것인지 확인하는 로직을 구현해 주세요.
}
Notes
Stove::PCSDK::PCBang::SDKMethod와 이름이 같지만 별개의 열거형이에요.
See Also
SDKMethod (PCBang)
종류 열거형 · 모듈 PCBang · 버전 3.0.0.4
Description
PC방 기능에서 사용하는 함수들의 Method Code 예요. 함수 호출 결과인 Result::GetMethodCode() (또는 콜백의 CallbackResult.GetResult().GetMethodCode()) 로 조회한 값과 대응돼요.
이 문서는
Stove::PCSDK::PCBang네임스페이스의SDKMethod이에요.Stove::PCSDK::Log네임스페이스에도 같은 이름의 열거형이 별도로 존재하며 값 구성이 달라요. 실제로 어느 모듈의 값인지는Result::GetSDKName()으로 확인해요.
Declaration
enum class SDKMethod : uint32_t
{
INITIALIZE = 1U,
UNINITIALIZE = 2U,
// ... 이하 Values 표 참조
REFRESH_USER_BENEFITS = 83U,
};
Enum Values
| Code | Name | Description |
|---|---|---|
| 1 | INITIALIZE | PCBang_Initialize |
| 2 | UNINITIALIZE | PCBang_UnInitialize |
| 5 | GET_VERSION | PCBang_GetVersion |
| — | (6–79) | 사용하지 않아요 (건너뜀) |
| 80 | USER_LOGIN | PCBang_UserLogin 의 로그인 결과 콜백 |
| 81 | USER_LOGOUT | PCBang_UserLogout |
| 82 | CHECK_PCBANG_STATUS | PCBang_CheckPCBangStatus |
| 83 | REFRESH_USER_BENEFITS | PCBang_UserLogin 의 혜택 갱신 콜백 |
내부 전용 값(INTERNAL_SEND_81PLUG=3, INTERNAL_UPDATE_81PLUG=4)은 문서에 포함하지 않아요.
Example
using namespace Stove::PCSDK;
using namespace Stove::PCSDK::PCBang;
Result result = PCBang_Initialize();
if (result.GetMethodCode() == static_cast<uint32_t>(SDKMethod::INITIALIZE))
{
// 이 결과가 PCBang_Initialize 호출에 대한 것인지 확인하는 로직을 구현해 주세요.
}
Notes
REFRESH_USER_BENEFITS(83)은 소스에 별도의PCBang_RefreshUserBenefits함수가 없고, PCBang_UserLogin() 의 혜택 갱신 콜백에 대응해요.Stove::PCSDK::Log::SDKMethod와 이름이 같지만 별개의 열거형이에요.
See Also
SDKMethod (View)
종류 열거형 · 모듈 View · 버전 3.0.0.4
Description
Result::GetMethodCode() / CallbackResult::result.GetMethodCode()로 조회하며, 어떤 팝업 API 함수가 해당 결과를 만들었는지 식별할 때 사용해요.
이 문서는
Stove::PCSDK::View::SDKMethod를 다뤄요.SDKMethod라는 이름의 열거형은 BaseSDK, IAPSDK 등 다른 모듈에도 각각 존재하며, 값의 의미는 네임스페이스(모듈)마다 달라요.
Declaration
enum class SDKMethod : uint32_t
{
INITIALIZE = 1U,
UNINITIALIZE = 2U,
// ... 이하 Values 표 참조
FETCH_WEB_OPEN_KEY = 162U,
};
Enum Values
| Code | Name | Description |
|---|---|---|
| 1 | INITIALIZE | View_Initialize / View_InitializeWithWndInfo |
| 2 | UNINITIALIZE | View_UnInitialize |
| 5 | GET_VERSION | 설계상 View_GetVersion 대응 코드예요. 다만 현재 구현은 BaseSDK의 버전 조회 함수를 그대로 호출하므로, 실제 반환값의 MethodCode는 이 값과 다를 수 있어요 |
| 81 | AUTO_POPUP | View_AutoPopup / View_AutoPopupEx |
| 83 | MANUAL_POPUP | View_ManualPopup / View_ManualPopupEx |
| 85 | NEWS_POPUP | View_NewsPopup / View_NewsPopupEx |
| 87 | COUPON_POPUP | View_CouponPopup / View_CouponPopupEx |
| — | 89 | 사용하지 않아요 (COMMUNITY_POPUP, 대응하는 공개 함수가 없는 폐기된 번호) |
| 91 | VERIFY_IDENTIFICATION_POPUP | View_VerifyIdentificationPopup |
| 160 | SET_POPUP_DISALLOWED | View_SetPopupDisallowed |
| 161 | CLOSE_ALL_POPUPS | View_CloseAllPopups |
| 162 | FETCH_WEB_OPEN_KEY | View_FetchWebOpenKey |
내부 전용 값(3, 4, 80, 82, 84, 86, 88, 90, 92, 93, 94, 95, 96, 97)은 문서에 포함하지 않아요.
Example
CallbackResult callbackResult = /* 콜백에서 전달받은 값 */;
if (callbackResult.result.GetMethodCode() == (uint32_t)SDKMethod::MANUAL_POPUP)
{
// View_ManualPopup 또는 View_ManualPopupEx 호출의 결과인 경우 로직을 구현해 주세요.
}
Notes
- 1~5 구간은 Lifecycle(초기화/해제/버전 조회) 공통 코드이며, 80 이상 구간은 팝업별 코드예요.
- 81~93 구간에서 팝업 API는 홀수 번호를 사용하며, 짝수 번호는 내부 fetch 메서드용으로 예약되어 있어요.
View_AutoPopup과View_AutoPopupEx(및 Manual/News/Coupon의 Ex 짝)는 각각 동일한 MethodCode를 공유해요.- 같은 팝업이라도 신규 인터페이스와 값이 달라요. 신규 인터페이스(
Stove_AutoPopup등)는EStoveViewMethodCode의1000번대 값을 돌려줘요. 구 인터페이스는 이 문서의 값을 그대로 유지해요. 두 벌을 함께 쓰는 동안에는 로그 집계 기준을 벌마다 나누어 두세요.
See Also
- SDKResultCode
- View_AutoPopup
- View_ManualPopup
- View_NewsPopup
- View_CouponPopup
- View_VerifyIdentificationPopup
- View_SetPopupDisallowed
- View_CloseAllPopups
SDKResultCode (Base)
종류 결과코드 · 모듈 Base · 버전 3.0.0.4
Description
SDK 에서 사용하는 함수의 Result Code 값이에요. Result 의 GetResultCode(), CallbackResult 의 GetResult().GetResultCode() 가 반환하는 값이에요. 0(SUCCESS)이면 성공이고, 그 외 값은 실패 원인을 나타내요.
이 문서는 Stove::PCSDK::Base::SDKResultCode 를 설명해요. 같은 이름의 SDKResultCode 열거형이 BaseSDK 를 포함한 모듈마다 각각 존재하며, 값과 의미가 서로 달라요. 네임스페이스(Stove::PCSDK::<Module>::SDKResultCode)로만 구분되므로 다른 모듈의 값과 섞어 쓰지 않아야 해요.
Declaration
namespace Stove
{
namespace PCSDK
{
namespace Base
{
enum class SDKResultCode : uint32_t
{
SUCCESS = 0U,
FAIL = 1U,
// ... 이하 Values 표 참조
UNKNOWN_ERROR = 255U,
};
}
}
}
Enum Values
| Code | Name | Description | Show to User | In-Game Message |
|---|---|---|---|---|
| 0 | SUCCESS | 성공 | x | |
| 1 | FAIL | 실패예요. 실패 원인을 확인한 후 다시 시도해야 해요. | x | |
| 2 | INVALID_CONFIG | Config 파일을 찾을 수 없어요. 설정 파일 경로를 확인해야 해요. | x | |
| 3 | INVALID_LOG_LEVEL | 로그 레벨의 값이 유효하지 않아요. 호출부의 값을 확인해야 해요. | x | |
| 4 | INVALID_LOG_PATH | 로그 경로가 유효하지 않아요. 호출부의 값을 확인해야 해요. | x | |
| 5 | INVALID_PARAM | 잘못된 매개변수가 입력되었어요. 호출부를 수정해야 해요. | x | |
| — | 6 ~ 15 | 사용하지 않아요 (예약 구간) | x | |
| 16 | BASE_NOT_INITIALIZED | SDK 가 Initialize 되지 않았어요. Base_Initialize() 를 먼저 호출해야 해요. | x | |
| 17 | NOT_INITIALIZED | 초기화가 되지 않았어요. 초기화를 먼저 호출해야 해요. | x | |
| 18 | ALREADY_INITIALIZED | 이미 초기화가 되었어요. 중복 초기화 호출을 제거해야 해요. | x | |
| 19 | INVALID_ACCESS_TOKEN | AccessToken 을 찾을 수 없어요. 재로그인 또는 토큰 갱신이 필요해요. | O | 로그인 세션이 만료되었습니다. 게임 종료 후 다시 실행해 주세요. [확인] |
| 20 | NULL_TOKEN_ENTITY | Token 객체를 찾을 수 없어요. 재시도하고, 반복되면 문의해야 해요. | x | |
| 21 | NULL_ENTITY | 현재 객체를 찾을 수 없어요. 재시도하고, 반복되면 문의해야 해요. | x | |
| 22 | HTTP_ERROR | Http 통신 에러가 발생했어요. 네트워크 상태를 확인한 후 다시 시도해야 해요. | O | 네트워크 연결이 원활하지 않습니다. 네트워크 상태를 확인하고 다시 실행해 주세요. [확인] |
| 23 | RESPONSE_ERROR | Http API Response 에러가 발생했어요. 재시도하고, 반복되면 문의해야 해요. | O | 네트워크 연결이 원활하지 않습니다. 네트워크 상태를 확인하고 다시 실행해 주세요. [확인] |
| 24 | RESPONSE_INVALID_CODE | Http API Response Code 를 찾을 수 없어요. 재시도하고, 반복되면 문의해야 해요. | O | 네트워크 연결이 원활하지 않습니다. 네트워크 상태를 확인하고 다시 실행해 주세요. [확인] |
| 25 | RESPONSE_VALUE_IS_NULL | Http API Response 값이 비어있어요. 재시도하고, 반복되면 문의해야 해요. | O | 네트워크 연결이 원활하지 않습니다. 네트워크 상태를 확인하고 다시 실행해 주세요. [확인] |
| 26 | RESPONSE_INVALID_VALUE_FORMAT | Http API Response 포멧이 틀려요. 재시도하고, 반복되면 문의해야 해요. | O | 네트워크 연결이 원활하지 않습니다. 네트워크 상태를 확인하고 다시 실행해 주세요. [확인] |
| 27 | LOG_81PLUG_ERROR | 사용하지 않는 코드예요. | x | |
| 28 | UPDATE_81PLUG_FEED_ERROR | 사용하지 않는 코드예요. | x | |
| 29 | ASYNC_OPERATION_IN_PROGRESS | 현재 비동기 작업이 진행중이에요. 진행 중인 작업이 끝난 후 다시 시도해야 해요. | x | |
| 30 | BASE_UNINITIALIZED | SDK 를 Uninitialize 하였어요. 다시 초기화해야 해요. | x | |
| 31 | NOT_SUPPORTED_COUNTRY | 현재 국가에서는 지원되지 않는 기능이에요. | x | |
| 32 | AMPLITUDE_ERROR | Amplitude 전송에 실패하였어요. 재시도하고, 반복되면 문의해야 해요. | x | |
| — | 33 ~ 79 | 사용하지 않아요 (예약 구간) | x | |
| 80 | LANGUAGE_NOT_SET | 언어가 설정되지 않았어요. | x | |
| 81 | EMPTY_TRANSLATED_STRING | 번역할 문자열이 없어요. | x | |
| 82 | NOT_FOUND_REQUIRED_INFORMATION | 필수 정보가 없어요. 호출부의 값을 확인해야 해요. | x | |
| 83 | INVALID_GDS_INFO | GDS 정보가 없어요. | x | |
| 84 | NEED_STOVE_LAUNCHER | 런처의 실행이 필요해요. | O | 게임이 스토브 PC 클라이언트를 통해 실행되지 않아 종료됩니다.클라이언트에서 다시 게임을 실행해주세요.클라이언트 미설치 시 스토브 홈페이지에서 설치해주세요.[확인] |
| 85 | LAUNCHER_FAILED_CREATE_REQUIRED | 런처에서 필수값 생성을 실패하였어요. | x | |
| 86 | RENEW_TOKEN_MAX_RETRY_COUNT_EXCEEDED | Token 갱신 시도 횟수를 초과했어요. 재로그인이 필요해요. | O | 네트워크 연결이 원활하지 않습니다. 네트워크 상태를 확인하고 다시 실행해 주세요. [확인] |
| 87 | IPC_CONNECT_FAILED | IPC 통신 연결을 실패하였어요. | O | 게임이 스토브 PC 클라이언트를 통해 실행되지 않아 종료됩니다.클라이언트에서 다시 게임을 실행해주세요.클라이언트 미설치 시 스토브 홈페이지에서 설치해주세요.[확인] |
| 88 | IPC_AES_KEY_NOT_RECEIVED | IPC 통신에서 AES 암호키를 받지 못했어요. | O | 게임이 스토브 PC 클라이언트를 통해 실행되지 않아 종료됩니다.클라이언트에서 다시 게임을 실행해주세요.클라이언트 미설치 시 스토브 홈페이지에서 설치해주세요.[확인] |
| 89 | IPC_TIMEOUT | IPC 통신에서 Timeout 이 발생하였어요. | O | 게임이 스토브 PC 클라이언트를 통해 실행되지 않아 종료됩니다.클라이언트에서 다시 게임을 실행해주세요.클라이언트 미설치 시 스토브 홈페이지에서 설치해주세요.[확인] |
| 90 | CLOSE_ALL_POPUPS_FAILED | 팝업을 모두 닫는 데 실패했어요. 다시 시도하거나 팝업 상태를 확인해야 해요. | x | |
| 91 | LOCAL_DB_CREATE_WORKING_DIRECTORY_FAILED | 로컬 DB 작업 폴더를 만들지 못했어요. 실행 계정의 폴더 쓰기 권한을 확인해야 해요. | x | |
| 92 | LOCAL_DB_CONNECT_FAILED | 로컬 DB 연결에 실패했어요. | x | |
| 93 | LOCAL_DB_CREATE_TABLE_FAILED | 로컬 DB 테이블을 만들지 못했어요. | x | |
| — | 94 ~ 248 | 사용하지 않아요 (예약 구간) | x | |
| 249 | NETWORK_TRANSPORT_ERROR | 네트워크 전송 에러가 발생하였어요. (externalError 에 HTTP backend native 에러 코드 전달) 네트워크 상태를 확인하고 GetExternalError() 로 상세 원인을 확인해야 해요. | x | |
| 250 | JSON_EXCEPTION | Http API Response Json 예외가 발생하였어요. | O | 네트워크 연결이 원활하지 않습니다. 네트워크 상태를 확인하고 다시 실행해 주세요. [확인] |
| 251 | PCSDK_DLL_NOT_FOUND | PC SDK DLL 을 찾지 못했어요. 설치 경로와 배포 파일을 확인해야 해요. | x | |
| 252 | NOT_IMPLEMENTED | 해당 내용은 구현되지 않았어요. | x | |
| 253 | UNMANAGED_EXCEPTION | 관리되지 않는 예외가 발생하였어요. | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
| 254 | MANAGED_EXCEPTION | 관리되는 예외가 발생하였어요. | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
| 255 | UNKNOWN_ERROR | 알 수 없는 에러가 발생하였어요. | x |
아래 코드를 받으면 반드시 게임을 종료해야 해요. 정상 진행이 불가능한 상태예요.
19INVALID_ACCESS_TOKEN— 로그인 세션이 만료되어 게임 종료 후 다시 실행해야 해요84NEED_STOVE_LAUNCHER— 게임 종료 후 재실행이 필요해요87IPC_CONNECT_FAILED— 게임 종료 후 재실행이 필요해요88IPC_AES_KEY_NOT_RECEIVED— 게임 종료 후 재실행이 필요해요89IPC_TIMEOUT— 게임 종료 후 재실행이 필요해요스토브 PC클라이언트를 실행하지 않고 게임 실행 파일을 직접 실행하면 87(
IPC_CONNECT_FAILED) 또는 89(IPC_TIMEOUT)가 발생해요. 이 경우 게임을 종료하면 런처가 자동으로 실행돼요.
Example
using namespace Stove::PCSDK;
using namespace Stove::PCSDK::Base;
StovePCUser user;
Result result = Base_GetUser(&user);
if (result.IsSuccessful())
{
// 성공 시 로직을 구현해 주세요.
}
else if (result.GetResultCode() == static_cast<uint32_t>(SDKResultCode::BASE_NOT_INITIALIZED))
{
// Base_Initialize 를 먼저 호출해 주세요.
}
else
{
// 그 외 실패 시 로직을 구현해 주세요.
}
Notes
Stove::PCSDK::Base::SDKResultCode이며, 다른 모듈에도 각각 별도의SDKResultCode열거형이 있어요. 값이 모듈마다 겹치므로(예: 다른 모듈에도 코드 5, 16 등이 존재) 모듈을 반드시 구분해서 비교해야 해요.- 27(
LOG_81PLUG_ERROR), 28(UPDATE_81PLUG_FEED_ERROR) 은 폐기되어 사용하지 않는 코드예요. IsSuccessful()로 성공 여부만 먼저 확인하고, 실패인 경우에만GetResultCode()값으로 분기하는 것을 권장해요.
See Also
SDKResultCode (IAP)
종류 결과코드 · 모듈 IAP · 버전 3.0.0.4
Description
이 문서의 SDKResultCode 는 Stove::PCSDK::IAP::SDKResultCode 예요. SDK, 팝업 등 다른 모듈에도 같은 이름의 열거형이 있으나 서로 다른 타입이므로 혼동하지 않도록 주의해요.
Result::GetResultCode() / CallbackResult::GetResult().GetResultCode() 로 반환되는 값이에요. 0(SUCCESS)이면 성공이에요.
Declaration
enum class SDKResultCode : uint32_t
{
SUCCESS = 0U,
// ... 이하 Values 표 참조
UNKNOWN_ERROR = 255U,
};
Enum Values
| Code | Name | Description | Show to User | In-Game Message |
|---|---|---|---|---|
| 0 | SUCCESS | 성공 | x | |
| 1 | FAIL | 실패 | x | |
| 2 | INVALID_CONFIG | Config 파일을 찾을 수 없어요 | x | |
| 3 | INVALID_LOG_LEVEL | 로그 레벨의 값이 유효하지 않아요 | x | |
| 4 | INVALID_LOG_PATH | 로그 경로가 유효하지 않아요 | x | |
| 5 | INVALID_PARAM | 잘못된 매개변수가 입력되었어요 | x | |
| — | 6~15 | 사용하지 않아요 (예약 구간) | x | |
| 16 | BASE_NOT_INITIALIZED | SDK가 초기화되지 않았어요 | x | |
| 17 | NOT_INITIALIZED | 초기화가 되지 않았어요 | x | |
| 18 | ALREADY_INITIALIZED | 이미 초기화가 되었어요 | x | |
| 19 | INVALID_ACCESS_TOKEN | AccessToken을 찾을 수 없어요 | O | 로그인 세션이 만료되었습니다. 게임 종료 후 다시 실행해 주세요. [확인] |
| 20 | NULL_TOKEN_ENTITY | Token 객체를 찾을 수 없어요 | x | |
| 21 | NULL_ENTITY | 현재 객체를 찾을 수 없어요 | x | |
| 22 | HTTP_ERROR | Http 통신 에러가 발생했어요 | O | 네트워크 연결이 원활하지 않습니다. 네트워크 상태를 확인하고 다시 실행해 주세요. [확인] |
| 23 | RESPONSE_ERROR | Http API Response 에러가 발생했어요 | O | 네트워크 연결이 원활하지 않습니다. 네트워크 상태를 확인하고 다시 실행해 주세요. [확인] |
| 24 | RESPONSE_INVALID_CODE | Http API Response Code를 찾을 수 없어요 | O | 네트워크 연결이 원활하지 않습니다. 네트워크 상태를 확인하고 다시 실행해 주세요. [확인] |
| 25 | RESPONSE_VALUE_IS_NULL | Http API Response 값이 비어있어요 | O | 네트워크 연결이 원활하지 않습니다. 네트워크 상태를 확인하고 다시 실행해 주세요. [확인] |
| 26 | RESPONSE_INVALID_VALUE_FORMAT | Http API Response 포멧이 틀려요 | O | 네트워크 연결이 원활하지 않습니다. 네트워크 상태를 확인하고 다시 실행해 주세요. [확인] |
| 27 | LOG_81PLUG_ERROR | 사용하지 않는 코드예요 | x | |
| 28 | UPDATE_81PLUG_FEED_ERROR | 사용하지 않는 코드예요 | x | |
| 29 | ASYNC_OPERATION_IN_PROGRESS | 현재 비동기 작업이 진행중이에요 | x | |
| 30 | BASE_UNINITIALIZED | SDK를 Uninitialize하였어요 | x | |
| 31 | NOT_SUPPORTED_COUNTRY | 현재 국가에서는 지원되지 않는 기능이에요 | x | |
| — | 32 | 사용하지 않아요 (건너뛴 번호) | x | |
| 33 | POPUP_NOT_CREATED | 팝업(웹뷰)이 생성되지 않은 채 작업이 종료되었어요. onDestroy 콜백으로 내부 정리 용도로만 전달되는 코드이며, Cpp 래퍼는 이 코드를 가로채 사용자 onDestroy 를 호출하지 않아요 | x | |
| — | 34~79 | 사용하지 않아요 (예약 구간) | x | |
| 80 | VIEWUI_NOT_INITIALIZED | ViewUI가 초기화되지 않았어요 | x | |
| 81 | VIEWUI_UNINIT_FAILED | ViewUI 정리에 실패했어요 | x | |
| 82 | WEBVIEW_CREATE_FAIL | 웹뷰 생성에 실패했어요 | x | |
| 83 | WEBVIEW_LOAD_URL_FAIL | URL 불러오기를 실패하였어요 | x | |
| 84 | WEBVIEW_CLOSED_BEFORE_PURCHASE | IAP_StartPurchase API 실행 도중 아이템 구매가 완료되지 않은 채 Webview가 종료되었어요 (WITH_WEBVIEW_AND_CONFIRM_RESULT 옵션 한정) | O | 구매가 정상적으로 완료되지 않았습니다. 다시 시도해 주세요. [확인] |
| 85 | PARAMETER_LENGTH_EXCEEDED | IAP_StartPurchase API 매개변수의 길이 제한을 초과했어요 (serviceTxnNo 는 50자, extraData 는 500자 제한) | O | 결제 정보가 유효하지 않아 결제를 진행할 수 없습니다. 다시 시도해 주세요. [확인] |
| 86 | INVALID_JSON_STRING | 문자열이 JSON 형식이 아니에요 | O | 결제 정보가 유효하지 않아 결제를 진행할 수 없습니다. 다시 시도해 주세요. [확인] |
| 87 | WEBVIEW_CREATE_COOKIE_FAIL | Cookie 생성에 실패했어요 | O | 구매를 위해서는 약관 동의가 필요합니다. 현재 약관 동의 화면을 불러오지 못했습니다. 다시 시도해 주세요. [확인] |
| 88 | INVALID_ORDER_PRODUCT_INFORMATION | 구매하려는 상품의 금액이나 갯수가 유효한 값이 아니에요 | O | 결제 정보가 유효하지 않아 결제를 진행할 수 없습니다. 다시 시도해 주세요. [확인] |
| 89 | WEBVIEW_CLOSE_ALL_FAIL | Webview 일괄 닫기에 실패했어요 | x | |
| 90 | WEBVIEW_CLOSE_FAIL | Webview 닫기에 실패했어요 | x | |
| — | 91~250 | 사용하지 않아요 (예약 구간) | x | |
| 251 | PCSDK_DLL_NOT_FOUND | PC SDK DLL을 찾지 못했어요 | x | |
| 252 | NOT_IMPLEMENTED | 해당 내용은 구현되지 않았어요 | x | |
| 253 | UNMANAGED_EXCEPTION | 관리되지 않는 예외가 발생하였어요 | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
| 254 | MANAGED_EXCEPTION | 관리되는 예외가 발생하였어요 | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
| 255 | UNKNOWN_ERROR | 알 수 없는 에러가 발생하였어요 | x |
아래 코드를 받으면 반드시 게임을 종료해야 해요. 정상 진행이 불가능한 상태예요.
19INVALID_ACCESS_TOKEN— 로그인 세션이 만료되어 게임 종료 후 다시 실행해야 해요
Example
using namespace Stove::PCSDK::IAP;
Result result = IAP_Initialize(L"YOUR_SHOP_KEY");
if (result.GetResultCode() == static_cast<uint32_t>(SDKResultCode::ALREADY_INITIALIZED))
{
// 이미 초기화된 경우의 로직을 구현해 주세요.
}
Notes
- 같은 이름의
SDKResultCode가 SDK, 팝업 등 다른 모듈에도 존재해요. 이 문서는 결제 기능의SDKResultCode만 다뤄요. - 값의 범위(80 ~ 90)가 SDKMethod 의 값(80 ~ 89)과 겹치는 것처럼 보이지만, 서로 다른 열거형이므로 혼동하지 않도록 주의해요.
- 80~90 구간은 결제 기능 고유 실패 사유이며, 나머지 값은 SDK를 포함한 여러 모듈에서 공통으로 쓰이는 값이에요.
See Also
SDKResultCode (Log)
종류 결과코드 · 모듈 Log · 버전 3.4.1
Description
로그 기능에서 사용하는 함수의 Result Code 예요. Result::GetResultCode() (또는 CallbackResult.GetResult().GetResultCode()) 값이 0(SUCCESS)이면 성공이고, 그 외 값은 실패를 나타내요.
이 문서는
Stove::PCSDK::Log네임스페이스의SDKResultCode예요.Stove::PCSDK::PCBang네임스페이스에도 같은 이름의 열거형이 별도로 존재하며 값 구성이 달라요(PC방 기능은 80~86 대신 81Plug 관련 27·28 코드를 가져요). 실제로 어느 모듈의 값인지는Result::GetSDKName()으로 확인해요.
Declaration
enum class SDKResultCode : uint32_t
{
SUCCESS = 0U,
FAIL = 1U,
// ... 이하 Values 표 참조
LOG_SIZE_EXCEEDED = 86U,
};
Enum Values
| Code | Name | Description | Show to User | In-Game Message |
|---|---|---|---|---|
| 0 | SUCCESS | 성공 | x | |
| 1 | FAIL | 실패 | x | |
| 2 | INVALID_CONFIG | Config 파일을 찾을 수 없어요. 설정 파일 경로를 확인해야 해요. | x | |
| 3 | INVALID_LOG_LEVEL | 로그 레벨의 값이 유효하지 않아요. 로그 레벨 설정을 확인해야 해요. | x | |
| 4 | INVALID_LOG_PATH | 로그 경로가 유효하지 않아요. 로그 경로 설정을 확인해야 해요. | x | |
| 5 | INVALID_PARAM | 유효한 매개변수가 입력되지 않았어요. 호출부 파라미터를 점검해야 해요. | x | |
| — | (6–15) | 사용하지 않아요 (건너뜀) | x | |
| 16 | BASE_NOT_INITIALIZED | SDK가 Initialize가 되지 않았어요. Base_Initialize() 를 먼저 호출해야 해요. | x | |
| 17 | NOT_INITIALIZED | 초기화가 되지 않았어요. Log_Initialize() 를 먼저 호출해야 해요. | x | |
| 18 | ALREADY_INITIALIZED | 이미 초기화가 되었어요. Log_UnInitialize() 호출 후 다시 시도해야 해요. | x | |
| 19 | INVALID_ACCESS_TOKEN | AccessToken을 찾을 수 없어요. 로그인 상태를 확인해야 해요. | O | 로그인 세션이 만료되었습니다. 게임 종료 후 다시 실행해 주세요. [확인] |
| 20 | NULL_TOKEN_ENTITY | Token 객체를 찾을 수 없어요. 로그인 상태를 확인해야 해요. | x | |
| 21 | NULL_ENTITY | 현재 객체를 찾을 수 없어요. | x | |
| 22 | HTTP_ERROR | Http 통신 오류가 발생했어요. 네트워크 상태를 확인한 후 다시 시도해야 해요. | O | 네트워크 연결이 원활하지 않습니다. 네트워크 상태를 확인하고 다시 실행해 주세요. [확인] |
| 23 | RESPONSE_ERROR | Http API Response 오류가 발생했어요. 다시 시도해야 해요. | O | 네트워크 연결이 원활하지 않습니다. 네트워크 상태를 확인하고 다시 실행해 주세요. [확인] |
| 24 | RESPONSE_INVALID_CODE | Http API Response Code를 찾을 수 없어요. 다시 시도해야 해요. | O | 네트워크 연결이 원활하지 않습니다. 네트워크 상태를 확인하고 다시 실행해 주세요. [확인] |
| 25 | RESPONSE_VALUE_IS_NULL | Http API Response 값이 비어있어요. 다시 시도해야 해요. | O | 네트워크 연결이 원활하지 않습니다. 네트워크 상태를 확인하고 다시 실행해 주세요. [확인] |
| 26 | RESPONSE_INVALID_VALUE_FORMAT | Http API Response 포맷이 올바르지 않아요. 다시 시도해야 해요. | O | 네트워크 연결이 원활하지 않습니다. 네트워크 상태를 확인하고 다시 실행해 주세요. [확인] |
| — | (27–28) | 사용하지 않아요 (건너뜀) | x | |
| 29 | ASYNC_OPERATION_IN_PROGRESS | 현재 비동기 작업이 진행중이에요. 진행 중인 작업이 끝난 후 다시 시도해야 해요. | x | |
| 30 | BASE_UNINITIALIZED | SDK를 Uninitialize했어요. Base_Initialize() 를 다시 호출한 후 시도해야 해요. | x | |
| 31 | NOT_SUPPORTED_COUNTRY | 현재 국가에서는 지원되지 않는 기능이에요. | x | |
| — | (32–79) | 사용하지 않아요 (건너뜀) | x | |
| 80 | LOCAL_DB_CREATE_WORKING_DIRECTORY_FAILED | 로컬 DB 작업 디렉토리 생성에 실패했어요. 로컬 저장소 경로와 권한을 확인해야 해요. | x | |
| 81 | LOCAL_DB_CONNECT_FAILED | 로컬 DB 연결에 실패했어요. 로컬 저장소 상태를 확인한 후 다시 시도해야 해요. | x | |
| 82 | LOCAL_DB_CREATE_TABLE_FAILED | 로컬 DB 내 테이블 생성에 실패했어요. 로컬 저장소 상태를 확인한 후 다시 시도해야 해요. | x | |
| 83 | LOCAL_DB_DISCONNECT_FAILED | 로컬 DB 연결 해제에 실패했어요. 로컬 저장소 상태를 확인한 후 다시 시도해야 해요. | x | |
| 84 | LOCAL_DB_BACKUP_LOG_FAILED | 로컬 DB에 로그 백업에 실패했어요. 로컬 저장소 상태를 확인한 후 다시 시도해야 해요. | x | |
| 85 | INVALID_LOG_PARAMETER | 로그 전송 API를 호출할 매개변수가 올바르지 않아요. 호출부 파라미터를 점검해야 해요. | x | |
| 86 | LOG_SIZE_EXCEEDED | 로그 크기가 최대 제한을 초과했어요. 로그 값의 크기를 줄여서 다시 시도해야 해요. | x | |
| — | (87–250) | 사용하지 않아요 (건너뜀) | x | |
| 251 | PCSDK_DLL_NOT_FOUND | PC SDK DLL을 찾지 못했어요. SDK 배포 파일 구성을 확인해야 해요. | x | |
| 252 | NOT_IMPLEMENTED | 해당 내용이 구현되지 않았어요. | x | |
| 253 | UNMANAGED_EXCEPTION | 관리되지 않는 예외가 발생했어요. | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
| 254 | MANAGED_EXCEPTION | 관리되는 예외가 발생했어요. | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
| 255 | UNKNOWN_ERROR | 알 수 없는 오류가 발생했어요. | x |
아래 코드를 받으면 반드시 게임을 종료해야 해요. 정상 진행이 불가능한 상태예요.
19INVALID_ACCESS_TOKEN— 로그인 세션이 만료되어 게임 종료 후 다시 실행해야 해요
Example
using namespace Stove::PCSDK::Log;
Log_Send(&logSendParam, [](CallbackResult callbackResult)
{
if (callbackResult.GetResult().GetResultCode() == static_cast<uint32_t>(SDKResultCode::LOG_SIZE_EXCEEDED))
{
// 로그 크기를 줄여 재전송하는 로직을 구현해 주세요.
}
});
Notes
80~86은 로그 기능 고유의 로컬 DB·로그 전송 관련 코드예요.Stove::PCSDK::PCBang::SDKResultCode와 이름이 같지만 별개의 열거형이에요.
See Also
SDKResultCode (PCBang)
종류 결과코드 · 모듈 PCBang · 버전 3.0.0.4
Description
PC방 기능에서 사용하는 함수의 Result Code 예요. Result::GetResultCode() (또는 CallbackResult.GetResult().GetResultCode()) 값이 0(SUCCESS)이면 성공이고, 그 외 값은 실패를 나타내요.
이 문서는
Stove::PCSDK::PCBang네임스페이스의SDKResultCode예요.Stove::PCSDK::Log네임스페이스에도 같은 이름의 열거형이 별도로 존재하며 값 구성이 달라요(로그 기능은 27·28 대신 로컬 DB 관련 80~86 코드를 추가로 가져요). 실제로 어느 모듈의 값인지는Result::GetSDKName()으로 확인해요.
Declaration
enum class SDKResultCode : uint32_t
{
SUCCESS = 0U,
FAIL = 1U,
// ... 이하 Values 표 참조
UNKNOWN_ERROR = 255U,
};
Enum Values
| Code | Name | Description | Show to User | In-Game Message |
|---|---|---|---|---|
| 0 | SUCCESS | 성공 | x | |
| 1 | FAIL | 실패 | x | |
| 2 | INVALID_CONFIG | Config 파일을 찾을 수 없어요. 설정 파일 경로를 확인해야 해요. | x | |
| 3 | INVALID_LOG_LEVEL | 로그 레벨의 값이 유효하지 않아요. 로그 레벨 설정을 확인해야 해요. | x | |
| 4 | INVALID_LOG_PATH | 로그 경로가 유효하지 않아요. 로그 경로 설정을 확인해야 해요. | x | |
| 5 | INVALID_PARAM | 잘못된 매개변수가 입력되었어요. 호출부 파라미터를 점검해야 해요. | x | |
| — | (6–15) | 사용하지 않아요 (건너뜀) | x | |
| 16 | BASE_NOT_INITIALIZED | SDK가 Initialize가 되지 않았어요. Base_Initialize() 를 먼저 호출해야 해요. | x | |
| 17 | NOT_INITIALIZED | 초기화가 되지 않았어요. PCBang_Initialize() 를 먼저 호출해야 해요. | x | |
| 18 | ALREADY_INITIALIZED | 이미 초기화가 되었어요. PCBang_UnInitialize() 호출 후 다시 시도해야 해요. | x | |
| 19 | INVALID_ACCESS_TOKEN | AccessToken을 찾을 수 없어요. 로그인 상태를 확인해야 해요. | O | 로그인 세션이 만료되었습니다. 게임 종료 후 다시 실행해 주세요. [확인] |
| 20 | NULL_TOKEN_ENTITY | Token 객체를 찾을 수 없어요. 로그인 상태를 확인해야 해요. | x | |
| 21 | NULL_ENTITY | 현재 객체를 찾을 수 없어요. | x | |
| 22 | HTTP_ERROR | Http 통신 에러가 발생했어요. 네트워크 상태를 확인한 후 다시 시도해야 해요. | O | 네트워크 연결이 원활하지 않습니다. 네트워크 상태를 확인하고 다시 실행해 주세요. [확인] |
| 23 | RESPONSE_ERROR | Http API Response 에러가 발생했어요. 다시 시도해야 해요. | O | 네트워크 연결이 원활하지 않습니다. 네트워크 상태를 확인하고 다시 실행해 주세요. [확인] |
| 24 | RESPONSE_INVALID_CODE | Http API Response Code를 찾을 수 없어요. 다시 시도해야 해요. | O | 네트워크 연결이 원활하지 않습니다. 네트워크 상태를 확인하고 다시 실행해 주세요. [확인] |
| 25 | RESPONSE_VALUE_IS_NULL | Http API Response 값이 비어있어요. 다시 시도해야 해요. | O | 네트워크 연결이 원활하지 않습니다. 네트워크 상태를 확인하고 다시 실행해 주세요. [확인] |
| 26 | RESPONSE_INVALID_VALUE_FORMAT | Http API Response 포멧이 틀려요. 다시 시도해야 해요. | O | 네트워크 연결이 원활하지 않습니다. 네트워크 상태를 확인하고 다시 실행해 주세요. [확인] |
| 27 | LOG_81PLUG_ERROR | 사용하지 않는 코드예요. | x | |
| 28 | UPDATE_81PLUG_FEED_ERROR | 사용하지 않는 코드예요. | x | |
| 29 | ASYNC_OPERATION_IN_PROGRESS | 현재 비동기 작업이 진행중이에요. 진행 중인 작업이 끝난 후 다시 시도해야 해요. | x | |
| 30 | BASE_UNINITIALIZED | SDK를 Uninitialize하였어요. Base_Initialize() 를 다시 호출한 후 시도해야 해요. | x | |
| 31 | NOT_SUPPORTED_COUNTRY | 현재 국가에서는 지원되지 않는 기능이에요. | x | |
| — | (32–250) | 사용하지 않아요 (건너뜀) | x | |
| 251 | PCSDK_DLL_NOT_FOUND | PC SDK DLL을 찾지 못했어요. SDK 배포 파일 구성을 확인해야 해요. | x | |
| 252 | NOT_IMPLEMENTED | 해당 내용은 구현되지 않았어요. | x | |
| 253 | UNMANAGED_EXCEPTION | 관리되지 않는 예외가 발생하였어요. | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
| 254 | MANAGED_EXCEPTION | 관리되는 예외가 발생하였어요. | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
| 255 | UNKNOWN_ERROR | 알 수 없는 에러가 발생하였어요. | x |
아래 코드를 받으면 반드시 게임을 종료해야 해요. 정상 진행이 불가능한 상태예요.
19INVALID_ACCESS_TOKEN— 로그인 세션이 만료되어 게임 종료 후 다시 실행해야 해요
Example
using namespace Stove::PCSDK::PCBang;
Result result = PCBang_Initialize();
if (result.GetResultCode() == static_cast<uint32_t>(SDKResultCode::ALREADY_INITIALIZED))
{
// 중복 초기화에 대한 로직을 구현해 주세요.
}
Notes
27(LOG_81PLUG_ERROR),28(UPDATE_81PLUG_FEED_ERROR) 은 폐기되어 사용하지 않는 코드예요.Stove::PCSDK::Log::SDKResultCode와 이름이 같지만 별개의 열거형이에요.
See Also
SDKResultCode (View)
종류 결과코드 · 모듈 View · 버전 3.0.0.4
Description
Result::GetResultCode() / CallbackResult::result.GetResultCode()로 조회하는 결과 코드예요. 0(SUCCESS)이 성공을 의미하며, 그 외 값은 실패를 의미해요. SDK 공통 코드와 팝업 기능 고유 코드가 하나의 열거형에 함께 정의되어 있어요.
이 문서는
Stove::PCSDK::View::SDKResultCode를 다뤄요.SDKResultCode라는 이름의 열거형은 BaseSDK, IAPSDK 등 다른 모듈에도 각각 존재하며, 값의 의미는 네임스페이스(모듈)마다 달라요.
Declaration
enum class SDKResultCode : uint32_t
{
SUCCESS = 0U,
FAIL = 1U,
// ... 이하 Values 표 참조
NO_POPUP_DATA = 87U,
};
Enum Values
| Code | Name | Description | Show to User | In-Game Message |
|---|---|---|---|---|
| 0 | SUCCESS | 성공 | x | |
| 1 | FAIL | 실패 | x | |
| 2 | INVALID_CONFIG | Config 파일을 찾을 수 없어요 | x | |
| 3 | INVALID_LOG_LEVEL | 로그 레벨의 값이 유효하지 않아요 | x | |
| 4 | INVALID_LOG_PATH | 로그 경로가 유효하지 않아요 | x | |
| 5 | INVALID_PARAM | 잘못된 매개변수가 입력되었어요. 호출부를 수정해야 해요. | x | |
| 16 | BASE_NOT_INITIALIZED | SDK가 Initialize가 되지 않았어요. SDK 초기화를 먼저 진행해야 해요. | x | |
| 17 | NOT_INITIALIZED | 초기화가 되지 않았어요. View_Initialize()/View_InitializeWithWndInfo() 를 먼저 호출해야 해요. | x | |
| 18 | ALREADY_INITIALIZED | 이미 초기화가 되었어요. 중복 초기화 여부를 확인해야 해요. | x | |
| 19 | INVALID_ACCESS_TOKEN | AccessToken을 찾을 수 없어요 | O | 로그인 세션이 만료되었습니다. 게임 종료 후 다시 실행해 주세요. [확인] |
| 20 | NULL_TOKEN_ENTITY | Token 객체를 찾을 수 없어요 | x | |
| 21 | NULL_ENTITY | 현재 객체를 찾을 수 없어요 | x | |
| 22 | HTTP_ERROR | Http 통신 에러가 발생했어요 | x | |
| 23 | RESPONSE_ERROR | Http API Response 에러가 발생했어요 | x | |
| 24 | RESPONSE_INVALID_CODE | Http API Response Code를 찾을 수 없어요 | x | |
| 25 | RESPONSE_VALUE_IS_NULL | Http API Response 값이 비어있어요 | x | |
| 26 | RESPONSE_INVALID_VALUE_FORMAT | Http API Response 포멧이 틀려요 | x | |
| 27 | LOG_81PLUG_ERROR | 사용하지 않는 코드예요 | x | |
| 28 | UPDATE_81PLUG_FEED_ERROR | 사용하지 않는 코드예요 | x | |
| 29 | ASYNC_OPERATION_IN_PROGRESS | 현재 비동기 작업이 진행중이에요. 이전 비동기 작업이 끝난 후 다시 시도해야 해요. | x | |
| 30 | BASE_UNINITIALIZED | SDK를 Uninitialize하였어요 | x | |
| 31 | NOT_SUPPORTED_COUNTRY | 현재 국가에서는 지원되지 않는 기능이에요. 지원 국가 여부를 확인해야 해요. | x | |
| — | 32 | 사용하지 않아요 (건너뛴 번호) | x | |
| 33 | POPUP_NOT_CREATED | 팝업(웹뷰)이 생성되지 않은 채 작업이 종료되었어요. onDestroy 콜백으로 내부 정리 용도로만 전달되는 코드이며, 구 C++ 인터페이스가 이 코드를 가로채므로 사용자 onDestroy 에는 전달되지 않아요. | x | |
| 251 | PCSDK_DLL_NOT_FOUND | PC SDK DLL을 찾지 못했어요 | x | |
| 252 | NOT_IMPLEMENTED | 해당 내용은 구현되지 않았어요 | x | |
| 253 | UNMANAGED_EXCEPTION | 관리되지 않는 예외가 발생하였어요 | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
| 254 | MANAGED_EXCEPTION | 관리되는 예외가 발생하였어요 | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
| 255 | UNKNOWN_ERROR | 알 수 없는 에러가 발생하였어요 | x | |
| 80 | VIEWUI_NOT_INITIALIZED | ViewUI가 초기화되지 않았어요. View 초기화 여부를 확인해야 해요. | x | |
| 81 | VIEWUI_UNINIT_FAILED | ViewUI 정리에 실패했어요 | x | |
| 82 | WEBVIEW_CREATE_FAIL | Webview 생성에 실패했어요 | x | |
| 83 | WEBVIEW_LOAD_URL_FAIL | URL 불러오기를 실패하였어요 | x | |
| 84 | WEBVIEW_CLOSE_ALL_FAIL | Webview 일괄 닫기에 실패했어요 | x | |
| 85 | WEBVIEW_CLOSE_FAIL | Webview 닫기에 실패했어요 | x | |
| 86 | WEBVIEW_CREATE_COOKIE_FAIL | Cookie 생성에 실패했어요 | O | 페이지를 불러올 수 없습니다. 다시 시도해 주세요. [확인] |
| 87 | NO_POPUP_DATA | 팝업 데이터가 존재하지 않아요 | O | 팝업 설정 정보가 존재하지 않아 표시할 창이 없습니다. [확인] |
아래 코드를 받으면 반드시 게임을 종료해야 해요. 정상 진행이 불가능한 상태예요.
19INVALID_ACCESS_TOKEN— 로그인 세션이 만료되어 게임 종료 후 다시 실행해야 해요
Example
CallbackResult callbackResult = /* 콜백에서 전달받은 값 */;
uint32_t resultCode = callbackResult.result.GetResultCode();
if (resultCode == (uint32_t)SDKResultCode::SUCCESS)
{
// 성공 시 로직을 구현해 주세요.
}
else if (resultCode == (uint32_t)SDKResultCode::NO_POPUP_DATA)
{
// 표시할 팝업 데이터가 없는 경우의 로직을 구현해 주세요.
}
else
{
// 그 외 실패 시 로직을 구현해 주세요.
}
Notes
- 0 ~ 5, 16 ~ 33, 251 ~ 255 구간은 SDK와 공유하는 공통 결과 코드이며, 80 ~ 87 구간은 팝업 기능 고유 결과 코드예요. 신규 flat C 인터페이스처럼 공통 코드와 모듈 코드가 별도 열거형으로 분리되어 있지 않아요.
POPUP_NOT_CREATED(33)는 팝업 관련 함수의onDestroy콜백에서 SDK가 내부적으로 소비하는 코드로, 이 코드를 사용자 콜백에서 직접 볼 일은 없어요.- 27, 28은 폐기된 81 Plug 기능과 관련된 코드예요.
See Also
StoveLanguage
종류 열거형 · 모듈 Base · 버전 3.0.0.4
Description
SDK 의 언어 정보를 설정하기 위한 값이에요. Base_SetLanguage() 의 입력 파라미터로 사용해요.
성공/실패를 나타내는 값이 아니라 언어 종류를 나타내는 값이며, 0(system)부터 순서대로 정의되어 있어요.
Declaration
namespace Stove
{
namespace PCSDK
{
namespace Base
{
enum class StoveLanguage : uint32_t
{
system = 0,
en = 1,
ko = 2,
// ... 이하 Values 표 참조
vi = 11,
};
}
}
}
Enum Values
| Code | Name | Description |
|---|---|---|
| 0 | system | System (시스템 설정을 따름) |
| 1 | en | English |
| 2 | ko | Korean |
| 3 | ja | Japanese |
| 4 | zh_cn | Chinese (Simplified, People's Republic of China) |
| 5 | zh_tw | Chinese (Traditional, Taiwan) |
| 6 | de | German |
| 7 | fr | French |
| 8 | es | Spanish, Castilian |
| 9 | pt | Portuguese |
| 10 | th | Thai |
| 11 | vi | Vietnamese |
Example
using namespace Stove::PCSDK;
using namespace Stove::PCSDK::Base;
Result result = Base_SetLanguage(StoveLanguage::en);
if (result.IsSuccessful())
{
// 성공 시 로직을 구현해 주세요.
}
else
{
// 실패 시 로직을 구현해 주세요.
}
Notes
Base_SetLanguage()전용 입력값이에요. 문자열 언어 코드를 직접 받는Base_SetLanguageEx()와는 별개예요.
See Also
StoveOverlayState
종류 열거형 · 모듈 Base · 버전 3.0.0.4
Description
오버레이 표시 상태를 위한 값이에요. StovePCVietnamAgeRatingInfo, StovePCVietnamOverimmersionInfo 의 GetOverlayState() 가 반환하는 값이에요.
성공/실패를 나타내는 값이 아니라 오버레이의 표시/숨김/확장 상태를 나타내는 값이에요.
Declaration
namespace Stove
{
namespace PCSDK
{
namespace Base
{
enum class StoveOverlayState : uint32_t
{
SHOW = 0,
HIDE = 1,
EXPANDED = 2,
};
}
}
}
Enum Values
| Code | Name | Description |
|---|---|---|
| 0 | SHOW | 오버레이를 표시해요. |
| 1 | HIDE | 오버레이를 숨겨요. |
| 2 | EXPANDED | 오버레이를 확장해요. |
Example
using namespace Stove::PCSDK;
using namespace Stove::PCSDK::Base;
void __cdecl OnVietnamAgeRatingFinishedCallback(CallbackResult callbackResult, StovePCVietnamAgeRatingInfo vietnamAgeRatingInfo)
{
if (callbackResult.result.IsSuccessful())
{
switch (vietnamAgeRatingInfo.GetOverlayState())
{
case StoveOverlayState::SHOW:
// 오버레이 표시 로직을 구현해 주세요.
break;
case StoveOverlayState::HIDE:
// 오버레이 숨김 로직을 구현해 주세요.
break;
case StoveOverlayState::EXPANDED:
// 오버레이 확장 로직을 구현해 주세요.
break;
}
}
}
Notes
- StovePCVietnamAgeRatingInfo 와 StovePCVietnamOverimmersionInfo 콜백에서 공통으로 사용돼요.
See Also
StovePCBangStatus
종류 구조체 · 모듈 PCBang · 버전 3.0.2
Description
PCBang_CheckPCBangStatus() API 호출 시 응답받는 콜백의 구조체예요. 유저 혜택 코드, PC방 고유번호, PC방 상품코드를 담아요.
SDK 가 콜백 인자로 값을 채워서 넘겨줘요. 값 타입으로 전달되며, 별도의 해제가 필요하지 않아요.
Declaration
namespace Stove
{
namespace PCSDK
{
namespace PCBang
{
struct StovePCBangStatus
{
public:
PCBangPremium GetPremiumStatus() const;
int32_t GetPCBangSerialNumber() const;
int32_t GetProductCode() const;
};
}
}
}
Members
| Name | Type | Access | Description |
|---|---|---|---|
GetPremiumStatus() | PCBangPremium | 읽기 | 유저 혜택 코드예요. |
GetPCBangSerialNumber() | int32_t | 읽기 | PC방 고유번호예요. |
GetProductCode() | int32_t | 읽기 | PC방 상품코드예요. |
Example
using namespace Stove::PCSDK;
using namespace Stove::PCSDK::PCBang;
void __cdecl OnCheckPCBangStatusFinished(CallbackResult callbackResult, StovePCBangStatus pcBangStatus)
{
if (callbackResult.GetResult().IsSuccessful())
{
PCBangPremium premiumStatus = pcBangStatus.GetPremiumStatus();
int32_t productCode = pcBangStatus.GetProductCode();
// 성공 시 로직을 구현해 주세요.
}
else
{
// 실패 시 로직을 구현해 주세요.
}
}
Notes
- PCBang_CheckPCBangStatus() 의 콜백 인자로 전달돼요.
- 콜백은
Base_RunCallback()을 호출한 스레드에서 실행돼요. - 혜택 코드는 PCBangPremium 을 참조하세요.
See Also
StovePCBangUserLogin
종류 구조체 · 모듈 PCBang · 버전 3.0.2
Description
PCBang_UserLogin() API 호출 시 로그인 결과 콜백으로 응답받는 구조체예요. 유저 혜택 코드, PC방 고유번호, PC방 프리미엄 남은 시간을 담아요.
SDK 가 콜백 인자로 값을 채워서 넘겨줘요. 값 타입으로 전달되며, 별도의 해제가 필요하지 않아요.
로그인에 실패하면 세 필드 모두 전달되지 않아요.
Declaration
namespace Stove
{
namespace PCSDK
{
namespace PCBang
{
struct StovePCBangUserLogin
{
public:
PCBangPremium GetPremiumStatus() const;
int32_t GetPCBangSerialNumber() const;
int32_t GetRemainTime() const;
};
}
}
}
Members
| Name | Type | Access | Description |
|---|---|---|---|
GetPremiumStatus() | PCBangPremium | 읽기 | 유저 혜택 코드예요. 실패 시 전달되지 않아요. |
GetPCBangSerialNumber() | int32_t | 읽기 | PC방 고유번호예요. 실패 시 전달되지 않아요. |
GetRemainTime() | int32_t | 읽기 | PC방 프리미엄 남은 시간이에요. 실패 시 전달되지 않아요. |
Example
using namespace Stove::PCSDK;
using namespace Stove::PCSDK::PCBang;
void __cdecl OnUserLoginFinished(CallbackResult callbackResult, StovePCBangUserLogin userLogin)
{
if (callbackResult.GetResult().IsSuccessful())
{
PCBangPremium premiumStatus = userLogin.GetPremiumStatus();
int32_t remainTime = userLogin.GetRemainTime();
// 성공 시 로직을 구현해 주세요.
}
else
{
// 실패 시 로직을 구현해 주세요.
}
}
Notes
- PCBang_UserLogin() 의 로그인 결과 콜백 인자로 전달돼요.
- 콜백은
Base_RunCallback()을 호출한 스레드에서 실행돼요. - 혜택 코드는 PCBangPremium 을 참조하세요.
See Also
StovePCChargeInfo
종류 구조체 · 모듈 IAP · 버전 3.1.0
Description
상품을 구매할 때 사용한 재화(결제 수단) 정보 한 항목을 나타내요. IAP_StartPurchase() 콜백(StovePCPurchaseResult 내부 배열)과 IAP_ConfirmPurchase() 콜백(OnConfirmPurchaseFinished)에 배열 형태로 전달돼요.
SDK 가 채워서 콜백으로 전달하는 값 타입이에요. 호출자가 직접 만들지 않아요.
Setter 가 공개되어 있지만, 일반적인 연동에서는 SDK 가 채워 주는 값을 읽기 용도로만 사용해 주세요. 콜백으로 전달되는 배열과 각 항목은 콜백 호출이 끝나면 더 이상 유효하지 않으므로, 보관이 필요한 값은 콜백 안에서 복사(대입 연산자 또는 복사 생성자)해 두어야 해요.
Declaration
namespace Stove
{
namespace PCSDK
{
namespace IAP
{
struct StovePCChargeInfo
{
public:
double GetChargeDeductVal() const;
void SetChargeDeductVal(double chargeDeductVal);
double GetChargeDisplayDeductVal() const;
void SetChargeDisplayDeductVal(double chargeDisplayDeductVal);
int32_t GetChargeType() const;
void SetChargeType(int32_t chargeType);
const wchar_t* GetChargeTypeName() const;
void SetChargeTypeName(const wchar_t* chargeTypeName);
};
}
}
}
Members
| Name | Type | Access | Description |
|---|---|---|---|
GetChargeDeductVal() / SetChargeDeductVal() | double | 읽기·쓰기 | 결제 가격이에요. |
GetChargeDisplayDeductVal() / SetChargeDisplayDeductVal() | double | 읽기·쓰기 | 결제 가격에 대한 캐시 전환 가격이에요. |
GetChargeType() / SetChargeType() | int32_t | 읽기·쓰기 | 결제 수단 코드예요. 98: STOVE 캐시, 99: 포인트, 그 외: PG 결제 수단이에요. |
GetChargeTypeName() / SetChargeTypeName() | const wchar_t* | 읽기·쓰기 | 결제 수단 이름이에요. |
Example
using namespace Stove::PCSDK;
using namespace Stove::PCSDK::IAP;
void __cdecl OnConfirmPurchaseFinished(CallbackResult callbackResult, bool status,
StovePCPurchasedProduct* purchasedProducts, uint32_t purchasedProductSize,
StovePCChargeInfo* chargeInfos, uint32_t chargeInfoSize)
{
if (callbackResult.GetResult().IsSuccessful() && status)
{
for (uint32_t i = 0; i < chargeInfoSize; ++i)
{
int32_t chargeType = chargeInfos[i].GetChargeType();
double deductVal = chargeInfos[i].GetChargeDeductVal();
// 필요한 값만 복사해서 보관해 주세요.
}
// 성공 시 로직을 구현해 주세요.
}
else
{
// 실패 시 로직을 구현해 주세요.
}
}
Notes
- IAP_StartPurchase, IAP_ConfirmPurchase 의 출력으로 전달돼요.
- 결제 1건에 여러 재화(예: STOVE 캐시 + 포인트)가 함께 사용된 경우 배열에 여러 항목이 채워질 수 있어요.
See Also
StovePCFetchProductParam
종류 구조체 · 모듈 IAP · 버전 3.0.0.4
Description
IAP_FetchProducts(), IAP_FetchProductsEx() API 를 호출할 때 전달하는 구조체예요. 조회할 카테고리와 페이지 정보를 담아요.
호출자가 스택에 직접 선언한 뒤 Set*() 메서드로 값을 채우고, 함수 인자로 주소를 넘겨요. 값 타입이므로 별도의 해제가 필요하지 않아요.
Declaration
namespace Stove
{
namespace PCSDK
{
namespace IAP
{
struct StovePCFetchProductParam
{
public:
const wchar_t* GetCategoryId() const;
void SetCategoryId(const wchar_t* categoryId);
int32_t GetPageNumber() const;
void SetPageNumber(int32_t number);
int32_t GetPageSize() const;
void SetPageSize(int32_t size);
};
}
}
}
Members
| Name | Type | Access | Description |
|---|---|---|---|
GetCategoryId() / SetCategoryId() | const wchar_t* | 읽기·쓰기 | 카테고리 아이디예요. 전달하지 않으면(비워 두면) 전체 카테고리의 상품 목록을 조회해요. |
GetPageNumber() / SetPageNumber() | int32_t | 읽기·쓰기 | 상품 정보 조회 시 페이지 번호예요. 전달하지 않으면 기본값 1 로 설정돼요. |
GetPageSize() / SetPageSize() | int32_t | 읽기·쓰기 | 상품 정보 조회 시 페이지 크기예요. 전달하지 않으면 기본값 20 으로 설정돼요. 등록된 전체 상품을 조회하려면 PageNumber 를 1로, PageSize 를 int32_t 최댓값(2,147,483,647) 이하로 설정해요. |
Example
using namespace Stove::PCSDK;
using namespace Stove::PCSDK::IAP;
StovePCFetchProductParam param;
param.SetCategoryId(L"");
param.SetPageNumber(1);
param.SetPageSize(20);
IAP_FetchProducts(¶m, OnFetchProductsFinished);
Notes
CategoryId는 StovePCShopCategory 의GetCategoryId()값을 그대로 전달해 주세요.IAP_FetchProducts()는 StovePCProduct 배열을,IAP_FetchProductsEx()는 StovePCProductEx 배열을 콜백으로 돌려줘요.
See Also
StovePCGameProfile
종류 구조체 · 모듈 Base · 버전 3.0.0.4
Description
Base_SetGameProfile() API 호출 시 전달하는 GameProfile 구조체예요. 게임의 월드 식별자와 캐릭터 식별자를 담아요.
호출자가 스택에 직접 선언한 뒤 Set*() 메서드로 값을 채우고, 함수 인자로 주소를 넘겨요. 값 타입이므로 별도의 해제가 필요하지 않아요.
Declaration
namespace Stove
{
namespace PCSDK
{
namespace Base
{
struct StovePCGameProfile
{
public:
const wchar_t* GetWorldId() const;
void SetWorldId(const wchar_t* worldId);
int64_t GetCharacterNumber() const;
void SetCharacterNumber(int64_t number);
public:
StovePCGameProfile();
StovePCGameProfile(const wchar_t* worldId, int64_t characterNumber);
};
}
}
}
Members
| Name | Type | Access | Description |
|---|---|---|---|
GetWorldId() / SetWorldId() | const wchar_t* | 읽기·쓰기 | 게임의 월드 식별자예요. |
GetCharacterNumber() / SetCharacterNumber() | int64_t | 읽기·쓰기 | 캐릭터 식별자예요. |
Example
using namespace Stove::PCSDK;
using namespace Stove::PCSDK::Base;
StovePCGameProfile gameProfile(L"world-1", 123456789LL);
Result result = Base_SetGameProfile(&gameProfile);
if (result.IsSuccessful())
{
// 성공 시 로직을 구현해 주세요.
}
else
{
// 실패 시 로직을 구현해 주세요.
}
Notes
- 기본 생성자 외에
worldId,characterNumber를 바로 초기화하는 생성자를 제공해요.
See Also
StovePCGds
종류 구조체 · 모듈 Base · 버전 3.0.0.4
Description
Base_GetGds() API 호출 시 전달받는 사용자 정보에 대한 구조체예요. 로그인한 국가코드, GDPR 등 규제 적용 국가명, 타임존, UTC 옵셋, 언어 정보를 담아요.
호출자가 스택에 선언한 뒤 주소를 Base_GetGds() 에 넘기면 SDK 가 값을 채워줘요. 값 타입이므로 별도의 해제가 필요하지 않아요.
Declaration
namespace Stove
{
namespace PCSDK
{
namespace Base
{
struct StovePCGds
{
public:
bool IsDefault() const;
const wchar_t* GetNation() const;
const wchar_t* GetRegulation() const;
const wchar_t* GetTimeZone() const;
int32_t GetUtcOffset() const;
const wchar_t* GetLanguage() const;
};
}
}
}
Members
| Name | Type | Access | Description |
|---|---|---|---|
IsDefault() | bool | 읽기 | Stove 플랫폼 상에서 IP 주소를 통해 국가코드를 정상 처리한 경우, 또는 국가코드를 정상 처리했으나 타임존을 처리하지 못한 경우 false 를 반환해요. true 이면 국가코드를 기본값으로 처리한 것이에요. |
GetNation() | const wchar_t* | 읽기 | 로그인한 국가코드 정보예요. ISO 3166-1 ALPHA-2 CODE 에 해당하는 국가코드를 반환해요. |
GetRegulation() | const wchar_t* | 읽기 | GDPR 등 규제적용 국가에 해당할 경우 규제적용 국가명칭을 반환해요. |
GetTimeZone() | const wchar_t* | 읽기 | 타임존 ID 로 잘 알려진 IANA Time Zone Database(TZDB) 기준 ID 를 반환해요. |
GetUtcOffset() | int32_t | 읽기 | 타임존 ID 기준으로 UTC 옵셋 정보를 분 단위로 반환해요. |
GetLanguage() | const wchar_t* | 읽기 | ISO 639-1 ALPHA-2 CODE 를 기준으로 언어코드를 반환해요. 중국어와 인도네시아어에 한하여 간체(zh), 번체(zh-tw), 인도네시아어(in) 로 반환해요. |
Example
using namespace Stove::PCSDK;
using namespace Stove::PCSDK::Base;
StovePCGds gds;
Result result = Base_GetGds(&gds);
if (result.IsSuccessful())
{
const wchar_t* nation = gds.GetNation();
const wchar_t* timeZone = gds.GetTimeZone();
// 성공 시 로직을 구현해 주세요.
}
else
{
// 실패 시 로직을 구현해 주세요.
}
Notes
IsDefault()가 true 이면 IP 기반 국가코드 판별이 실패해 STOVE 기본 국가코드로 대체된 상태예요.
See Also
StovePCInitializeParam
종류 구조체 · 모듈 Base · 버전 3.0.0.4
Description
Base_Initialize() API 를 호출할 때 전달하는 구조체예요. Base_RestartAppIfNecessary(), Base_RestartAppIfNecessaryAsync(), Base_RestartAppIfNecessaryAsyncEx() 등 초기화 계열 API 에도 같은 구조체를 사용해요.
호출자가 스택에 직접 선언한 뒤 Set*() 메서드로 값을 채우고, 함수 인자로 주소를 넘겨요. 값 타입이므로 별도의 해제가 필요하지 않아요.
Declaration
namespace Stove
{
namespace PCSDK
{
namespace Base
{
struct StovePCInitializeParam
{
public:
const wchar_t* GetEnvironment() const;
void SetEnvironment(const wchar_t* env);
const wchar_t* GetGameID() const;
void SetGameID(const wchar_t* gameId);
const wchar_t* GetApplicationKey() const;
void SetApplicationKey(const wchar_t* appKey);
};
}
}
}
Members
| Name | Type | Access | Description |
|---|---|---|---|
GetEnvironment() / SetEnvironment() | const wchar_t* | 읽기·쓰기 | Stove Environment 값이에요. |
GetGameID() / SetGameID() | const wchar_t* | 읽기·쓰기 | Stove Game ID 값이에요. |
GetApplicationKey() / SetApplicationKey() | const wchar_t* | 읽기·쓰기 | Stove Application key 값이에요. |
Example
using namespace Stove::PCSDK;
using namespace Stove::PCSDK::Base;
StovePCInitializeParam initParam;
initParam.SetEnvironment(L"real");
initParam.SetGameID(L"YOUR_GAME_ID");
initParam.SetApplicationKey(L"YOUR_APP_KEY");
Base_Initialize(&initParam, OnInitializeFinishedCallback);
Notes
Base_RestartAppIfNecessary()계열과Base_Initialize()가 공용으로 사용해요.waitTimeMillisec,launchLauncher, 플랫폼 이름 등 확장 필드가 필요하면 StovePCInitializeParamEx2 를 사용하는Base_RestartAppIfNecessaryAsyncEx2()를 사용해 주세요.
See Also
StovePCInitializeParamEx2
종류 구조체 · 모듈 Base · 버전 3.4.1
Description
Base_RestartAppIfNecessaryAsyncEx2() API 를 호출할 때 전달하는 구조체예요. StovePCInitializeParam 의 Environment/GameID/ApplicationKey 필드에 더해, 대기 시간(waitTimeMillisec), 런처 실행 여부(launchLauncher), 플랫폼 이름(platformName) 을 함께 담아요.
호출자가 스택에 직접 선언한 뒤 Set*() 메서드로 값을 채우고, 함수 인자로 주소를 넘겨요. 값 타입이므로 별도의 해제가 필요하지 않아요.
Declaration
namespace Stove
{
namespace PCSDK
{
namespace Base
{
struct StovePCInitializeParamEx2
{
public:
const wchar_t* GetEnvironment() const;
void SetEnvironment(const wchar_t* env);
const wchar_t* GetGameID() const;
void SetGameID(const wchar_t* gameId);
const wchar_t* GetApplicationKey() const;
void SetApplicationKey(const wchar_t* appKey);
uint32_t GetWaitTimeMillisec() const;
void SetWaitTimeMillisec(uint32_t waitTime);
bool GetLaunchLauncher() const;
void SetLaunchLauncher(bool launch);
const wchar_t* GetPlatformName() const;
void SetPlatformName(const wchar_t* platformName);
};
}
}
}
Members
| Name | Type | Access | Description |
|---|---|---|---|
GetEnvironment() / SetEnvironment() | const wchar_t* | 읽기·쓰기 | Stove Environment 값이에요. |
GetGameID() / SetGameID() | const wchar_t* | 읽기·쓰기 | Stove Game ID 값이에요. |
GetApplicationKey() / SetApplicationKey() | const wchar_t* | 읽기·쓰기 | Stove Application key 값이에요. |
GetWaitTimeMillisec() / SetWaitTimeMillisec() | uint32_t | 읽기·쓰기 | 대기 시간(밀리초)예요. |
GetLaunchLauncher() / SetLaunchLauncher() | bool | 읽기·쓰기 | 런처 실행 여부예요. |
GetPlatformName() / SetPlatformName() | const wchar_t* | 읽기·쓰기 | 플랫폼 이름이에요(예: Stove, Steam). |
Example
using namespace Stove::PCSDK;
using namespace Stove::PCSDK::Base;
StovePCInitializeParamEx2 initParam;
initParam.SetEnvironment(L"real");
initParam.SetGameID(L"YOUR_GAME_ID");
initParam.SetApplicationKey(L"YOUR_APP_KEY");
initParam.SetWaitTimeMillisec(60000);
initParam.SetLaunchLauncher(true);
initParam.SetPlatformName(L"Stove");
Base_RestartAppIfNecessaryAsyncEx2(&initParam, OnRestartAppIfNecessaryAsyncFinishedCallback);
Notes
Base_RestartAppIfNecessaryAsyncEx2()전용 파라미터예요.waitTimeMillisec,launchLauncher를 별도 인자로 받는Base_RestartAppIfNecessaryAsyncEx()와 달리, 이 구조체 하나에 옵션을 모두 포함해요.- 소스에 향후 확장을 위한 예약 필드(
reserved1~reserved5)가 있으나 공개 Getter/Setter 가 없어 문서에 포함하지 않아요.
See Also
StovePCInventoryItem
종류 구조체 · 모듈 IAP · 버전 3.0.0.4
Description
사용자가 구매한 상품 기록 한 항목을 나타내요. IAP_FetchInventory() 호출 결과로 OnFetchInventoryFinished 콜백에 배열 형태로 전달돼요.
SDK 가 채워서 콜백으로 전달하는 값 타입이에요. 호출자가 직접 만들지 않아요.
콜백으로 전달되는 배열과 각 항목은 콜백 호출이 끝나면 더 이상 유효하지 않아요. 보관이 필요한 값은 콜백 안에서 복사(대입 연산자 또는 복사 생성자)해 두어야 해요.
Declaration
namespace Stove
{
namespace PCSDK
{
namespace IAP
{
struct StovePCInventoryItem
{
public:
int64_t GetTransactionMasterNumber() const;
int64_t GetTransactionDetailNumber() const;
int64_t GetProductId() const;
const wchar_t* GetGameItemId() const;
const wchar_t* GetProductName() const;
int32_t GetQuantity() const;
const wchar_t* GetThumbnailUrl() const;
};
}
}
}
Members
| Name | Type | Access | Description |
|---|---|---|---|
GetTransactionMasterNumber() | int64_t | 읽기 | 거래 고유 마스터 번호예요. |
GetTransactionDetailNumber() | int64_t | 읽기 | 거래 고유 상세 번호예요. |
GetProductId() | int64_t | 읽기 | 플랫폼 상품 아이디예요. |
GetGameItemId() | const wchar_t* | 읽기 | 상품 아이디에 매핑되는 게임 내 아이템 아이디예요. |
GetProductName() | const wchar_t* | 읽기 | 상품명이에요. |
GetQuantity() | int32_t | 읽기 | 수량이에요. 구매 요청 시 전달된 수량이에요. |
GetThumbnailUrl() | const wchar_t* | 읽기 | 대표 상품 이미지 URL 이에요. |
Example
using namespace Stove::PCSDK;
using namespace Stove::PCSDK::IAP;
void __cdecl OnFetchInventoryFinished(CallbackResult callbackResult, StovePCInventoryItem* inventoryItems, uint32_t inventoryItemSize)
{
if (callbackResult.GetResult().IsSuccessful())
{
for (uint32_t i = 0; i < inventoryItemSize; ++i)
{
int64_t productId = inventoryItems[i].GetProductId();
const wchar_t* productName = inventoryItems[i].GetProductName();
// 필요한 값만 복사해서 보관해 주세요.
}
// 성공 시 로직을 구현해 주세요.
}
else
{
// 실패 시 로직을 구현해 주세요.
}
}
Notes
- IAP_FetchInventory 의 출력으로만 전달돼요.
- 전체 구매 이력을 조회하며, 페이지 파라미터는 없어요.
See Also
StovePCLogSendParam
종류 구조체 · 모듈 Log · 버전 3.4.1
Description
Log_Send() API 를 호출할 때 전달하는 구조체예요. 계정·캐릭터 식별자, 마케팅 연동 정보, 게임·서버·레벨 컨텍스트, 로그 그룹 ID, 자유 형식 로그 본문을 담아요.
호출자가 스택에 직접 선언한 뒤 Set*() 메서드로 값을 채우고, 함수 인자로 주소를 넘겨요. 값 타입이므로 별도의 해제가 필요하지 않아요.
Declaration
namespace Stove
{
namespace PCSDK
{
namespace Log
{
struct StovePCLogSendParam
{
public:
int64_t GetAuid() const;
void SetAuid(int64_t auid);
int64_t GetCuid() const;
void SetCuid(int64_t cuid);
const wchar_t* GetMktType1() const;
void SetMktType1(const wchar_t* mktType1);
const wchar_t* GetMktId1() const;
void SetMktId1(const wchar_t* mktId1);
const wchar_t* GetMktType2() const;
void SetMktType2(const wchar_t* mktType2);
const wchar_t* GetMktId2() const;
void SetMktId2(const wchar_t* mktId2);
const wchar_t* GetGameVersion() const;
void SetGameVersion(const wchar_t* gameVersion);
const wchar_t* GetLogGroupId() const;
void SetLogGroupId(const wchar_t* logGroupId);
const wchar_t* GetServerCd() const;
void SetServerCd(const wchar_t* serverCd);
const wchar_t* GetServerCdDet() const;
void SetServerCdDet(const wchar_t* serverCdDet);
const wchar_t* GetLvCd() const;
void SetLvCd(const wchar_t* lvCd);
const wchar_t* GetLvCdDet() const;
void SetLvCdDet(const wchar_t* lvCdDet);
const wchar_t* GetContents() const;
void SetContents(const wchar_t* contents);
};
}
}
}
Members
사용자 식별
| Name | Type | Access | Description |
|---|---|---|---|
GetAuid() / SetAuid() | int64_t | 읽기·쓰기 | 계정 단위의 고유 ID예요(게임에 해당 개념이 있을 경우). |
GetCuid() / SetCuid() | int64_t | 읽기·쓰기 | 캐릭터 단위의 고유 ID예요(게임에 해당 개념이 있을 경우). |
마케팅 연동 정보
| Name | Type | Access | Description |
|---|---|---|---|
GetMktType1() / SetMktType1() | const wchar_t* | 읽기·쓰기 | 연동한 마케팅 3rd party 서비스 네임이에요 (1). |
GetMktId1() / SetMktId1() | const wchar_t* | 읽기·쓰기 | 연동한 마케팅 3rd party 서비스에 따른 고유 키 값이에요 (1). |
GetMktType2() / SetMktType2() | const wchar_t* | 읽기·쓰기 | 연동한 마케팅 3rd party 서비스 네임이에요 (2). |
GetMktId2() / SetMktId2() | const wchar_t* | 읽기·쓰기 | 연동한 마케팅 3rd party 서비스에 따른 고유 키 값이에요 (2). |
게임 · 서버 컨텍스트
| Name | Type | Access | Description |
|---|---|---|---|
GetGameVersion() / SetGameVersion() | const wchar_t* | 읽기·쓰기 | 게임 빌드 버전이에요. |
GetServerCd() / SetServerCd() | const wchar_t* | 읽기·쓰기 | 서버 코드예요(게임에 서버 개념이 있을 경우). |
GetServerCdDet() / SetServerCdDet() | const wchar_t* | 읽기·쓰기 | 서버 코드 상세 정보예요(게임에 서버 상세 정보가 있을 경우). |
GetLvCd() / SetLvCd() | const wchar_t* | 읽기·쓰기 | 로그 기록 시점의 레벨 정보예요(계정 단위). |
GetLvCdDet() / SetLvCdDet() | const wchar_t* | 읽기·쓰기 | 로그 기록 시점의 레벨 정보예요(캐릭터 단위). |
로그 그룹 · 본문
| Name | Type | Access | Description |
|---|---|---|---|
GetLogGroupId() / SetLogGroupId() | const wchar_t* | 읽기·쓰기 | 세트로 묶여야 할 로그 간 매핑을 위한 Log Group ID예요. |
GetContents() / SetContents() | const wchar_t* | 읽기·쓰기 | 위 필드 이외의 데이터를 JSON 문자열로 전송하는 필드예요. |
Example
using namespace Stove::PCSDK::Log;
StovePCLogSendParam logSendParam;
logSendParam.SetAuid(auid);
logSendParam.SetCuid(cuid);
logSendParam.SetGameVersion(L"1.2.3");
logSendParam.SetContents(L"{\"event\":\"login\"}");
Log_Send(&logSendParam, OnLogSendFinishedCallback);
Notes
- Log_Send() 의 입력 파라미터로만 사용돼요.
- 값을 모르는 필드는 설정하지 않아도 돼요.
GetLvCdDet()/SetLvCdDet()은 이름의 "Det" 접미사와 달리LvCd(계정 범위)의 하위 항목이 아니라, 캐릭터 범위에 대응하는 값이에요.
See Also
StovePCOrderProduct
종류 구조체 · 모듈 IAP · 버전 3.0.0.4
Description
구매를 요청할 상품 한 항목을 나타내요. StovePCStartPurchaseParam 의 구매 상품 목록을 구성하는 데 사용해요.
호출자가 스택에 직접 선언한 뒤 Set*() 메서드로 값을 채우고, StovePCStartPurchaseParam::SetOrderProduct() 로 전달해요. 값 타입이므로 별도의 해제가 필요하지 않아요.
Declaration
namespace Stove
{
namespace PCSDK
{
namespace IAP
{
struct StovePCOrderProduct
{
public:
int64_t GetProductId() const;
void SetProductId(int64_t id);
double GetSalePrice() const;
void SetSalePrice(double salePrice);
int32_t GetQuantity() const;
void SetQuantity(int32_t quantity);
};
}
}
}
Members
| Name | Type | Access | Description |
|---|---|---|---|
GetProductId() / SetProductId() | int64_t | 읽기·쓰기 | 플랫폼 상품 아이디예요. |
GetSalePrice() / SetSalePrice() | double | 읽기·쓰기 | 상품 판매가예요. |
GetQuantity() / SetQuantity() | int32_t | 읽기·쓰기 | 수량이에요. |
Example
using namespace Stove::PCSDK;
using namespace Stove::PCSDK::IAP;
StovePCOrderProduct orderProduct;
orderProduct.SetProductId(1234567890LL);
orderProduct.SetSalePrice(9900.0);
orderProduct.SetQuantity(1);
StovePCStartPurchaseParam startPurchaseParam;
startPurchaseParam.CreateOrderProduct(1);
startPurchaseParam.SetOrderProduct(0, &orderProduct);
Notes
ProductId는 StovePCProduct 또는 StovePCProductEx 의GetProductId()값을 그대로 전달해 주세요.SalePrice는 구매 시 서버가 관찰한 가격과 비교되므로, 조회한 상품의GetSalePrice()값을 그대로 전달해야 해요. 값이 다르면 구매가 거부될 수 있어요.
See Also
StovePCOverImmersion
종류 구조체 · 모듈 Base · 버전 3.0.0.4
Description
Base_OverImmersionNotification() API 호출 시 전달받는 과몰입방지에 대한 구조체예요. 과몰입 경고 메세지, 게임 경과시간(시간), 메세지 최소 노출시간(초)을 담아요.
SDK 가 콜백 인자로 값을 채워서 넘겨줘요. 값 타입으로 값 전달되며, 별도의 해제가 필요하지 않아요.
한국 과몰입 방지 대상자 전용 API 의 콜백에서만 값이 전달돼요.
Declaration
namespace Stove
{
namespace PCSDK
{
namespace Base
{
struct StovePCOverImmersion
{
public:
const wchar_t* GetWarningMessage() const;
int32_t GetElapsedTimeInHours() const;
int32_t GetMinExposureTimeInSeconds() const;
};
}
}
}
Members
| Name | Type | Access | Description |
|---|---|---|---|
GetWarningMessage() | const wchar_t* | 읽기 | 과몰입 경고 메세지예요. |
GetElapsedTimeInHours() | int32_t | 읽기 | 게임 경과시간(시간)이에요. |
GetMinExposureTimeInSeconds() | int32_t | 읽기 | 메세지 최소 노출시간(초)예요. |
Example
using namespace Stove::PCSDK;
using namespace Stove::PCSDK::Base;
void __cdecl OnOverImmersionFinishedCallback(CallbackResult callbackResult, StovePCOverImmersion overImmersion)
{
if (callbackResult.result.IsSuccessful())
{
const wchar_t* warningMessage = overImmersion.GetWarningMessage();
int32_t minExposureTimeInSeconds = overImmersion.GetMinExposureTimeInSeconds();
// 성공 시 로직을 구현해 주세요.
}
else
{
// 실패 시 로직을 구현해 주세요.
}
}
Notes
Base_OverImmersionNotification()은 한국 과몰입 방지 대상자에게 게임 플레이 1시간마다 정보를 전달하는 한국 전용 API예요.- 콜백은
Base_RunCallback()을 호출한 스레드에서 실행돼요.
See Also
StovePCPaymentOperation
종류 열거형 · 모듈 IAP · 버전 3.0.0.4 · 폐기 예정
Description
폐기(deprecated)된
IAP_StartPayment전용 값이에요.IAP_StartPayment를 사용하지 않는다면 이 값도 사용하지 않아요.
IAP_StartPayment / IAP_StartPaymentEx 호출 시 StovePCPaymentOption::SetOperation() 으로 설정하는 값이에요. Stove Webview 사용 여부를 결정해요.
Declaration
enum class StovePCPaymentOperation : uint32_t
{
DEFAULT = 0,
WITH_WEBVIEW = 1,
_MAX_COUNT
};
Enum Values
| Code | Name | Description |
|---|---|---|
| 0 | DEFAULT | 가장 기초적인 동작이에요. Stove Webview를 사용하지 않고 게임 캐시 구매를 수동으로 연동하는 경우에 사용해요. 결과에 포함된 일회용 URL을 통해 Stove 웹 결제 페이지를 별도로 열어서 결제를 진행해야 해요 |
| 1 | WITH_WEBVIEW | Stove Webview를 통해 Stove 웹 결제 페이지를 열고 게임 캐시 구매를 진행해요 |
| 2 | _MAX_COUNT | 사용하지 않아요 (열거형의 끝을 나타내는 값이며 유효한 operation이 아니에요) |
Example
using namespace Stove::PCSDK::IAP;
StovePCPaymentOption options;
options.SetOperation(StovePCPaymentOperation::WITH_WEBVIEW);
Notes
WITH_WEBVIEW로 설정하면StovePCPaymentOption의WebviewMode/WebviewRect설정이 함께 적용돼요.
See Also
StovePCPaymentOption
종류 구조체 · 모듈 IAP · 버전 3.0.0.4 · 폐기 예정
Description
폐기(deprecated)된
IAP_StartPayment전용 구조체예요. 대신 StovePCPurchaseOption 을 사용하는 IAP_StartPurchase 를 사용하세요.
IAP_StartPayment() 수행 시 동작 방식(수동 연동 / Stove Webview 연동)과, Webview 사용 시 표시 위치를 지정하는 구조체예요.
호출자가 스택에 직접 선언한 뒤 Set*() 메서드로 값을 채워요. 값 타입이므로 별도의 해제가 필요하지 않아요.
Declaration
namespace Stove
{
namespace PCSDK
{
namespace IAP
{
struct StovePCPaymentOption
{
public:
StovePCPaymentOperation GetOperation() const;
void SetOperation(StovePCPaymentOperation operation);
Base::WebViewMode GetWebviewMode() const;
void SetWebviewMode(Base::WebViewMode mode);
void GetWebviewRect(int32_t* x, int32_t* y, int32_t* width, int32_t* height) const;
void SetWebviewRect(int32_t x, int32_t y, int32_t width, int32_t height);
};
}
}
}
Members
| Name | Type | Access | Description |
|---|---|---|---|
GetOperation() / SetOperation() | StovePCPaymentOperation | 읽기·쓰기 | IAP_StartPayment() 수행 시 동작 방식이에요. |
GetWebviewMode() / SetWebviewMode() | WebViewMode | 읽기·쓰기 | Stove Webview 사용 시 타입이에요. Operation != DEFAULT 일 때 적용돼요. |
GetWebviewRect() / SetWebviewRect() | int32_t x, y, width, height | 읽기·쓰기 | Stove 결제 페이지 표시용 Webview 의 위치와 크기(x, y, width, height)를 한 번에 설정·조회해요. 내부적으로 webviewPosX, webviewPosY, webviewWidth, webviewHeight 네 개의 필드에 대응해요. Operation != DEFAULT 일 때 적용돼요. |
Example
using namespace Stove::PCSDK;
using namespace Stove::PCSDK::Base;
using namespace Stove::PCSDK::IAP;
StovePCPaymentOption option;
option.SetOperation(StovePCPaymentOperation::WITH_WEBVIEW);
option.SetWebviewMode(WebViewMode::EXTERNAL);
option.SetWebviewRect(0, 0, 800, 600);
IAP_StartPayment(&option, OnStartPaymentFinished);
Notes
IAP_StartPayment()은 게임 캐시 등 1회성 결제에 사용해요. 상품 구매에는 StovePCPurchaseOption 을 사용하는IAP_StartPurchase()를 사용해 주세요.- 팝업이 닫힐 때의 결과가 필요하면 IAP_StartPaymentEx 를 사용해 주세요.
See Also
StovePCPopupDisallowed
종류 구조체 · 모듈 View · 버전 3.0.0.4
Description
View_SetPopupDisallowed의 입력 파라미터로 사용하는 값 타입 구조체예요. 노출을 막을 팝업의 ID와, 노출하지 않을 기간(일 수)을 담아요.
호출자가 생성하고 소유하는 일반적인 C++ 값 타입이에요. 별도의 생성/해제 API 없이 기본 생성자와 소멸자로 관리돼요.
Declaration
class StovePCPopupDisallowed
{
public:
StovePCPopupDisallowed();
uint32_t GetPopupId() const;
void SetPopupId(uint32_t popupId);
uint32_t GetDays() const;
void SetDays(uint32_t days);
};
Members
| Name | Type | Access | Accessor | Description |
|---|---|---|---|---|
popupId | uint32_t | 읽기·쓰기 | GetPopupId() / SetPopupId(uint32_t) | 노출하지 않을 Popup의 ID |
days | uint32_t | 읽기·쓰기 | GetDays() / SetDays(uint32_t) | 팝업을 노출하지 않을 일(day)수 |
Example
using namespace Stove::PCSDK::View;
StovePCPopupDisallowed disallowed;
disallowed.SetPopupId(popupId);
disallowed.SetDays(7);
View_SetPopupDisallowed(&disallowed, nullptr);
Notes
- View_SetPopupDisallowed의 입력 파라미터로만 사용돼요.
- 복사 생성자와 대입 연산자를 제공하므로 값 타입으로 자유롭게 복사할 수 있어요.
popupId는 SDK 호출로 얻는 값이 아니에요. AutoPopup/ManualPopup/NewsPopup/CouponPopup 계열 API의 콜백은 팝업 식별자를 반환하지 않으며, 차단 여부는 서버 API 없이 클라이언트 로컬 DB 에만 저장돼요. 따라서 팝업을 등록할 때 부여된 식별자를 게임(스튜디오) 쪽에서 별도로 알고 있어야 이 값을 채울 수 있어요.
See Also
StovePCProduct
종류 구조체 · 모듈 IAP · 버전 3.0.0.4 · 폐기 예정
Description
폐기(deprecated)된
IAP_FetchProducts기본형의 콜백 타입이에요. 대신 StovePCProductEx 를 사용하는 IAP_FetchProductsEx 를 사용하세요.
상점에서 판매하는 상품 한 항목을 나타내요. IAP_FetchProducts() 호출 결과로 OnFetchProductsFinished 콜백에 배열 형태로 전달돼요.
SDK 가 채워서 콜백으로 전달하는 값 타입이에요. 호출자가 직접 만들지 않아요. 멤버가 31개로 많아 아래 ## Fields 를 성격별로 나누어 정리했어요.
StovePCProductEx 는 이 구조체와 동일한 31개 필드에 PurchaseAvailabilityCode(구매 가능 코드) 필드 1개를 추가한 32개 필드 구조체예요. IAP_FetchProducts() 는 StovePCProduct 를, IAP_FetchProductsEx() 는 StovePCProductEx 를 사용해요. IAP_FetchProducts() 는 폐기(deprecated)되었으므로, 실제 연동에는 항상 IAP_FetchProductsEx() 를 사용해 주세요.
콜백으로 전달되는 배열과 각 항목은 콜백 호출이 끝나면 더 이상 유효하지 않아요. 보관이 필요한 값은 콜백 안에서 복사(대입 연산자 또는 복사 생성자)해 두어야 해요.
Declaration
namespace Stove
{
namespace PCSDK
{
namespace IAP
{
struct StovePCProduct
{
public:
// 멤버 접근은 아래 Fields 의 Getter 메서드를 사용합니다.
};
}
}
}
Members
기본 정보
| Name | Type | Access | Description |
|---|---|---|---|
GetProductId() | int64_t | 읽기 | 플랫폼 상품 아이디예요. |
GetGameItemId() | const wchar_t* | 읽기 | 상품 아이디에 매핑되는 게임 내 아이템 아이디예요. |
GetName() | const wchar_t* | 읽기 | 상품명이에요. |
GetDescription() | const wchar_t* | 읽기 | 상품 상세예요. |
GetQuantity() | int32_t | 읽기 | 개별 상품 수량이에요. |
GetProductTypeCode() | ProductTypeCode | 읽기 | 아이템 유형 코드예요. |
GetCategoryId() | const wchar_t* | 읽기 | 카테고리 아이디예요. |
GetCategoryName() | const wchar_t* | 읽기 | 카테고리 이름이에요. |
GetThumbnailUrl() | const wchar_t* | 읽기 | 대표 상품 이미지 URL 이에요. |
가격
| Name | Type | Access | Description |
|---|---|---|---|
GetCurrencyCode() | const wchar_t* | 읽기 | 통화 코드예요. 상품 가격 표시에 사용해요. |
GetPrice() | double | 읽기 | 상품 정가(결제)예요. 상품의 정가 가격 표시에만 사용해 주세요. |
GetDisplayPrice() | double | 읽기 | 상품 정가(전시)예요. 현재 사용되지 않아요. |
GetDisplayPriceString() | const wchar_t* | 읽기 | 상품 정가 문자열(전시)예요. 정가 가격 표시에만 사용해 주세요. |
GetSalePrice() | double | 읽기 | 상품 판매가(결제)예요. 상점에 실제 판매가를 표시할 때와 상품 구매 요청 시 전달하는 값이에요. 파트너스에서 할인을 설정하면 할인 가격이 자동으로 반영돼요. |
GetDisplaySalePrice() | double | 읽기 | 상품 판매가(전시)예요. 현재 사용되지 않아요. |
GetDisplaySalePriceString() | const wchar_t* | 읽기 | 상품 판매가 문자열(전시)예요. 상점에 통화 기호가 포함된 실제 판매가를 표시할 때 사용해요. 파트너스에서 할인을 설정하면 할인 가격이 자동으로 반영돼요. |
할인
| Name | Type | Access | Description |
|---|---|---|---|
IsDiscount() | bool | 읽기 | 할인 여부예요. |
GetDiscountType() | DiscountType | 읽기 | 할인 유형이에요. |
GetDiscountTypeValue() | int32_t | 읽기 | 할인 값이에요. |
GetDiscountBeginDate() | int64_t | 읽기 | 할인 시작 일자(epoch time milliseconds)이에요. |
GetDiscountEndDate() | int64_t | 읽기 | 할인 종료 일자(epoch time milliseconds)이에요. |
구매 수량 및 이력
| Name | Type | Access | Description |
|---|---|---|---|
GetTotalQuantity() | int32_t | 읽기 | 상품 총 판매 수량이에요. |
GetMemberQuantity() | int32_t | 읽기 | 회원 구매 수량이에요. 로그인한 계정별 구매 수량이에요. |
GetGuidQuantity() | int32_t | 읽기 | guid 구매 수량이에요. 게임의 고유한 계정별 구매 수량이에요. |
CanWithdraw() | bool | 읽기 | 청약 철회 가능 여부예요. |
GetPurchasedAtLeastOnce() | bool | 읽기 | 구매 여부예요. 구매 이력이 한 건 이상이면 true 예요. |
구매 제한 및 판매 기간
| Name | Type | Access | Description |
|---|---|---|---|
GetPurchaseLimitTypeCode() | PurchaseLimitTypeCode | 읽기 | 구매 제한 유형이에요. |
GetPurchaseLimitCount() | int32_t | 읽기 | 판매 제한 수량이에요. GetPurchaseLimitTypeCode() 값이 CHARACTER 이면 회원별 제한 수량이에요. |
GetSaleLimitCount() | int32_t | 읽기 | 총 판매 제한 수량이에요. 0 이면 무제한이에요. |
GetSaleBeginDate() | int64_t | 읽기 | 판매 시작 일자(epoch time milliseconds)이에요. 판매 기간이 상시이면 0 을 반환해요. |
GetSaleEndDate() | int64_t | 읽기 | 판매 종료 일자(epoch time milliseconds)이에요. 판매 기간이 상시이면 0 을 반환해요. |
Example
using namespace Stove::PCSDK;
using namespace Stove::PCSDK::IAP;
void __cdecl OnFetchProductsFinished(CallbackResult callbackResult, StovePCProduct* products, uint32_t productSize)
{
if (callbackResult.GetResult().IsSuccessful())
{
for (uint32_t i = 0; i < productSize; ++i)
{
int64_t productId = products[i].GetProductId();
const wchar_t* name = products[i].GetName();
double salePrice = products[i].GetSalePrice();
bool onSale = products[i].IsDiscount();
// 필요한 값만 복사해서 보관해 주세요.
}
// 성공 시 로직을 구현해 주세요.
}
else
{
// 실패 시 로직을 구현해 주세요.
}
}
Notes
- IAP_FetchProducts 의 출력으로만 전달돼요.
GetPrice()/GetSalePrice()는 결제 처리(서버 검증)에 사용하고,GetDisplayPrice()/GetDisplaySalePrice()/GetDisplayPriceString()/GetDisplaySalePriceString()는 화면 표시에만 사용해 주세요.- 구매 시 서버가 관찰한 가격과의 불일치를 검사하므로, StovePCOrderProduct 의
SalePrice에는 이 상품의GetSalePrice()값을 그대로 전달해야 해요.
See Also
StovePCProductEx
종류 구조체 · 모듈 IAP · 버전 3.4.1
Description
상점에서 판매하는 상품 한 항목을 나타내요. IAP_FetchProductsEx() 호출 결과로 OnFetchProductsExFinished 콜백에 배열 형태로 전달돼요.
SDK 가 채워서 콜백으로 전달하는 값 타입이에요. 호출자가 직접 만들지 않아요. 멤버가 32개로 많아 아래 ## Fields 를 성격별로 나누어 정리했어요.
이 구조체는 StovePCProduct 와 동일한 31개 필드에 PurchaseAvailabilityCode(구매 가능 코드) 필드 1개를 추가한 32개 필드 구조체예요. IAP_FetchProducts() 는 StovePCProduct 를, IAP_FetchProductsEx() 는 StovePCProductEx 를 사용해요. 구매 가능 코드가 필요하면 IAP_FetchProductsEx() 를 사용해 주세요.
콜백으로 전달되는 배열과 각 항목은 콜백 호출이 끝나면 더 이상 유효하지 않아요. 보관이 필요한 값은 콜백 안에서 복사(대입 연산자 또는 복사 생성자)해 두어야 해요.
Declaration
namespace Stove
{
namespace PCSDK
{
namespace IAP
{
struct StovePCProductEx
{
public:
// 멤버 접근은 아래 Fields 의 Getter 메서드를 사용합니다.
};
}
}
}
Members
기본 정보
| Name | Type | Access | Description |
|---|---|---|---|
GetProductId() | int64_t | 읽기 | 플랫폼 상품 아이디예요. |
GetGameItemId() | const wchar_t* | 읽기 | 상품 아이디에 매핑되는 게임 내 아이템 아이디예요. |
GetName() | const wchar_t* | 읽기 | 상품명이에요. |
GetDescription() | const wchar_t* | 읽기 | 상품 상세예요. |
GetQuantity() | int32_t | 읽기 | 개별 상품 수량이에요. |
GetProductTypeCode() | ProductTypeCode | 읽기 | 아이템 유형 코드예요. |
GetCategoryId() | const wchar_t* | 읽기 | 카테고리 아이디예요. |
GetCategoryName() | const wchar_t* | 읽기 | 카테고리 이름이에요. |
GetThumbnailUrl() | const wchar_t* | 읽기 | 대표 상품 이미지 URL 이에요. |
가격
| Name | Type | Access | Description |
|---|---|---|---|
GetCurrencyCode() | const wchar_t* | 읽기 | 통화 코드예요. 상품 가격 표시에 사용해요. |
GetPrice() | double | 읽기 | 상품 정가(결제)예요. 상품의 정가 가격 표시에만 사용해 주세요. |
GetDisplayPrice() | double | 읽기 | 상품 정가(전시)예요. 현재 사용되지 않아요. |
GetDisplayPriceString() | const wchar_t* | 읽기 | 상품 정가 문자열(전시)예요. 정가 가격 표시에만 사용해 주세요. |
GetSalePrice() | double | 읽기 | 상품 판매가(결제)예요. 상점에 실제 판매가를 표시할 때와 상품 구매 요청 시 전달하는 값이에요. 파트너스에서 할인을 설정하면 할인 가격이 자동으로 반영돼요. |
GetDisplaySalePrice() | double | 읽기 | 상품 판매가(전시)예요. 현재 사용되지 않아요. |
GetDisplaySalePriceString() | const wchar_t* | 읽기 | 상품 판매가 문자열(전시)예요. 상점에 통화 기호가 포함된 실제 판매가를 표시할 때 사용해요. 파트너스에서 할인을 설정하면 할인 가격이 자동으로 반영돼요. |
할인
| Name | Type | Access | Description |
|---|---|---|---|
IsDiscount() | bool | 읽기 | 할인 여부예요. |
GetDiscountType() | DiscountType | 읽기 | 할인 유형이에요. |
GetDiscountTypeValue() | int32_t | 읽기 | 할인 값이에요. |
GetDiscountBeginDate() | int64_t | 읽기 | 할인 시작 일자(epoch time milliseconds)이에요. |
GetDiscountEndDate() | int64_t | 읽기 | 할인 종료 일자(epoch time milliseconds)이에요. |
구매 수량 및 이력
| Name | Type | Access | Description |
|---|---|---|---|
GetTotalQuantity() | int32_t | 읽기 | 상품 총 판매 수량이에요. |
GetMemberQuantity() | int32_t | 읽기 | 회원 구매 수량이에요. 로그인한 계정별 구매 수량이에요. |
GetGuidQuantity() | int32_t | 읽기 | guid 구매 수량이에요. 게임의 고유한 계정별 구매 수량이에요. |
CanWithdraw() | bool | 읽기 | 청약 철회 가능 여부예요. |
GetPurchasedAtLeastOnce() | bool | 읽기 | 구매 여부예요. 구매 이력이 한 건 이상이면 true 예요. |
구매 제한 및 판매 기간
| Name | Type | Access | Description |
|---|---|---|---|
GetPurchaseLimitTypeCode() | PurchaseLimitTypeCode | 읽기 | 구매 제한 유형이에요. |
GetPurchaseLimitCount() | int32_t | 읽기 | 판매 제한 수량이에요. GetPurchaseLimitTypeCode() 값이 CHARACTER 이면 회원별 제한 수량이에요. |
GetSaleLimitCount() | int32_t | 읽기 | 총 판매 제한 수량이에요. 0 이면 무제한이에요. |
GetSaleBeginDate() | int64_t | 읽기 | 판매 시작 일자(epoch time milliseconds)이에요. 판매 기간이 상시이면 0 을 반환해요. |
GetSaleEndDate() | int64_t | 읽기 | 판매 종료 일자(epoch time milliseconds)이에요. 판매 기간이 상시이면 0 을 반환해요. |
GetPurchaseAvailabilityCode() | int16_t | 읽기 | 구매 가능 코드예요. (1: 구매 가능, 2: 구매 불가(구매 제한 초과)) 이 값이 1 이어도, 남은 수량보다 많은 수량으로 구매를 요청하면 구매 불가 응답이 올 수 있어요. StovePCProduct 에는 없는, StovePCProductEx 전용 필드예요. |
Example
using namespace Stove::PCSDK;
using namespace Stove::PCSDK::IAP;
void __cdecl OnFetchProductsExFinished(CallbackResult callbackResult, StovePCProductEx* products, uint32_t productSize)
{
if (callbackResult.GetResult().IsSuccessful())
{
for (uint32_t i = 0; i < productSize; ++i)
{
int64_t productId = products[i].GetProductId();
const wchar_t* name = products[i].GetName();
double salePrice = products[i].GetSalePrice();
int16_t availability = products[i].GetPurchaseAvailabilityCode();
// 필요한 값만 복사해서 보관해 주세요.
}
// 성공 시 로직을 구현해 주세요.
}
else
{
// 실패 시 로직을 구현해 주세요.
}
}
Notes
- IAP_FetchProductsEx 의 출력으로만 전달돼요.
GetPrice()/GetSalePrice()는 결제 처리(서버 검증)에 사용하고,GetDisplayPrice()/GetDisplaySalePrice()/GetDisplayPriceString()/GetDisplaySalePriceString()는 화면 표시에만 사용해 주세요.- 구매 시 서버가 관찰한 가격과의 불일치를 검사하므로, StovePCOrderProduct 의
SalePrice에는 이 상품의GetSalePrice()값을 그대로 전달해야 해요.
See Also
StovePCPurchasedProduct
종류 구조체 · 모듈 IAP · 버전 3.1.0
Description
구매가 완료된 상품 한 항목을 나타내요. IAP_StartPurchase() 콜백(StovePCPurchaseResult 내부 배열)과 IAP_ConfirmPurchase() 콜백(OnConfirmPurchaseFinished)에 배열 형태로 전달돼요.
SDK 가 채워서 콜백으로 전달하는 값 타입이에요. 호출자가 직접 만들지 않아요.
Setter 가 공개되어 있지만, 일반적인 연동에서는 SDK 가 채워 주는 값을 읽기 용도로만 사용해 주세요. 콜백으로 전달되는 배열과 각 항목은 콜백 호출이 끝나면 더 이상 유효하지 않으므로, 보관이 필요한 값은 콜백 안에서 복사(대입 연산자 또는 복사 생성자)해 두어야 해요.
Declaration
namespace Stove
{
namespace PCSDK
{
namespace IAP
{
struct StovePCPurchasedProduct
{
public:
int64_t GetTransactionDetailNumber() const;
void SetTransactionDetailNumber(int64_t transactionDetailNumber);
int64_t GetProductId() const;
void SetProductId(int64_t productId);
const wchar_t* GetCategoryId() const;
void SetCategoryId(const wchar_t* categoryId);
int32_t GetTotalQuantity() const;
void SetTotalQuantity(int32_t totalQuantity);
int32_t GetMemberQuantity() const;
void SetMemberQuantity(int32_t memberQuantity);
int32_t GetGuidQuantity() const;
void SetGuidQuantity(int32_t guidQuantity);
};
}
}
}
Members
| Name | Type | Access | Description |
|---|---|---|---|
GetTransactionDetailNumber() / SetTransactionDetailNumber() | int64_t | 읽기·쓰기 | 구매 상세 번호(구매 상품 TID)예요. |
GetProductId() / SetProductId() | int64_t | 읽기·쓰기 | 플랫폼 상품 아이디예요. |
GetCategoryId() / SetCategoryId() | const wchar_t* | 읽기·쓰기 | 카테고리 아이디예요. |
GetTotalQuantity() / SetTotalQuantity() | int32_t | 읽기·쓰기 | 상품 총 판매 수량이에요. |
GetMemberQuantity() / SetMemberQuantity() | int32_t | 읽기·쓰기 | 회원 구매 수량이에요. |
GetGuidQuantity() / SetGuidQuantity() | int32_t | 읽기·쓰기 | guid 구매 수량이에요. |
Example
using namespace Stove::PCSDK;
using namespace Stove::PCSDK::IAP;
void __cdecl OnConfirmPurchaseFinished(CallbackResult callbackResult, bool status,
StovePCPurchasedProduct* purchasedProducts, uint32_t purchasedProductSize,
StovePCChargeInfo* chargeInfos, uint32_t chargeInfoSize)
{
if (callbackResult.GetResult().IsSuccessful() && status)
{
for (uint32_t i = 0; i < purchasedProductSize; ++i)
{
int64_t productId = purchasedProducts[i].GetProductId();
int64_t transactionDetailNumber = purchasedProducts[i].GetTransactionDetailNumber();
// 필요한 값만 복사해서 보관해 주세요.
}
// 성공 시 로직을 구현해 주세요.
}
else
{
// 실패 시 로직을 구현해 주세요.
}
}
Notes
- IAP_StartPurchase, IAP_ConfirmPurchase 의 출력으로 전달돼요.
IAP_StartPurchase()콜백에서는PurchaseOption의Operation이WITH_WEBVIEW_AND_CONFIRM_RESULT이고 결제가 성공했을 때만 채워져요.
See Also
StovePCPurchaseOperation
종류 열거형 · 모듈 IAP · 버전 3.0.0.4
Description
IAP_StartPurchase / IAP_StartPurchaseEx 호출 시 StovePCPurchaseOption::SetOperation() 으로 설정하는 값이에요. Stove Webview 사용 여부와 구매 확정(Confirm) 처리 방식을 결정해요.
Declaration
enum class StovePCPurchaseOperation : uint32_t
{
DEFAULT = 0,
WITH_WEBVIEW = 1,
WITH_WEBVIEW_AND_CONFIRM_RESULT = 2,
_MAX_COUNT
};
Enum Values
| Code | Name | Description |
|---|---|---|
| 0 | DEFAULT | 가장 기초적인 동작이에요. Stove Webview를 사용하지 않고 인게임 결제를 수동으로 연동하는 경우에 사용해요. 결과에 포함된 일회용 URL을 통해 Stove 웹 결제 페이지를 별도로 열어서 결제를 진행해야 하며, 결제 후 IAP_ConfirmPurchase 를 수동으로 호출해 구매 결과를 확인해야 해요 |
| 1 | WITH_WEBVIEW | Stove Webview를 통해 Stove 웹 결제 페이지를 열고 인게임 결제를 진행해요. 웹뷰 내에서 결제 진행 후 IAP_ConfirmPurchase 를 수동으로 호출해 구매 결과를 확인해야 해요 |
| 2 | WITH_WEBVIEW_AND_CONFIRM_RESULT | (권장) Stove Webview를 통해 Stove 웹 결제 페이지를 열고 인게임 결제를 진행하며, 결제가 성공적으로 완료되면 IAP_ConfirmPurchase 를 자동으로 호출하여 구매 결과를 확인하고 반환해요 |
| 3 | _MAX_COUNT | 사용하지 않아요 (열거형의 끝을 나타내는 값이며 유효한 operation이 아니에요) |
Example
using namespace Stove::PCSDK::IAP;
StovePCPurchaseOption purchaseOption;
purchaseOption.SetOperation(StovePCPurchaseOperation::WITH_WEBVIEW_AND_CONFIRM_RESULT);
Notes
- 값이
WITH_WEBVIEW_AND_CONFIRM_RESULT가 아니면 결제 후 IAP_ConfirmPurchase 를 반드시 호출해야 해요. WITH_WEBVIEW,WITH_WEBVIEW_AND_CONFIRM_RESULT로 설정하면StovePCPurchaseOption의WebviewMode/WebviewRect설정이 함께 적용돼요.
See Also
StovePCPurchaseOption
종류 구조체 · 모듈 IAP · 버전 3.0.0.4
Description
IAP_StartPurchase() 수행 시 동작 방식(수동 연동 / Stove Webview 연동 / Stove Webview + 자동 확정)과, Webview 사용 시 표시 위치를 지정하는 구조체예요. StovePCStartPurchaseParam 의 PurchaseOption 으로 전달해요.
호출자가 스택에 직접 선언한 뒤 Set*() 메서드로 값을 채워요. 값 타입이므로 별도의 해제가 필요하지 않아요.
Declaration
namespace Stove
{
namespace PCSDK
{
namespace IAP
{
struct StovePCPurchaseOption
{
public:
StovePCPurchaseOperation GetOperation() const;
void SetOperation(StovePCPurchaseOperation operation);
Base::WebViewMode GetWebviewMode() const;
void SetWebviewMode(Base::WebViewMode mode);
void GetWebviewRect(int32_t* x, int32_t* y, int32_t* width, int32_t* height) const;
void SetWebviewRect(int32_t x, int32_t y, int32_t width, int32_t height);
};
}
}
}
Members
| Name | Type | Access | Description |
|---|---|---|---|
GetOperation() / SetOperation() | StovePCPurchaseOperation | 읽기·쓰기 | IAP_StartPurchase() 수행 시 동작 방식이에요. |
GetWebviewMode() / SetWebviewMode() | WebViewMode | 읽기·쓰기 | Stove Webview 사용 시 타입이에요. Operation != DEFAULT 일 때 적용돼요. |
GetWebviewRect() / SetWebviewRect() | int32_t x, y, width, height | 읽기·쓰기 | Stove 결제 페이지 표시용 Webview 의 위치와 크기(x, y, width, height)를 한 번에 설정·조회해요. 내부적으로 webviewPosX, webviewPosY, webviewWidth, webviewHeight 네 개의 필드에 대응해요. Operation != DEFAULT 일 때 적용돼요. |
Example
using namespace Stove::PCSDK;
using namespace Stove::PCSDK::Base;
using namespace Stove::PCSDK::IAP;
StovePCPurchaseOption option;
option.SetOperation(StovePCPurchaseOperation::WITH_WEBVIEW_AND_CONFIRM_RESULT);
option.SetWebviewMode(WebViewMode::EXTERNAL);
option.SetWebviewRect(0, 0, 800, 600);
Notes
WITH_WEBVIEW_AND_CONFIRM_RESULT(권장) 을 사용하면 결제가 성공적으로 완료된 뒤IAP_ConfirmPurchase()를 SDK 가 자동으로 호출하여 구매 결과를 확인해 줘요.DEFAULT를 사용하면 결과에 포함된 일회용 URL 로 결제 페이지를 직접 열고, 결제 완료 후 IAP_ConfirmPurchase 를 수동으로 호출해야 해요.
See Also
StovePCPurchaseResult
종류 구조체 · 모듈 IAP · 버전 3.0.0.4
Description
IAP_StartPurchase() 호출 결과를 나타내요. OnStartPurchaseFinished 콜백에 값으로 전달돼요. 어느 필드가 채워지는지는 StovePCPurchaseOption 의 Operation 값에 따라 달라져요.
Operation이DEFAULT또는WITH_WEBVIEW이면OneTimePaymentUrl이 채워져요.Operation이WITH_WEBVIEW_AND_CONFIRM_RESULT이고 결제가 성공하면Purchased,PurchasedProducts,ChargeInfos가 채워져요.
SDK 가 채워서 콜백으로 전달하는 값 타입이에요. 호출자가 직접 만들지 않아요.
TransactionDetailNumbers,PurchasedProducts,ChargeInfos가 가리키는 배열과 각 항목은 콜백 호출이 끝나면 더 이상 유효하지 않아요. 보관이 필요한 값은 콜백 안에서 복사(대입 연산자 또는 복사 생성자)해 두어야 해요.
Declaration
namespace Stove
{
namespace PCSDK
{
namespace IAP
{
struct StovePCPurchaseResult
{
public:
// 멤버 접근은 아래 Fields 의 Getter 메서드를 사용합니다.
};
}
}
}
Members
TransactionDetailNumbers, PurchasedProducts, ChargeInfos 는 각각 배열-개수 쌍으로 관리돼요. Create*List(count) 로 배열을 할당하고, Get*Count() 는 개수를, Get*(index) 는 index 번째 항목을 반환해요. SDK 가 콜백 전달 전에 이 메서드들로 값을 채워 줘요.
| Name | Type | Access | Description |
|---|---|---|---|
GetTransactionMasterNumber() | int64_t | 읽기 | 거래 고유 마스터 번호(결제 TID)예요. |
CreateTransactionDetailNumberList() / GetTransactionDetailNumbers() / SetTransactionDetailNumber() / GetTransactionDetailNumberCount() | int64_t 배열 | 읽기·쓰기 | 구매 상세 번호(구매 상품 TID) 목록(transactionDetailNumbers)과 개수(transactionDetailNumberCount)이에요. |
GetOneTimePaymentUrl() | const wchar_t* | 읽기 | 일회용 결제 URL 이에요. Operation 이 DEFAULT 또는 WITH_WEBVIEW 일 때 채워져요. |
GetPurchaseProgress() | PurchaseProgress | 읽기 | 구매 진행 상태예요. |
IsPurchased() | bool | 읽기 | 구매 결과예요. Operation 이 WITH_WEBVIEW_AND_CONFIRM_RESULT 이고 결제가 성공했으면 true, 그 외에는 false 이에요. |
GetExtraData() | const wchar_t* | 읽기 | IAP_StartPurchase() 호출 시 전달한 ExtraData 문자열의 에코예요. |
CreatePurchasedProductList() / GetPurchasedProduct() / SetPurchasedProduct() / GetPurchasedProductCount() | StovePCPurchasedProduct 배열 | 읽기·쓰기 | 구매한 상품 목록(purchasedProducts)과 개수(purchasedProductCount)이에요. Operation 이 WITH_WEBVIEW_AND_CONFIRM_RESULT 이고 결제가 성공했을 때 채워져요. |
CreateChargeInfoList() / GetChargeInfo() / SetChargeInfo() / GetChargeInfoCount() | StovePCChargeInfo 배열 | 읽기·쓰기 | 구매 시 사용한 재화 정보 목록(chargeInfos)과 개수(chargeInfoCount)이에요. |
Example
using namespace Stove::PCSDK;
using namespace Stove::PCSDK::IAP;
void __cdecl OnStartPurchaseFinished(CallbackResult callbackResult, StovePCPurchaseResult purchaseResult)
{
if (callbackResult.GetResult().IsSuccessful())
{
PurchaseProgress progress = purchaseResult.GetPurchaseProgress();
if (progress == PurchaseProgress::NEED_PAYMENT_WINDOW)
{
const wchar_t* paymentUrl = purchaseResult.GetOneTimePaymentUrl();
// paymentUrl 을 열어 결제를 진행한 뒤 IAP_ConfirmPurchase() 를 호출해 주세요.
}
else if (purchaseResult.IsPurchased())
{
uint32_t productCount = purchaseResult.GetPurchasedProductCount();
for (uint32_t i = 0; i < productCount; ++i)
{
const StovePCPurchasedProduct* product = purchaseResult.GetPurchasedProduct(i);
// 필요한 값만 복사해서 보관해 주세요.
}
}
// 성공 시 로직을 구현해 주세요.
}
else
{
// 실패 시 로직을 구현해 주세요.
}
}
Notes
- IAP_StartPurchase 의 출력으로만 전달돼요.
PurchaseProgress가NEED_PAYMENT_WINDOW이면OneTimePaymentUrl로 결제 창을 열고, 결제 후 IAP_ConfirmPurchase 로 구매를 확정해야 해요.ExtraData는 StovePCStartPurchaseParam 의ExtraData를 그대로 반환해요.
See Also
- StovePCStartPurchaseParam
- StovePCPurchaseOption
- StovePCPurchasedProduct
- StovePCChargeInfo
- IAP_StartPurchase
- IAP_ConfirmPurchase
StovePCRefreshUserBenefits
종류 구조체 · 모듈 PCBang · 버전 3.0.2
Description
PCBang_UserLogin() 호출 시 혜택 갱신 콜백(onRefreshBenefitsFinished)으로 응답받는 구조체예요. 유저 혜택 코드와 PC방 프리미엄 남은 시간을 담아요.
SDK 가 콜백 인자로 값을 채워서 넘겨줘요. 값 타입으로 전달되며, 별도의 해제가 필요하지 않아요.
실패 시 두 필드 모두 전달되지 않아요.
Declaration
namespace Stove
{
namespace PCSDK
{
namespace PCBang
{
struct StovePCRefreshUserBenefits
{
public:
PCBangPremium GetPremiumStatus() const;
int32_t GetRemainTime() const;
};
}
}
}
Members
| Name | Type | Access | Description |
|---|---|---|---|
GetPremiumStatus() | PCBangPremium | 읽기 | 유저 혜택 코드예요. 실패 시 전달되지 않아요. |
GetRemainTime() | int32_t | 읽기 | PC방 프리미엄 남은 시간이에요. 실패 시 전달되지 않아요. |
Example
using namespace Stove::PCSDK;
using namespace Stove::PCSDK::PCBang;
void __cdecl OnRefreshBenefitsFinished(CallbackResult callbackResult, StovePCRefreshUserBenefits refreshUserBenefits)
{
if (callbackResult.GetResult().IsSuccessful())
{
PCBangPremium premiumStatus = refreshUserBenefits.GetPremiumStatus();
int32_t remainTime = refreshUserBenefits.GetRemainTime();
// 갱신된 혜택 정보를 반영하는 로직을 구현해 주세요.
}
else
{
// 실패 시 로직을 구현해 주세요.
}
}
Notes
- 이 구조체는 PCBang_UserLogin() 의 혜택 갱신 콜백(
onRefreshBenefitsFinished)으로 전달돼요. - 콜백은
Base_RunCallback()을 호출한 스레드에서 실행되며, 4분마다 반복 호출돼요. PCBANG_FREE(무료가맹) 상태에서도 이 콜백은 계속 호출돼요.
See Also
StovePCShopCategory
종류 구조체 · 모듈 IAP · 버전 3.0.0.4
Description
스토브 플랫폼에 등록된 상점 카테고리 한 항목을 나타내요. IAP_FetchShopCategories() 호출 결과로 OnFetchShopCategoriesFinished 콜백에 배열 형태로 전달돼요.
SDK 가 채워서 콜백으로 전달하는 값 타입이에요. 호출자가 직접 만들지 않아요.
콜백으로 전달되는 배열과 각 항목은 콜백 호출이 끝나면 더 이상 유효하지 않아요. 보관이 필요한 값은 콜백 안에서 복사(대입 연산자 또는 복사 생성자)해 두어야 해요.
Declaration
namespace Stove
{
namespace PCSDK
{
namespace IAP
{
struct StovePCShopCategory
{
public:
const wchar_t* GetCategoryId() const;
const wchar_t* GetParentCategoryId() const;
int32_t GetDisplayNumber() const;
const wchar_t* GetName() const;
int32_t GetDepth() const;
};
}
}
}
Members
| Name | Type | Access | Description |
|---|---|---|---|
GetCategoryId() | const wchar_t* | 읽기 | 카테고리 아이디예요. |
GetParentCategoryId() | const wchar_t* | 읽기 | 부모 카테고리 아이디예요. |
GetDisplayNumber() | int32_t | 읽기 | 카테고리 표시 순서예요. |
GetName() | const wchar_t* | 읽기 | 카테고리명이에요. |
GetDepth() | int32_t | 읽기 | 계층 구조상의 깊이예요. |
Example
using namespace Stove::PCSDK;
using namespace Stove::PCSDK::IAP;
void __cdecl OnFetchShopCategoriesFinished(CallbackResult callbackResult, StovePCShopCategory* shopCategorys, uint32_t shopCategorySize)
{
if (callbackResult.GetResult().IsSuccessful())
{
for (uint32_t i = 0; i < shopCategorySize; ++i)
{
const wchar_t* categoryId = shopCategorys[i].GetCategoryId();
const wchar_t* name = shopCategorys[i].GetName();
// 필요한 값만 복사해서 보관해 주세요.
}
// 성공 시 로직을 구현해 주세요.
}
else
{
// 실패 시 로직을 구현해 주세요.
}
}
Notes
GetCategoryId()로 얻은 값은 StovePCFetchProductParam 의 카테고리 필터로 그대로 전달할 수 있어요.GetParentCategoryId()/GetDepth()로 카테고리 계층 구조를 구성할 수 있어요.
See Also
StovePCShutdown
종류 구조체 · 모듈 Base · 버전 3.0.0.4
Description
Base_ShutdownNotification() API 호출 시 전달받는 셧다운에 대한 구조체예요. 사용자의 셧다운까지 남은 시간(분), 셧다운 알림 메세지, 메세지 노출 시간(초)을 담아요.
SDK 가 콜백 인자로 값을 채워서 넘겨줘요. 값 타입으로 값 전달되며, 별도의 해제가 필요하지 않아요.
Declaration
namespace Stove
{
namespace PCSDK
{
namespace Base
{
struct StovePCShutdown
{
public:
int32_t GetInadvanceTimeInMinutes() const;
const wchar_t* GetShutdownMessage() const;
int32_t GetExposureTimeInSeconds() const;
};
}
}
}
Members
| Name | Type | Access | Description |
|---|---|---|---|
GetInadvanceTimeInMinutes() | int32_t | 읽기 | 사용자의 셧다운까지 남은 시간(분)이에요. |
GetShutdownMessage() | const wchar_t* | 읽기 | 셧다운 알림 메세지예요. |
GetExposureTimeInSeconds() | int32_t | 읽기 | 메세지 노출 시간(초)예요. |
Example
using namespace Stove::PCSDK;
using namespace Stove::PCSDK::Base;
void __cdecl OnShutdownFinishedCallback(CallbackResult callbackResult, StovePCShutdown shutdown)
{
if (callbackResult.result.IsSuccessful())
{
int32_t inadvanceTimeInMinutes = shutdown.GetInadvanceTimeInMinutes();
const wchar_t* shutdownMessage = shutdown.GetShutdownMessage();
// 성공 시 로직을 구현해 주세요.
}
else
{
// 실패 시 로직을 구현해 주세요.
}
}
Notes
Base_ShutdownNotification()은 한국 전용이 아니에요. 셧다운 정책이 적용된 계정이면 국가와 관계없이 셧다운 대상자에게 값을 전달해요.- 콜백은
Base_RunCallback()을 호출한 스레드에서 실행돼요.
See Also
StovePCSignin
종류 구조체 · 모듈 Base · 버전 3.0.0.4
Description
Base_GetSignin() API 호출 시 전달받는 Signin 정보에 대한 구조체예요. 본인인증·이메일인증 진행 여부, 가입국가코드, 로그인 시 사용한 인증방법(IDP) 구분코드, 계정타입코드를 담아요.
호출자가 스택에 선언한 뒤 주소를 Base_GetSignin() 에 넘기면 SDK 가 값을 채워줘요. 값 타입이므로 별도의 해제가 필요하지 않아요.
Declaration
namespace Stove
{
namespace PCSDK
{
namespace Base
{
struct StovePCSignin
{
public:
bool GetPersonVerify() const;
bool GetEmailVerify() const;
const wchar_t* GetNationality() const;
const wchar_t* GetProviderCode() const;
int GetAccountType() const;
};
}
}
}
Members
| Name | Type | Access | Description |
|---|---|---|---|
GetPersonVerify() | bool | 읽기 | 본인인증을 진행했는지 여부예요. |
GetEmailVerify() | bool | 읽기 | 이메일인증을 진행했는지 여부예요. |
GetNationality() | const wchar_t* | 읽기 | Stove 플랫폼 가입국가코드예요(ISO 3166-1 ALPHA-2 CODE). |
GetProviderCode() | const wchar_t* | 읽기 | IDP(Identity Provider) 구분코드예요. Stove 로그인 시점에 사용한 인증방법을 의미해요. 예: SO(Stove 이메일 아이디), FB(페이스북), TW(트위터), NAVER(네이버), GP(구글), APPLE(애플), SAO(일회용 번호), QR(QR코드 로그인), RT(PC클라이언트기반 자동 로그인), LINE, STEAM(스팀) 등. |
GetAccountType() | int | 읽기 | 계정타입코드예요. 예: 2(FACEBOOK), 3(TWITTER), 6(네이버), 9(구글플러스), 11(Stove PC회원가입), 12(애플), 13(라인), 14(라인게임즈), 15(스팀). |
Example
using namespace Stove::PCSDK;
using namespace Stove::PCSDK::Base;
StovePCSignin signin;
Result result = Base_GetSignin(&signin);
if (result.IsSuccessful())
{
bool personVerify = signin.GetPersonVerify();
const wchar_t* providerCode = signin.GetProviderCode();
// 성공 시 로직을 구현해 주세요.
}
else
{
// 실패 시 로직을 구현해 주세요.
}
Notes
GetProviderCode()와GetAccountType()은 같은 로그인 방식을 서로 다른 체계(문자 코드 / 숫자 코드)로 나타내요. 위 표에 나열된 값 외의 값이 반환될 수도 있어요.
See Also
StovePCStartPurchaseParam
종류 구조체 · 모듈 IAP · 버전 3.0.0.4
Description
IAP_StartPurchase(), IAP_StartPurchaseEx() API 를 호출할 때 전달하는 구조체예요. 구매할 상품 목록, 실행 옵션, 서비스 주문 번호, 요청 추가 데이터를 담아요.
호출자가 스택에 직접 선언한 뒤 CreateOrderProduct() / Set*() 메서드로 값을 채우고, 함수 인자로 주소를 넘겨요. 값 타입이므로 별도의 해제가 필요하지 않지만, 내부 배열(products)은 이 구조체가 소멸할 때 함께 해제돼요.
Declaration
namespace Stove
{
namespace PCSDK
{
namespace IAP
{
struct StovePCStartPurchaseParam
{
public:
void CreateOrderProduct(uint32_t count);
const StovePCOrderProduct* GetOrderProduct(int32_t index) const;
void SetOrderProduct(int32_t index, const StovePCOrderProduct* product);
uint32_t GetOrderProductCount() const;
StovePCPurchaseOption GetPurchaseOption() const;
void SetPurchaseOption(StovePCPurchaseOption option);
const wchar_t* GetServiceTxnNo() const;
void SetServiceTxnNo(const wchar_t* serviceTxnNo);
const wchar_t* GetExtraData() const;
void SetExtraData(const wchar_t* extraData);
};
}
}
}
Members
구매할 상품 목록(products)과 그 개수(productsCount)는 배열-개수 쌍으로 관리돼요. 먼저 CreateOrderProduct(count) 로 배열을 할당한 뒤, 각 index 에 대해 SetOrderProduct(index, product) 로 항목을 채워요. GetOrderProductCount() 는 productsCount 를, GetOrderProduct(index) 는 products[index] 를 반환해요.
| Name | Type | Access | Description |
|---|---|---|---|
CreateOrderProduct() / GetOrderProduct() / SetOrderProduct() / GetOrderProductCount() | StovePCOrderProduct 배열 | 읽기·쓰기 | 구매할 상품 정보 목록(products)과 개수(productsCount)이에요. |
GetPurchaseOption() / SetPurchaseOption() | StovePCPurchaseOption | 읽기·쓰기 | API 실행 옵션이에요. |
GetServiceTxnNo() / SetServiceTxnNo() | const wchar_t* | 읽기·쓰기 | 서비스 주문 번호예요. 필수는 아니며 필요에 따라 설정해요. 최대 길이는 50자이며 특수문자는 포함할 수 없어요. 게임에서 발급한 주문 번호로, NOTI 서버를 통해 전달돼요. |
GetExtraData() / SetExtraData() | const wchar_t* | 읽기·쓰기 | 요청 추가 데이터예요. 필수는 아니며 필요에 따라 설정해요. JSON 형식의 문자열이어야 하며 최대 길이는 500자예요. 게임에서 전달받고자 하는 추가 정보로, NOTI 서버를 통해 전달돼요. |
Example
using namespace Stove::PCSDK;
using namespace Stove::PCSDK::IAP;
StovePCOrderProduct orderProduct;
orderProduct.SetProductId(1234567890LL);
orderProduct.SetSalePrice(9900.0);
orderProduct.SetQuantity(1);
StovePCPurchaseOption option;
option.SetOperation(StovePCPurchaseOperation::WITH_WEBVIEW_AND_CONFIRM_RESULT);
StovePCStartPurchaseParam startPurchaseParam;
startPurchaseParam.CreateOrderProduct(1);
startPurchaseParam.SetOrderProduct(0, &orderProduct);
startPurchaseParam.SetPurchaseOption(option);
startPurchaseParam.SetExtraData(L"{\"characterId\":\"12345\"}");
IAP_StartPurchase(&startPurchaseParam, OnStartPurchaseFinished);
Notes
CreateOrderProduct()를 호출하지 않고SetOrderProduct()를 호출하면 정의되지 않은 동작이 발생할 수 있어요. 배열 개수만큼 먼저CreateOrderProduct()로 할당해 주세요.PurchaseOption의Operation값에 따라 StovePCPurchaseResult 콜백에 채워지는 필드가 달라져요.
See Also
StovePCTermsOperation
종류 열거형 · 모듈 IAP · 버전 3.0.0.4
Description
IAP_FetchTermsAgreement / IAP_FetchTermsAgreementEx 호출 시 StovePCTermsOption::SetOperation() 으로 설정하는 값이에요. Stove Webview 사용 여부를 결정해요.
Declaration
enum class StovePCTermsOperation : uint32_t
{
DEFAULT = 0,
WITH_WEBVIEW = 1,
_MAX_COUNT
};
Enum Values
| Code | Name | Description |
|---|---|---|
| 0 | DEFAULT | 가장 기초적인 동작이에요. Stove Webview를 사용하지 않고 약관 동의를 수동으로 연동하는 경우에 사용해요. 결과에 포함된 일회용 URL을 통해 웹 페이지를 별도로 열어서 약관 동의를 진행해야 해요 |
| 1 | WITH_WEBVIEW | Stove Webview를 통해 웹 페이지를 열고 약관 동의를 진행해요 |
| 2 | _MAX_COUNT | 사용하지 않아요 (열거형의 끝을 나타내는 값이며 유효한 operation이 아니에요) |
Example
using namespace Stove::PCSDK::IAP;
StovePCTermsOption options;
options.SetOperation(StovePCTermsOperation::WITH_WEBVIEW);
Notes
WITH_WEBVIEW로 설정하면StovePCTermsOption의WebviewMode/WebviewRect설정이 함께 적용돼요.
See Also
StovePCTermsOption
종류 구조체 · 모듈 IAP · 버전 3.0.0.4
Description
IAP_FetchTermsAgreement() 수행 시 동작 방식(수동 연동 / Stove Webview 연동)과, Webview 사용 시 표시 위치를 지정하는 구조체예요.
호출자가 스택에 직접 선언한 뒤 Set*() 메서드로 값을 채워요. 값 타입이므로 별도의 해제가 필요하지 않아요.
Declaration
namespace Stove
{
namespace PCSDK
{
namespace IAP
{
struct StovePCTermsOption
{
public:
StovePCTermsOperation GetOperation() const;
void SetOperation(StovePCTermsOperation operation);
Base::WebViewMode GetWebviewMode() const;
void SetWebviewMode(Base::WebViewMode mode);
void GetWebviewRect(int32_t* x, int32_t* y, int32_t* width, int32_t* height) const;
void SetWebviewRect(int32_t x, int32_t y, int32_t width, int32_t height);
};
}
}
}
Members
| Name | Type | Access | Description |
|---|---|---|---|
GetOperation() / SetOperation() | StovePCTermsOperation | 읽기·쓰기 | IAP_FetchTermsAgreement() 수행 시 동작 방식이에요. |
GetWebviewMode() / SetWebviewMode() | WebViewMode | 읽기·쓰기 | Stove Webview 사용 시 타입이에요. Operation != DEFAULT 일 때 적용돼요. |
GetWebviewRect() / SetWebviewRect() | int32_t x, y, width, height | 읽기·쓰기 | Stove 약관 동의 페이지 표시용 Webview 의 위치와 크기(x, y, width, height)를 한 번에 설정·조회해요. 내부적으로 webviewPosX, webviewPosY, webviewWidth, webviewHeight 네 개의 필드에 대응해요. Operation != DEFAULT 일 때 적용돼요. |
Example
using namespace Stove::PCSDK;
using namespace Stove::PCSDK::Base;
using namespace Stove::PCSDK::IAP;
StovePCTermsOption option;
option.SetOperation(StovePCTermsOperation::WITH_WEBVIEW);
option.SetWebviewMode(WebViewMode::EXTERNAL);
option.SetWebviewRect(0, 0, 800, 600);
IAP_FetchTermsAgreement(&option, OnFetchTermsAgreementFinished);
Notes
DEFAULT를 사용하면 결과에 포함된 일회용 URL 로 약관 동의 페이지를 직접 열어야 해요.- 팝업이 닫힐 때의 결과가 필요하면 IAP_FetchTermsAgreementEx 를 사용해 주세요.
See Also
StovePCToken
종류 구조체 · 모듈 Base · 버전 3.0.0.4
Description
Base_AccessTokenRenewed() API 호출 시 응답받는 콜백의 Token 구조체예요. AccessToken 값과 남은 만료 시간을 담아요.
SDK 가 콜백 인자로 값을 채워서 넘겨줘요. 값 타입으로 값 전달되며, 별도의 해제가 필요하지 않아요.
Declaration
namespace Stove
{
namespace PCSDK
{
namespace Base
{
struct StovePCToken
{
public:
const wchar_t* GetAccessToken() const;
int32_t GetExpireIn() const;
};
}
}
}
Members
| Name | Type | Access | Description |
|---|---|---|---|
GetAccessToken() | const wchar_t* | 읽기 | Stove AccessToken 값이에요. |
GetExpireIn() | int32_t | 읽기 | AccessToken 의 남은 만료 시간(초)예요. |
Example
using namespace Stove::PCSDK;
using namespace Stove::PCSDK::Base;
void __cdecl OnRenewTokenFinishedCallback(CallbackResult callbackResult, StovePCToken token)
{
if (callbackResult.result.IsSuccessful())
{
const wchar_t* accessToken = token.GetAccessToken();
int32_t expireIn = token.GetExpireIn();
// 성공 시 로직을 구현해 주세요.
}
else
{
// 실패 시 로직을 구현해 주세요.
}
}
Notes
Base_AccessTokenRenewed()의 콜백 인자로 전달돼요. 새로운 AccessToken을 발급받는 함수가 아니라, 갱신 시점에 발급된 값을 전달만 받는 용도예요.- 콜백은
Base_RunCallback()을 호출한 스레드에서 실행돼요.
See Also
StovePCTraceHint
종류 구조체 · 모듈 Base · 버전 3.0.0.4 · 폐기 예정
Description
폐기(deprecated)된 기능이에요. 신규 인터페이스에서도 제공하지 않아요.
Base_GetTraceHint() API 호출 시 전달받는, 스토브 플랫폼 로그를 추적하기 위한 단서에 대한 구조체예요. 세션 아이디, 레퍼런스(런처 또는 SGA) 세션 아이디, 웹브라우저 구분용 UUID, 최초 구동 프로토콜, 레퍼런스 원천 유형을 담아요.
호출자가 스택에 선언한 뒤 주소를 Base_GetTraceHint() 에 넘기면 SDK 가 값을 채워줘요. 값 타입이므로 별도의 해제가 필요하지 않아요.
Declaration
namespace Stove
{
namespace PCSDK
{
namespace Base
{
struct StovePCTraceHint
{
public:
const wchar_t* GetSessionId() const;
const wchar_t* GetRefSessionId() const;
const wchar_t* GetUUID() const;
const wchar_t* GetServiceProtocol() const;
const wchar_t* GetRefSourceType() const;
};
}
}
}
Members
| Name | Type | Access | Description |
|---|---|---|---|
GetSessionId() | const wchar_t* | 읽기 | PCSDK 가 초기화될 때마다 발급되는 세션 아이디예요. |
GetRefSessionId() | const wchar_t* | 읽기 | 레퍼런스(런처 또는 SGA)가 실행될 때마다 발급되는 세션 아이디예요. |
GetUUID() | const wchar_t* | 읽기 | 웹브라우저를 구분하기 위해 발급되는 아이디예요. |
GetServiceProtocol() | const wchar_t* | 읽기 | 레퍼런스(런처 또는 SGA)의 최초 구동 프로토콜이에요. |
GetRefSourceType() | const wchar_t* | 읽기 | 레퍼런스(런처 또는 SGA)의 원천 유형이에요. |
Example
using namespace Stove::PCSDK;
using namespace Stove::PCSDK::Base;
StovePCTraceHint traceHint;
Result result = Base_GetTraceHint(&traceHint);
if (result.IsSuccessful())
{
const wchar_t* sessionId = traceHint.GetSessionId();
// 성공 시 로직을 구현해 주세요.
}
else
{
// 실패 시 로직을 구현해 주세요.
}
Notes
- 스토브 플랫폼 로그 추적(고객센터 문의 대응 등) 용도로 사용되는 값이에요. 게임에서 별도로 해석하거나 가공할 필요는 없어요.
See Also
StovePCUser
종류 구조체 · 모듈 Base · 버전 3.0.0.4
Description
Base_GetUser() API 호출 시 전달받는 User 정보에 대한 구조체예요. 런처에서 로그인한 유저의 스토브 회원번호, 닉네임, gameUserId 를 담아요.
호출자가 스택에 선언한 뒤 주소를 Base_GetUser() 에 넘기면 SDK 가 값을 채워줘요. 값 타입이므로 별도의 해제가 필요하지 않아요.
Declaration
namespace Stove
{
namespace PCSDK
{
namespace Base
{
struct StovePCUser
{
public:
uint64_t GetMemberNumber() const;
const wchar_t* GetNickname() const;
uint64_t GetGameUserId() const;
};
}
}
}
Members
| Name | Type | Access | Description |
|---|---|---|---|
GetMemberNumber() | uint64_t | 읽기 | 런처에서 로그인한 유저의 스토브 회원번호예요. Deprecated 될 예정이며 GetGameUserId() 를 사용해 주세요. |
GetNickname() | const wchar_t* | 읽기 | 런처에서 로그인한 유저의 스토브 닉네임이에요. |
GetGameUserId() | uint64_t | 읽기 | 런처에서 로그인한 유저의 gameUserId 이에요. |
Example
using namespace Stove::PCSDK;
using namespace Stove::PCSDK::Base;
StovePCUser user;
Result result = Base_GetUser(&user);
if (result.IsSuccessful())
{
uint64_t gameUserId = user.GetGameUserId();
const wchar_t* nickname = user.GetNickname();
// 성공 시 로직을 구현해 주세요.
}
else
{
// 실패 시 로직을 구현해 주세요.
}
Notes
GetMemberNumber()는 Deprecated 될 예정이에요. 신규 연동에는GetGameUserId()를 사용해 주세요.- 로그인이 완료된 상태에서만 유효한 값을 반환해요.
See Also
StovePCVietnamAgeRatingInfo
종류 구조체 · 모듈 Base · 버전 3.4.1
Description
Base_VietnamAgeRatingNotification() API 호출 시 전달받는 베트남 연령 등급 안내에 대한 구조체예요. 오버레이 표시 상태·타입·크기·불투명도, 게임 이용 등급, 안내 메세지, 메세지 노출 위치, 언어 코드를 담아요.
SDK 가 콜백 인자로 값을 채워서 넘겨줘요. 값 타입으로 값 전달되며, 별도의 해제가 필요하지 않아요.
베트남 전용 API이며, 타이머 없이 런처의 SHOW/HIDE 패킷으로만 동작해요.
Declaration
namespace Stove
{
namespace PCSDK
{
namespace Base
{
struct StovePCVietnamAgeRatingInfo
{
public:
StoveOverlayState GetOverlayState() const;
int GetOverlayType() const;
float GetOverlayScale() const;
float GetOverlayOpacity() const;
int GetAgeRating() const;
const wchar_t* GetAgeRatingMessage() const;
float GetDisplayPositionX() const;
float GetDisplayPositionY() const;
const wchar_t* GetLanguage() const;
};
}
}
}
Members
| Name | Type | Access | Description |
|---|---|---|---|
GetOverlayState() | StoveOverlayState | 읽기 | 오버레이 표시 상태예요. |
GetOverlayType() | int | 읽기 | 오버레이 타입이에요. 0=검은색, 1=흰색. |
GetOverlayScale() | float | 읽기 | 오버레이 크기예요(0.0 ~ 1.0). |
GetOverlayOpacity() | float | 읽기 | 오버레이 불투명도예요(0.0 ~ 1.0). |
GetAgeRating() | int | 읽기 | 게임 이용 등급이에요. 0=전체이용가, 12=12세, 16=16세, 18=18세. |
GetAgeRatingMessage() | const wchar_t* | 읽기 | 연령 등급 안내 메세지예요. |
GetDisplayPositionX() | float | 읽기 | 메세지 노출 위치(x좌표)예요. |
GetDisplayPositionY() | float | 읽기 | 메세지 노출 위치(y좌표)예요. |
GetLanguage() | const wchar_t* | 읽기 | 언어 코드예요(예: "ko", "en", "ja", "vi", "zh-cn", "zh-tw", "th"). |
Example
using namespace Stove::PCSDK;
using namespace Stove::PCSDK::Base;
void __cdecl OnVietnamAgeRatingFinishedCallback(CallbackResult callbackResult, StovePCVietnamAgeRatingInfo vietnamAgeRatingInfo)
{
if (callbackResult.result.IsSuccessful())
{
StoveOverlayState overlayState = vietnamAgeRatingInfo.GetOverlayState();
int ageRating = vietnamAgeRatingInfo.GetAgeRating();
// 성공 시 로직을 구현해 주세요.
}
else
{
// 실패 시 로직을 구현해 주세요.
}
}
Notes
- 콜백은
Base_RunCallback()을 호출한 스레드에서 실행돼요. - 1회성 콜백이 아니라 런처의 SHOW/HIDE 패킷에 맞춰 반복적으로 호출될 수 있어요.
GetOverlayState()로 표시/숨김/확장 상태를 구분해 처리해야 해요. - 향후 확장을 위한 예약 필드(
reserved1~reserved10)는 공개 Getter 가 없어 문서에 포함하지 않아요.
See Also
StovePCVietnamOverimmersionInfo
종류 구조체 · 모듈 Base · 버전 3.4.1
Description
Base_VietnamOverimmersionNotification() API 호출 시 전달받는 베트남 과몰입 정보에 대한 구조체예요. 오버레이 표시 상태·타입·크기·불투명도, 게임 이용 등급, 과몰입 경고 메세지(일반/마크업 포함), 게임 경과시간, 메세지 노출 시간, Expand 애니메이션 시간, 메세지 노출 위치, 언어 코드를 담아요.
SDK 가 콜백 인자로 값을 채워서 넘겨줘요. 값 타입으로 값 전달되며, 별도의 해제가 필요하지 않아요.
베트남 전용 API예요.
Declaration
namespace Stove
{
namespace PCSDK
{
namespace Base
{
struct StovePCVietnamOverimmersionInfo
{
public:
StoveOverlayState GetOverlayState() const;
int GetOverlayType() const;
float GetOverlayScale() const;
float GetOverlayOpacity() const;
int GetAgeRating() const;
const wchar_t* GetOverimmersionMessage() const;
const wchar_t* GetStyledMessage() const;
int32_t GetElapsedTime() const;
int32_t GetExposureTime() const;
float GetExpandAnimationTime() const;
float GetDisplayPositionX() const;
float GetDisplayPositionY() const;
const wchar_t* GetLanguage() const;
};
}
}
}
Members
| Name | Type | Access | Description |
|---|---|---|---|
GetOverlayState() | StoveOverlayState | 읽기 | 오버레이 표시 상태예요. |
GetOverlayType() | int | 읽기 | 오버레이 타입이에요. 0=검은색, 1=흰색. |
GetOverlayScale() | float | 읽기 | 오버레이 크기예요(0.0 ~ 1.0). |
GetOverlayOpacity() | float | 읽기 | 오버레이 불투명도예요(0.0 ~ 1.0). |
GetAgeRating() | int | 읽기 | 게임 이용 등급이에요. 0=전체이용가, 12=12세, 16=16세, 18=18세. |
GetOverimmersionMessage() | const wchar_t* | 읽기 | 과몰입 경고 메세지예요. |
GetStyledMessage() | const wchar_t* | 읽기 | <b>, <color=#RRGGBBAA> 등의 마크업 태그를 포함한, 디자인용 과몰입 경고 메세지예요. |
GetElapsedTime() | int32_t | 읽기 | 게임 경과시간(분)이에요. |
GetExposureTime() | int32_t | 읽기 | 메세지 노출 시간(초)예요. |
GetExpandAnimationTime() | float | 읽기 | Expand 애니메이션 시간(초)예요. |
GetDisplayPositionX() | float | 읽기 | 메세지 노출 위치(x좌표)예요. |
GetDisplayPositionY() | float | 읽기 | 메세지 노출 위치(y좌표)예요. |
GetLanguage() | const wchar_t* | 읽기 | 언어 코드예요(예: "ko", "en", "ja", "vi", "zh-cn", "zh-tw", "th"). |
Example
using namespace Stove::PCSDK;
using namespace Stove::PCSDK::Base;
void __cdecl OnVietnamOverimmersionFinishedCallback(CallbackResult callbackResult, StovePCVietnamOverimmersionInfo vietnamOverimmersionInfo)
{
if (callbackResult.result.IsSuccessful())
{
StoveOverlayState overlayState = vietnamOverimmersionInfo.GetOverlayState();
const wchar_t* styledMessage = vietnamOverimmersionInfo.GetStyledMessage();
// 성공 시 로직을 구현해 주세요.
}
else
{
// 실패 시 로직을 구현해 주세요.
}
}
Notes
- 콜백은
Base_RunCallback()을 호출한 스레드에서 실행돼요. - 1회성 콜백이 아니라 게임 플레이 중 정기적으로 호출돼요.
GetOverlayState()로 표시/숨김/확장 상태를 구분해 처리해야 해요. GetOverimmersionMessage()는 일반 텍스트,GetStyledMessage()는 마크업 태그가 포함된 디자인용 텍스트예요. 용도에 맞게 선택해서 사용해 주세요.- 향후 확장을 위한 예약 필드(
reserved1~reserved10)는 공개 Getter 가 없어 문서에 포함하지 않아요.
See Also
StovePCVoidedPurchase
종류 구조체 · 모듈 IAP · 버전 3.0.0.4 · 폐기 예정
Description
환불 조회 기능은 폐기(deprecated)된 기능이에요. 신규 인터페이스에서는 제공하지 않아요.
현재 사용자가 환불 처리한 구매 기록 한 항목을 나타내요. IAP_FetchVoidedPurchases() 호출 결과로 OnFetchVoidedPurchasesFinished 콜백에 배열 형태로 전달돼요.
SDK 가 채워서 콜백으로 전달하는 값 타입이에요. 호출자가 직접 만들지 않아요.
콜백으로 전달되는 배열과 각 항목은 콜백 호출이 끝나면 더 이상 유효하지 않아요. 보관이 필요한 값은 콜백 안에서 복사(대입 연산자 또는 복사 생성자)해 두어야 해요.
Declaration
namespace Stove
{
namespace PCSDK
{
namespace IAP
{
struct StovePCVoidedPurchase
{
public:
int64_t GetTid() const;
const wchar_t* GetMarketCode() const;
const wchar_t* GetProductId() const;
const wchar_t* GetMarketProductId() const;
const wchar_t* GetUserId() const;
int64_t GetCharacterNo() const;
int64_t GetPurchaseMillis() const;
int64_t GetVoidedMillis() const;
};
}
}
}
Members
| Name | Type | Access | Description |
|---|---|---|---|
GetTid() | int64_t | 읽기 | STOVE 빌링 시스템에서 발급한 주문번호예요. |
GetMarketCode() | const wchar_t* | 읽기 | 마켓 코드예요. |
GetProductId() | const wchar_t* | 읽기 | STOVE 플랫폼에 등록한 상품 코드예요. |
GetMarketProductId() | const wchar_t* | 읽기 | 마켓에 등록된 상품 코드예요. |
GetUserId() | const wchar_t* | 읽기 | 현재 게임의 사용자 ID 예요. |
GetCharacterNo() | int64_t | 읽기 | STOVE 플랫폼에서 게임 캐릭터별로 발급되는 유일키예요. |
GetPurchaseMillis() | int64_t | 읽기 | UTC+0 기준의 결제 시간(epoch time milliseconds)이에요. |
GetVoidedMillis() | int64_t | 읽기 | UTC+0 기준의 환불 처리된 시간(epoch time milliseconds)이에요. |
Example
using namespace Stove::PCSDK;
using namespace Stove::PCSDK::IAP;
void __cdecl OnFetchVoidedPurchasesFinished(CallbackResult callbackResult, StovePCVoidedPurchase* voidedPurchases, uint32_t voidedPurchaseSize)
{
if (callbackResult.GetResult().IsSuccessful())
{
for (uint32_t i = 0; i < voidedPurchaseSize; ++i)
{
int64_t tid = voidedPurchases[i].GetTid();
const wchar_t* productId = voidedPurchases[i].GetProductId();
// 필요한 값만 복사해서 보관해 주세요.
}
// 성공 시 로직을 구현해 주세요.
}
else
{
// 실패 시 로직을 구현해 주세요.
}
}
Notes
- IAP_FetchVoidedPurchases 의 출력으로만 전달돼요.
- 마켓 지정 조회와 추가 필드(회원 번호, guid 등)를 제공하던 StovePCVoidedPurchasesEx ·
IAP_FetchVoidedPurchasesEx()는 현재 SDK 에서 제공하지 않아요.
See Also
StovePCVoidedPurchasesEx
종류 구조체 · 모듈 IAP · 버전 3.4.1 · 폐기 예정
Description
이 타입은 현재 SDK 에서 제공하지 않아요. 이 구조체를 사용하던
IAP_FetchVoidedPurchasesEx()도 함께 제공되지 않아요. 환불 조회 기능 자체도 폐기(deprecated)된 기능이에요.
현재 사용자가 환불 처리한 구매 기록 한 항목을 나타내요. IAP_FetchVoidedPurchasesEx() 호출 결과로 OnFetchVoidedPurchasesExFinished 콜백에 배열 형태로 전달돼요. StovePCVoidedPurchase 와 달리 마켓 타입을 지정해서 조회할 수 있고, 회원 번호(MemberNo) · guid 등의 필드가 추가로 제공돼요.
SDK 가 채워서 콜백으로 전달하는 값 타입이에요. 호출자가 직접 만들지 않아요.
콜백으로 전달되는 배열과 각 항목은 콜백 호출이 끝나면 더 이상 유효하지 않아요. 보관이 필요한 값은 콜백 안에서 복사(대입 연산자 또는 복사 생성자)해 두어야 해요.
Declaration
namespace Stove
{
namespace PCSDK
{
namespace IAP
{
struct StovePCVoidedPurchasesEx
{
public:
int64_t GetTid() const;
wchar_t* GetMarketCode() const;
int64_t GetMemberNo() const;
wchar_t* GetGuid() const;
int64_t GetCharacterNo() const;
wchar_t* GetInserviceItemId() const;
wchar_t* GetMarketItemId() const;
wchar_t* GetMarketTid() const;
wchar_t* GetMarketUserId() const;
int64_t GetPurchaseDt() const;
int64_t GetVoidedDt() const;
};
}
}
}
Members
| Name | Type | Access | Description |
|---|---|---|---|
GetTid() | int64_t | 읽기 | STOVE 빌링 시스템에서 발급한 주문번호예요. |
GetMarketCode() | wchar_t* | 읽기 | 마켓 코드예요. |
GetMemberNo() | int64_t | 읽기 | STOVE 플랫폼 회원 번호예요. |
GetGuid() | wchar_t* | 읽기 | STOVE 플랫폼 회원 guid 이에요. |
GetCharacterNo() | int64_t | 읽기 | 게임 캐릭터별로 발급되는 유일키(STOVE 에서 발급)이에요. |
GetInserviceItemId() | wchar_t* | 읽기 | 게임 내 아이템 ID 예요(ProductId 와 동일). |
GetMarketItemId() | wchar_t* | 읽기 | 마켓에 등록된 아이템 ID 예요(MarketProductId 와 동일). |
GetMarketTid() | wchar_t* | 읽기 | 마켓 주문 번호예요. 모바일 마켓은 제공하지 않으며 현재 STEAM 만 제공해요. |
GetMarketUserId() | wchar_t* | 읽기 | 마켓 회원 아이디예요. 모바일 마켓은 제공하지 않으며 현재 STEAM 만 제공해요. |
GetPurchaseDt() | int64_t | 읽기 | 결제 시간(UTC)예요. |
GetVoidedDt() | int64_t | 읽기 | 환불 처리된 시간(UTC)예요. |
소스에 향후 확장을 위한 예약 필드(reserved1 ~ reserved5)가 있으나 공개 Getter 가 없어 문서에 포함하지 않아요.
Example
using namespace Stove::PCSDK;
using namespace Stove::PCSDK::IAP;
void __cdecl OnFetchVoidedPurchasesExFinished(CallbackResult callbackResult, StovePCVoidedPurchasesEx* voidedPurchasesEx, uint32_t voidedPurchaseSize)
{
if (callbackResult.GetResult().IsSuccessful())
{
for (uint32_t i = 0; i < voidedPurchaseSize; ++i)
{
int64_t tid = voidedPurchasesEx[i].GetTid();
wchar_t* marketItemId = voidedPurchasesEx[i].GetMarketItemId();
// 필요한 값만 복사해서 보관해 주세요.
}
// 성공 시 로직을 구현해 주세요.
}
else
{
// 실패 시 로직을 구현해 주세요.
}
}
Notes
- IAP_FetchVoidedPurchasesEx 의 출력으로만 전달돼요.
IAP_FetchVoidedPurchasesEx()호출 시 StovePCVoidedPurchasesMarketType 값으로 조회할 마켓을 지정해요.- 모바일 마켓 관련 필드(
MarketTid,MarketUserId)는 현재 STEAM 마켓에서만 값이 제공돼요.
See Also
StovePCVoidedPurchasesMarketType
종류 열거형 · 모듈 IAP · 버전 3.4.1 · 폐기 예정
Description
이 타입은 현재 SDK 에서 제공하지 않아요. 이 값을 사용하던
IAP_FetchVoidedPurchasesEx()도 함께 제공되지 않아요. 환불 조회 기능 자체도 폐기(deprecated)된 기능이에요.
IAP_FetchVoidedPurchasesEx 호출 시 조회할 마켓을 지정하는 입력 값이에요.
Declaration
enum class StovePCVoidedPurchasesMarketType : uint32_t
{
ALL = 0,
STEAM = 1,
GOOGLE_PLAY = 2,
APPLE_APP_STORE = 3
};
Enum Values
| Code | Name | Description |
|---|---|---|
| 0 | ALL | 모든 마켓 조회 |
| 1 | STEAM | 스팀 마켓 조회 |
| 2 | GOOGLE_PLAY | 구글 플레이 마켓 조회 |
| 3 | APPLE_APP_STORE | 애플 앱 스토어 조회 |
Example
using namespace Stove::PCSDK::IAP;
IAP_FetchVoidedPurchasesEx(StovePCVoidedPurchasesMarketType::STEAM, OnFetchVoidedPurchasesExFinished);
Notes
- PC SDK 특성상 대부분
STEAM또는ALL을 사용해요.GOOGLE_PLAY,APPLE_APP_STORE는 다른 플랫폼과 연동된 계정의 환불 내역을 함께 조회할 때 사용해요.
See Also
View_AutoPopup
종류 함수 · 모듈 View · 버전 3.0.0.4
Description
WebView를 이용해 AutoPopup을 실행하는 함수예요.
호출 전에 View_Initialize 또는 View_InitializeWithWndInfo로 팝업 기능이 초기화되어 있어야 해요. 초기화되지 않은 상태에서 호출하면 onFinished 콜백으로 NOT_INITIALIZED 결과가 전달돼요.
Declaration
void View_AutoPopup(Base::WebViewMode mode, OnPopupFinished onFinished);
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
mode | Base::WebViewMode | Y | WebView를 실행하는 모드 |
onFinished | OnPopupFinished | Y | WebView 실행에 대한 결과를 넘겨받는 콜백 함수 |
Returns
없음
Callback
typedef void(__cdecl* OnPopupFinished)(CallbackResult callbackResult);
| Name | Type | Description |
|---|---|---|
callbackResult | CallbackResult | 호출 결과 |
onFinished는 팝업이 표시를 마치거나 결과가 나왔을 때 1회 전달돼요. Base_RunCallback()을 호출한 스레드에서 실행돼요. onFinished가 nullptr이면 콜백 없이 팝업 호출만 수행돼요.
Error Codes
| Code | Name | Description | Show to User | In-Game Message |
|---|---|---|---|---|
| 0 | SUCCESS | 성공(모든 웹뷰 생성 성공, 또는 onDestroy에서 웹뷰가 정상적으로 닫힘) | x | |
| 17 | NOT_INITIALIZED | BaseSDK가 초기화되지 않았어요. | x | |
| 33 | POPUP_NOT_CREATED | 웹뷰가 하나도 생성되지 않고 종료되었어요. onDestroy 콜백에만 1회 전달되며, onFinished 콜백에는 전달되지 않아요. | x | |
| 80 | VIEWUI_NOT_INITIALIZED | 팝업을 표시하기 위한 내부 WebView UI가 초기화되지 않았어요. | x | |
| 82 | WEBVIEW_CREATE_FAIL | 웹뷰 생성에 실패했어요(일부 팝업만 생성에 실패한 경우 포함). | x | |
| 83 | WEBVIEW_LOAD_URL_FAIL | 웹뷰에서 URL을 불러오지 못했어요. | x | |
| 84 | WEBVIEW_CLOSE_ALL_FAIL | 팝업을 새로 표시하기 전, 기존에 열려 있던 웹뷰를 모두 닫는 데 실패했어요. | x | |
| 85 | WEBVIEW_CLOSE_FAIL | onDestroy 시점에 웹뷰를 닫는 데 실패했어요. | x | |
| 87 | NO_POPUP_DATA | 표시할 팝업 데이터가 없어요. | O | 팝업 설정 정보가 존재하지 않아 표시할 창이 없습니다. [확인] |
| 253 | UNMANAGED_EXCEPTION | 실행 중 예외가 발생했어요. | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
| 254 | MANAGED_EXCEPTION | 실행 중 예외가 발생했어요. | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
전체 목록은 SDKResultCode 를 참조하세요.
Memory Management
| Object | Owner | Release |
|---|---|---|
onFinished의 callbackResult | SDK | 값(값 타입)으로 전달되며 콜백 함수가 반환되면 자동으로 소멸해요. 별도로 해제할 필요가 없어요 |
Example
using namespace Stove::PCSDK::View;
void __cdecl OnAutoPopupFinished(CallbackResult callbackResult)
{
if (callbackResult.GetResult().IsSuccessful())
{
// 성공 시 로직을 구현해 주세요.
}
else
{
// 실패 시 로직을 구현해 주세요.
}
}
void ShowAutoPopup()
{
View_AutoPopup(Base::WebViewMode::INTERNAL, OnAutoPopupFinished);
}
Notes
- 팝업이 닫힐 때의 이벤트까지 받으려면 View_AutoPopupEx를 사용해야 해요.
- v3.3.4부터 표시할 팝업 데이터가 없는 경우의 결과 코드(
NO_POPUP_DATA, 87)가 추가되었어요. - 화면에 표시된 팝업(들)을 한꺼번에 닫으려면 View_CloseAllPopups를 사용해요.
Changelog
| Version | Change |
|---|---|
| 3.0.0.4 | 최초 제공 |
| 3.3.4 | NO_POPUP_DATA(87) 결과 코드 추가 |
See Also
- View_AutoPopupEx
- View_ManualPopup
- View_NewsPopup
- View_CouponPopup
- View_CloseAllPopups
- SDKMethod
- SDKResultCode
View_AutoPopupEx
종류 함수 · 모듈 View · 버전 3.3.4
Description
WebView를 이용해 AutoPopup을 실행하는 함수예요. View_AutoPopup과 동일하게 동작하며, 팝업의 네이티브 리소스가 완전히 해제되었을 때 호출되는 onDestroy 콜백이 추가로 제공돼요.
호출 전에 View_Initialize 또는 View_InitializeWithWndInfo로 팝업 기능이 초기화되어 있어야 해요. 초기화되지 않은 상태에서 호출하면 onFinished 콜백으로 NOT_INITIALIZED 결과가 전달돼요.
Declaration
void View_AutoPopupEx(Base::WebViewMode mode, OnPopupFinished onFinished, OnViewPopupDestroyFinished onDestroy);
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
mode | Base::WebViewMode | Y | WebView를 실행하는 모드 |
onFinished | OnPopupFinished | Y | WebView 실행에 대한 결과를 넘겨받는 콜백 함수 |
onDestroy | OnViewPopupDestroyFinished | N | 팝업을 닫을 시 응답받는 콜백 함수 포인터 |
Returns
없음
Callback
typedef void(__cdecl* OnPopupFinished)(CallbackResult callbackResult);
typedef void(__cdecl* OnViewPopupDestroyFinished)(CallbackResult callbackResult);
| Name | Type | Description |
|---|---|---|
callbackResult | CallbackResult | 호출 결과 |
onFinished는 팝업이 표시를 마치거나 결과가 나왔을 때 1회 전달돼요. onDestroy는 팝업의 네이티브 리소스가 완전히 해제되었을 때 1회 전달돼요. 두 콜백 모두 Base_RunCallback()을 호출한 스레드에서 실행돼요.
팝업(웹뷰)이 생성되지 않은 채 작업이 종료된 경우(SDKResultCode::POPUP_NOT_CREATED)에는 구 C++ 인터페이스가 이 결과를 내부적으로 가로채므로 onDestroy가 호출되지 않아요.
Error Codes
| Code | Name | Description | Show to User | In-Game Message |
|---|---|---|---|---|
| 0 | SUCCESS | 성공(모든 웹뷰 생성 성공, 또는 onDestroy에서 웹뷰가 정상적으로 닫힘) | x | |
| 17 | NOT_INITIALIZED | BaseSDK가 초기화되지 않았어요. | x | |
| 33 | POPUP_NOT_CREATED | 웹뷰가 하나도 생성되지 않고 종료되었어요. onDestroy 콜백에만 1회 전달되며, onFinished 콜백에는 전달되지 않아요. | x | |
| 80 | VIEWUI_NOT_INITIALIZED | 팝업을 표시하기 위한 내부 WebView UI가 초기화되지 않았어요. | x | |
| 82 | WEBVIEW_CREATE_FAIL | 웹뷰 생성에 실패했어요(일부 팝업만 생성에 실패한 경우 포함). | x | |
| 83 | WEBVIEW_LOAD_URL_FAIL | 웹뷰에서 URL을 불러오지 못했어요. | x | |
| 84 | WEBVIEW_CLOSE_ALL_FAIL | 팝업을 새로 표시하기 전, 기존에 열려 있던 웹뷰를 모두 닫는 데 실패했어요. | x | |
| 85 | WEBVIEW_CLOSE_FAIL | onDestroy 시점에 웹뷰를 닫는 데 실패했어요. | x | |
| 87 | NO_POPUP_DATA | 표시할 팝업 데이터가 없어요. | O | 팝업 설정 정보가 존재하지 않아 표시할 창이 없습니다. [확인] |
| 253 | UNMANAGED_EXCEPTION | 실행 중 예외가 발생했어요. | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
| 254 | MANAGED_EXCEPTION | 실행 중 예외가 발생했어요. | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
전체 목록은 SDKResultCode 를 참조하세요.
Memory Management
| Object | Owner | Release |
|---|---|---|
onFinished/onDestroy의 callbackResult | SDK | 값(값 타입)으로 전달되며 콜백 함수가 반환되면 자동으로 소멸해요. 별도로 해제할 필요가 없어요 |
Example
using namespace Stove::PCSDK::View;
void __cdecl OnAutoPopupFinished(CallbackResult callbackResult)
{
if (callbackResult.GetResult().IsSuccessful())
{
// 성공 시 로직을 구현해 주세요.
}
else
{
// 실패 시 로직을 구현해 주세요.
}
}
void __cdecl OnAutoPopupDestroyed(CallbackResult callbackResult)
{
// 팝업 리소스 해제가 끝난 뒤 로직을 구현해 주세요.
}
void ShowAutoPopup()
{
View_AutoPopupEx(Base::WebViewMode::INTERNAL, OnAutoPopupFinished, OnAutoPopupDestroyed);
}
Notes
onFinished와onDestroy는 각각 다른 시점(결과 도착 시점 / 리소스 해제 시점)에 호출돼요. 둘을 혼동하지 않아야 해요.- 화면에 표시된 팝업(들)을 한꺼번에 닫으려면 View_CloseAllPopups를 사용해요.
See Also
View_CloseAllPopups
종류 함수 · 모듈 View · 버전 3.1.3
Description
열려 있는 모든 팝업(웹뷰)을 닫는 함수예요. View_AutoPopup, View_ManualPopup, View_NewsPopup, View_CouponPopup, View_VerifyIdentificationPopup로 열린 팝업이 대상이에요.
Declaration
Result View_CloseAllPopups();
Parameters
없음
Returns
| Type | Description |
|---|---|
Result | 함수 호출 결과. result.IsSuccessful()로 성공 여부를 확인해요 |
Error Codes
| Code | Name | Description | Show to User | In-Game Message |
|---|---|---|---|---|
| 0 | SUCCESS | 성공(열려 있던 모든 웹뷰가 정상적으로 닫힘) | x | |
| 80 | VIEWUI_NOT_INITIALIZED | 팝업을 표시하기 위한 내부 WebView UI가 초기화되지 않았어요. | x | |
| 84 | WEBVIEW_CLOSE_ALL_FAIL | 열려 있는 웹뷰를 모두 닫는 데 실패했어요. | x | |
| 253 | UNMANAGED_EXCEPTION | 실행 중 예외가 발생했어요. | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
| 254 | MANAGED_EXCEPTION | 실행 중 예외가 발생했어요. | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
전체 목록은 SDKResultCode 를 참조하세요.
Example
using namespace Stove::PCSDK::View;
void CloseAllViewPopups()
{
Result result = View_CloseAllPopups();
if (result.IsSuccessful())
{
// 성공 시 로직을 구현해 주세요.
}
else
{
// 실패 시 로직을 구현해 주세요.
}
}
Notes
- 이 함수는 동기 함수이며 콜백을 받지 않아요.
- 이미 표시된 팝업이 닫힐 때 각 팝업에 등록된 onFinished/onDestroy 콜백이 호출될 수 있어요.
See Also
View_CouponPopup
종류 함수 · 모듈 View · 버전 3.0.0.4
Description
WebView를 이용해 CouponPopup을 실행하는 함수예요.
호출 전에 View_Initialize 또는 View_InitializeWithWndInfo로 팝업 기능이 초기화되어 있어야 해요. 초기화되지 않은 상태에서 호출하면 onFinished 콜백으로 NOT_INITIALIZED 결과가 전달돼요.
Declaration
void View_CouponPopup(Base::WebViewMode mode, OnPopupFinished onFinished);
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
mode | Base::WebViewMode | Y | WebView를 실행하는 모드 |
onFinished | OnPopupFinished | Y | WebView 실행에 대한 결과를 넘겨받는 콜백 함수 |
Returns
없음
Callback
typedef void(__cdecl* OnPopupFinished)(CallbackResult callbackResult);
| Name | Type | Description |
|---|---|---|
callbackResult | CallbackResult | 호출 결과 |
onFinished는 팝업이 표시를 마치거나 결과가 나왔을 때 1회 전달돼요. Base_RunCallback()을 호출한 스레드에서 실행돼요. onFinished가 nullptr이면 콜백 없이 팝업 호출만 수행돼요.
Error Codes
| Code | Name | Description | Show to User | In-Game Message |
|---|---|---|---|---|
| 0 | SUCCESS | 성공(웹뷰 생성 성공, 또는 웹뷰가 정상적으로 닫힘) | x | |
| 5 | INVALID_PARAM | 월드(게임 서버)에 접속하지 않은 상태예요. | x | |
| 17 | NOT_INITIALIZED | BaseSDK가 초기화되지 않았어요. | x | |
| 33 | POPUP_NOT_CREATED | 웹뷰가 하나도 생성되지 않고 종료되었어요. onDestroy 콜백에만 1회 전달되며, onFinished 콜백에는 전달되지 않아요. | x | |
| 80 | VIEWUI_NOT_INITIALIZED | 팝업을 표시하기 위한 내부 WebView UI가 초기화되지 않았어요. | x | |
| 82 | WEBVIEW_CREATE_FAIL | 웹뷰 생성에 실패했어요(일부 팝업만 생성에 실패한 경우 포함). | x | |
| 83 | WEBVIEW_LOAD_URL_FAIL | 웹뷰에서 URL을 불러오지 못했어요. | x | |
| 84 | WEBVIEW_CLOSE_ALL_FAIL | 팝업을 새로 표시하기 전, 기존에 열려 있던 웹뷰를 모두 닫는 데 실패했어요. | x | |
| 85 | WEBVIEW_CLOSE_FAIL | onDestroy 시점에 웹뷰를 닫는 데 실패했어요. | x | |
| 87 | NO_POPUP_DATA | 표시할 팝업 데이터가 없어요. | O | 팝업 설정 정보가 존재하지 않아 표시할 창이 없습니다. [확인] |
| 253 | UNMANAGED_EXCEPTION | 실행 중 예외가 발생했어요. | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
| 254 | MANAGED_EXCEPTION | 실행 중 예외가 발생했어요. | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
전체 목록은 SDKResultCode 를 참조하세요.
Memory Management
| Object | Owner | Release |
|---|---|---|
onFinished의 callbackResult | SDK | 값(값 타입)으로 전달되며 콜백 함수가 반환되면 자동으로 소멸해요. 별도로 해제할 필요가 없어요 |
Example
using namespace Stove::PCSDK::View;
void __cdecl OnCouponPopupFinished(CallbackResult callbackResult)
{
if (callbackResult.GetResult().IsSuccessful())
{
// 성공 시 로직을 구현해 주세요.
}
else
{
// 실패 시 로직을 구현해 주세요.
}
}
void ShowCouponPopup()
{
View_CouponPopup(Base::WebViewMode::INTERNAL, OnCouponPopupFinished);
}
Notes
- 팝업이 닫힐 때의 이벤트까지 받으려면 View_CouponPopupEx를 사용해야 해요.
- 화면에 표시된 팝업(들)을 한꺼번에 닫으려면 View_CloseAllPopups를 사용해요.
See Also
- View_CouponPopupEx
- View_AutoPopup
- View_ManualPopup
- View_NewsPopup
- View_CloseAllPopups
- SDKMethod
- SDKResultCode
View_CouponPopupEx
종류 함수 · 모듈 View · 버전 3.3.4
Description
WebView를 이용해 CouponPopup을 실행하는 함수예요. View_CouponPopup과 동일하게 동작하며, 팝업의 네이티브 리소스가 완전히 해제되었을 때 호출되는 onDestroy 콜백이 추가로 제공돼요.
호출 전에 View_Initialize 또는 View_InitializeWithWndInfo로 팝업 기능이 초기화되어 있어야 해요. 초기화되지 않은 상태에서 호출하면 onFinished 콜백으로 NOT_INITIALIZED 결과가 전달돼요.
Declaration
void View_CouponPopupEx(Base::WebViewMode mode, OnPopupFinished onFinished, OnViewPopupDestroyFinished onDestroy);
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
mode | Base::WebViewMode | Y | WebView를 실행하는 모드 |
onFinished | OnPopupFinished | Y | WebView 실행에 대한 결과를 넘겨받는 콜백 함수 |
onDestroy | OnViewPopupDestroyFinished | N | 팝업을 닫을 시 응답받는 콜백 함수 포인터 |
Returns
없음
Callback
typedef void(__cdecl* OnPopupFinished)(CallbackResult callbackResult);
typedef void(__cdecl* OnViewPopupDestroyFinished)(CallbackResult callbackResult);
| Name | Type | Description |
|---|---|---|
callbackResult | CallbackResult | 호출 결과 |
onFinished는 팝업이 표시를 마치거나 결과가 나왔을 때 1회 전달돼요. onDestroy는 팝업의 네이티브 리소스가 완전히 해제되었을 때 1회 전달돼요. 두 콜백 모두 Base_RunCallback()을 호출한 스레드에서 실행돼요.
팝업(웹뷰)이 생성되지 않은 채 작업이 종료된 경우(SDKResultCode::POPUP_NOT_CREATED)에는 구 C++ 인터페이스가 이 결과를 내부적으로 가로채므로 onDestroy가 호출되지 않아요.
Error Codes
| Code | Name | Description | Show to User | In-Game Message |
|---|---|---|---|---|
| 0 | SUCCESS | 성공(웹뷰 생성 성공, 또는 웹뷰가 정상적으로 닫힘) | x | |
| 5 | INVALID_PARAM | 월드(게임 서버)에 접속하지 않은 상태예요. | x | |
| 17 | NOT_INITIALIZED | BaseSDK가 초기화되지 않았어요. | x | |
| 33 | POPUP_NOT_CREATED | 웹뷰가 하나도 생성되지 않고 종료되었어요. onDestroy 콜백에만 1회 전달되며, onFinished 콜백에는 전달되지 않아요. | x | |
| 80 | VIEWUI_NOT_INITIALIZED | 팝업을 표시하기 위한 내부 WebView UI가 초기화되지 않았어요. | x | |
| 82 | WEBVIEW_CREATE_FAIL | 웹뷰 생성에 실패했어요(일부 팝업만 생성에 실패한 경우 포함). | x | |
| 83 | WEBVIEW_LOAD_URL_FAIL | 웹뷰에서 URL을 불러오지 못했어요. | x | |
| 84 | WEBVIEW_CLOSE_ALL_FAIL | 팝업을 새로 표시하기 전, 기존에 열려 있던 웹뷰를 모두 닫는 데 실패했어요. | x | |
| 85 | WEBVIEW_CLOSE_FAIL | onDestroy 시점에 웹뷰를 닫는 데 실패했어요. | x | |
| 87 | NO_POPUP_DATA | 표시할 팝업 데이터가 없어요. | O | 팝업 설정 정보가 존재하지 않아 표시할 창이 없습니다. [확인] |
| 253 | UNMANAGED_EXCEPTION | 실행 중 예외가 발생했어요. | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
| 254 | MANAGED_EXCEPTION | 실행 중 예외가 발생했어요. | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
전체 목록은 SDKResultCode 를 참조하세요.
Memory Management
| Object | Owner | Release |
|---|---|---|
onFinished/onDestroy의 callbackResult | SDK | 값(값 타입)으로 전달되며 콜백 함수가 반환되면 자동으로 소멸해요. 별도로 해제할 필요가 없어요 |
Example
using namespace Stove::PCSDK::View;
void __cdecl OnCouponPopupFinished(CallbackResult callbackResult)
{
if (callbackResult.GetResult().IsSuccessful())
{
// 성공 시 로직을 구현해 주세요.
}
else
{
// 실패 시 로직을 구현해 주세요.
}
}
void __cdecl OnCouponPopupDestroyed(CallbackResult callbackResult)
{
// 팝업 리소스 해제가 끝난 뒤 로직을 구현해 주세요.
}
void ShowCouponPopup()
{
View_CouponPopupEx(Base::WebViewMode::INTERNAL, OnCouponPopupFinished, OnCouponPopupDestroyed);
}
Notes
onFinished와onDestroy는 각각 다른 시점(결과 도착 시점 / 리소스 해제 시점)에 호출돼요. 둘을 혼동하지 않아야 해요.- 화면에 표시된 팝업(들)을 한꺼번에 닫으려면 View_CloseAllPopups를 사용해요.
See Also
View_FetchWebOpenKey
종류 함수 · 모듈 View · 버전 3.3.0 · 폐기 예정
Description
폐기(deprecated)된 기능이에요. 신규 인터페이스에서도 제공하지 않아요.
Web Open in Game 기능에 사용할 일회성 key를 획득하는 함수예요.
외부 브라우저를 통해 Stove 커뮤니티나 고객센터를 노출해야 하는 경우에만 사용해야 해요.
Declaration
void View_FetchWebOpenKey(OnFetchWebOpenKeyFinished onFinished);
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
onFinished | OnFetchWebOpenKeyFinished | Y | FetchWebOpenKey 실행에 대한 결과를 넘겨받는 콜백 함수 |
Returns
없음
Callback
typedef void(__cdecl* OnFetchWebOpenKeyFinished)(CallbackResult callbackResult, const wchar_t* key);
| Name | Type | Description |
|---|---|---|
callbackResult | CallbackResult | 호출 결과 |
key | const wchar_t* | Web Open in Game 호출에 사용되는 일회성 key |
onFinished는 key 조회가 끝나면 1회 전달돼요. Base_RunCallback()을 호출한 스레드에서 실행돼요. onFinished는 필수예요. nullptr을 넘기면 INVALID_PARAM으로 처리돼요.
Error Codes
| Code | Name | Description | Show to User | In-Game Message |
|---|---|---|---|---|
| 0 | SUCCESS | 성공 | x | |
| 17 | NOT_INITIALIZED | BaseSDK가 초기화되지 않았어요. | x | |
| 25 | RESPONSE_VALUE_IS_NULL | 서버 응답에 필요한 값이 없어요. | O | 네트워크 연결이 원활하지 않습니다. 네트워크 상태를 확인하고 다시 실행해 주세요. [확인] |
| 26 | RESPONSE_INVALID_VALUE_FORMAT | 서버 응답 형식(JSON 파싱/필드 검증)이 올바르지 않아요. | O | 네트워크 연결이 원활하지 않습니다. 네트워크 상태를 확인하고 다시 실행해 주세요. [확인] |
| 249 | NETWORK_TRANSPORT_ERROR | 네트워크 전송 계층에서 오류가 발생했어요. | x | |
| 253 | UNMANAGED_EXCEPTION | 실행 중 예외가 발생했어요. | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
| 254 | MANAGED_EXCEPTION | 실행 중 예외가 발생했어요. | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
전체 목록은 SDKResultCode 를 참조하세요.
Memory Management
| Object | Owner | Release |
|---|---|---|
onFinished의 callbackResult | SDK | 값(값 타입)으로 전달되며 콜백 함수가 반환되면 자동으로 소멸해요. 별도로 해제할 필요가 없어요 |
onFinished의 key | SDK | 해제 금지. 콜백이 반환되면 무효처리되므로, 이후 사용하려면 콜백 안에서 복사해야 해요 |
Example
using namespace Stove::PCSDK::View;
void __cdecl OnFetchWebOpenKeyFinishedCallback(CallbackResult callbackResult, const wchar_t* key)
{
if (callbackResult.GetResult().IsSuccessful())
{
// key를 사용해 외부 브라우저를 여는 로직을 구현해 주세요.
// key는 이 콜백이 끝나면 무효처리되므로 필요하면 이 안에서 복사해 두어야 합니다.
}
else
{
// 실패 시 로직을 구현해 주세요.
}
}
void FetchWebOpenKey()
{
View_FetchWebOpenKey(OnFetchWebOpenKeyFinishedCallback);
}
Notes
- 일반적인 인게임 웹뷰 노출에는 이 함수 대신 View_AutoPopup 등 팝업 함수를 사용해야 해요. 이 함수는 외부 브라우저 노출이 필요한 경우에만 사용해요.
- 이 함수는 비동기 함수예요.
See Also
View_GetVersion
종류 함수 · 모듈 View · 버전 3.4.1
Description
팝업 기능의 버전 정보를 조회하는 함수예요. version 버퍼에 버전 문자열을 채워 돌려줘요.
현재 구현은 단일 바이너리로 통합된 BaseSDK의 버전 조회 함수를 그대로 호출해요. 즉, 이 함수가 돌려주는 버전 문자열은 ViewSDK만의 개별 버전이 아니라 통합된 PCSDK 전체 버전이에요.
Declaration
Result View_GetVersion(__out wchar_t* version, uint32_t length);
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
version | wchar_t* (out) | Y | 버전 정보를 돌려받을 버퍼. 호출자가 할당해요 |
length | uint32_t | Y | version 배열의 길이 |
Returns
| Type | Description |
|---|---|
Result | 함수 호출 결과. result.IsSuccessful()로 성공 여부를 확인해요 |
Error Codes
| Code | Name | Description | Show to User | In-Game Message |
|---|---|---|---|---|
| 0 | SUCCESS | 성공 | x | |
| 251 | PCSDK_DLL_NOT_FOUND | 실행 파일 경로를 찾지 못했어요. | x | |
| 253 | UNMANAGED_EXCEPTION | 실행 중 예외가 발생했어요. | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
| 254 | MANAGED_EXCEPTION | 실행 중 예외가 발생했어요. | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
전체 목록은 SDKResultCode 를 참조하세요.
Memory Management
| Object | Owner | Release |
|---|---|---|
version | 호출자 | 호출자가 할당한 버퍼예요. SDK는 내용을 채우기만 하며 버퍼를 소유하거나 해제하지 않아요 |
Example
using namespace Stove::PCSDK::View;
void PrintViewSDKVersion()
{
wchar_t version[64] = {};
Result result = View_GetVersion(version, 64);
if (result.IsSuccessful())
{
// 성공 시 version 버퍼를 사용하는 로직을 구현해 주세요.
}
else
{
// 실패 시 로직을 구현해 주세요.
}
}
Notes
- 이 함수는 동기 함수이며 콜백을 받지 않아요.
- 반환되는 버전 문자열은 통합 빌드 정책에 따라 BaseSDK와 동일한 값일 수 있어요.
See Also
View_Initialize
종류 함수 · 모듈 View · 버전 3.0.0.4
Description
팝업 기능을 초기화하는 함수예요. View_AutoPopup, View_ManualPopup 등 팝업 관련 기능을 사용하기 전에 먼저 호출해야 해요.
Internal Style 팝업의 부모 윈도우가 될 메인 윈도우 핸들을 함께 전달해야 하는 경우에는 이 함수 대신 View_InitializeWithWndInfo를 사용해야 해요.
Declaration
Result View_Initialize();
Parameters
없음
Returns
| Type | Description |
|---|---|
Result | 함수 호출 결과. result.IsSuccessful()로 성공 여부를 확인해요 |
Error Codes
| Code | Name | Description | Show to User | In-Game Message |
|---|---|---|---|---|
| 0 | SUCCESS | 성공 | x | |
| 16 | BASE_NOT_INITIALIZED | BaseSDK가 초기화되지 않았어요. Base_Initialize(또는 Base_InitializeEx)를 먼저 호출해야 해요. | x | |
| 18 | ALREADY_INITIALIZED | 이미 팝업 기능이 초기화되어 있는 상태에서 다시 초기화를 시도했어요. | x | |
| 80 | VIEWUI_NOT_INITIALIZED | 팝업을 표시하기 위한 내부 WebView UI 초기화에 실패했어요. | x | |
| 251 | PCSDK_DLL_NOT_FOUND | 내부 버전 확인 과정에서 실행 파일 경로를 찾지 못했어요. | x | |
| 253 | UNMANAGED_EXCEPTION | 실행 중 예외가 발생했어요. | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
| 254 | MANAGED_EXCEPTION | 실행 중 예외가 발생했어요. | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
전체 목록은 SDKResultCode 를 참조하세요.
Example
using namespace Stove::PCSDK::View;
void InitializeView()
{
Result result = View_Initialize();
if (result.IsSuccessful())
{
// 성공 시 로직을 구현해 주세요.
}
else
{
// 실패 시 로직을 구현해 주세요.
}
}
Notes
- 이 함수는 동기 함수이며 콜백을 받지 않아요.
- Internal Style 팝업의 부모 윈도우 핸들이 필요하면 View_InitializeWithWndInfo를 대신 사용해야 해요.
- 팝업 기능 사용을 마치면 View_UnInitialize로 자원을 해제해야 해요.
See Also
View_InitializeWithWndInfo
종류 함수 · 모듈 View · 버전 3.3.3
Description
팝업 기능을 초기화하는 함수예요. View_Initialize와 동일하게 동작하지만, Internal Style 팝업의 부모 윈도우가 될 메인 윈도우 핸들(HWND)을 추가로 전달해요.
Internal Style 팝업을 사용할 계획이 없다면 View_Initialize를 사용해도 돼요.
Declaration
Result View_InitializeWithWndInfo(const void* mainWndHandle);
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
mainWndHandle | const void* (HWND) | Y | Internal Style 팝업의 부모 윈도우가 될 메인 윈도우 핸들 |
Returns
| Type | Description |
|---|---|
Result | 함수 호출 결과. result.IsSuccessful()로 성공 여부를 확인해요 |
Error Codes
| Code | Name | Description | Show to User | In-Game Message |
|---|---|---|---|---|
| 0 | SUCCESS | 성공 | x | |
| 16 | BASE_NOT_INITIALIZED | BaseSDK가 초기화되지 않았어요. Base_Initialize(또는 Base_InitializeEx)를 먼저 호출해야 해요. | x | |
| 18 | ALREADY_INITIALIZED | 이미 팝업 기능이 초기화되어 있는 상태에서 다시 초기화를 시도했어요. | x | |
| 80 | VIEWUI_NOT_INITIALIZED | 팝업을 표시하기 위한 내부 WebView UI 초기화에 실패했어요. | x | |
| 251 | PCSDK_DLL_NOT_FOUND | 내부 버전 확인 과정에서 실행 파일 경로를 찾지 못했어요. | x | |
| 253 | UNMANAGED_EXCEPTION | 실행 중 예외가 발생했어요. | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
| 254 | MANAGED_EXCEPTION | 실행 중 예외가 발생했어요. | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
전체 목록은 SDKResultCode 를 참조하세요.
Example
using namespace Stove::PCSDK::View;
void InitializeView(void* mainWndHandle)
{
Result result = View_InitializeWithWndInfo(mainWndHandle);
if (result.IsSuccessful())
{
// 성공 시 로직을 구현해 주세요.
}
else
{
// 실패 시 로직을 구현해 주세요.
}
}
Notes
- 이 함수는 동기 함수이며 콜백을 받지 않아요.
mainWndHandle은 호출자가 소유한 윈도우 핸들이에요. SDK는 이 핸들을 소유하거나 해제하지 않아요.- 팝업 기능 사용을 마치면 View_UnInitialize로 자원을 해제해야 해요.
See Also
View_ManualPopup
종류 함수 · 모듈 View · 버전 3.0.0.4
Description
WebView를 이용해 지정한 resourceKey에 대한 ManualPopup을 실행하는 함수예요.
호출 전에 View_Initialize 또는 View_InitializeWithWndInfo로 팝업 기능이 초기화되어 있어야 해요. 초기화되지 않은 상태에서 호출하면 onFinished 콜백으로 NOT_INITIALIZED 결과가 전달돼요.
Declaration
void View_ManualPopup(const wchar_t* resourceKey, Base::WebViewMode mode, OnPopupFinished onFinished);
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
resourceKey | const wchar_t* | Y | ManualPopup에 대한 ResourceKey |
mode | Base::WebViewMode | Y | WebView를 실행하는 모드 |
onFinished | OnPopupFinished | Y | WebView 실행에 대한 결과를 넘겨받는 콜백 함수 |
Returns
없음
Callback