- 마지막 업데이트
PC SDK unity 레퍼런스 — 3.4.x 이전
SDK 버전 3.4.x 기준이에요. 항목 125개를 이름순으로 모은 통합 문서예요.
Contents
Base_AccessTokenRenewed
종류 함수 · 모듈 Base · 버전 3.3.0
Description
Base_AccessTokenRenewed 는 액세스 토큰이 갱신될 때마다 호출될 콜백을 등록하는 함수예요. 한 번 등록해 두면 토큰이 갱신되는 시점마다 콜백이 반복 호출돼요.
onFinished 를 다시 호출하면 이전에 등록된 같은 타입의 콜백은 새 콜백으로 교체돼요.
Declaration
public static void Base_AccessTokenRenewed(OnRenewTokenFinished onFinished);
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
onFinished | OnRenewTokenFinished | N | 토큰 갱신 시 호출될 콜백. null 을 넘기면 등록을 해제해요 |
Returns
| Type | Description |
|---|---|
void | 없음 |
Callback
public delegate void OnRenewTokenFinished(CallbackResult result, StovePCToken token);
| Name | Type | Description |
|---|---|---|
result | CallbackResult | 갱신 결과 |
token | StovePCToken | 갱신된 토큰 정보 |
콜백은 Base_RunCallback() 을 호출한 스레드에서 실행돼요. 토큰이 갱신될 때마다 반복 호출돼요.
Error Codes
| Code | Name | Description | Show to User | In-Game Message |
|---|---|---|---|---|
| 0 | SUCCESS | 성공 | x | |
| 254 | MANAGED_EXCEPTION | C# 래퍼 내부(마샬링 등)에서 예외가 발생함. result.exceptionMessage 를 확인해야 해요 | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
발생 가능한 결과 코드는 BaseSDKResultCode 를 참조하세요.
Example
using static Stove.PCSDK.Base;
void OnRenewTokenFinished(CallbackResult callbackResult, StovePCToken token)
{
if (callbackResult.result.IsSuccessful())
{
// token.accessToken 을 사용하는 로직을 구현해 주세요.
}
}
Base_AccessTokenRenewed(OnRenewTokenFinished);
Notes
- 반복 호출되는 알림형 콜백이에요. Base_RestartAppIfNecessaryAsync 등 1회성 비동기 API 의 콜백과 성격이 달라요.
See Also
Base_GetAccessToken
종류 함수 · 모듈 Base · 버전 3.0.0.4
Description
Base_GetAccessToken 은 현재 액세스 토큰을 accessToken 에 채워 돌려주는 함수예요. 초기화 후 호출해야 해요.
Declaration
public static Result Base_GetAccessToken(ref string accessToken, uint length);
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
accessToken | ref string | Y | 액세스 토큰을 돌려받을 변수 |
length | uint | Y | accessToken 을 채우는 데 내부적으로 사용하는 버퍼 크기(문자 수) |
Returns
| Type | Description |
|---|---|
| Result | 조회 결과. IsSuccessful() 로 성공 여부를 판정해요 |
Error Codes
| Code | Name | Description | Show to User | In-Game Message |
|---|---|---|---|---|
| 0 | SUCCESS | 성공 | x | |
| 254 | MANAGED_EXCEPTION | C# 래퍼 내부(마샬링 등)에서 예외가 발생함. exceptionMessage 를 확인해야 해요 | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
발생 가능한 결과 코드는 BaseSDKResultCode 를 참조하세요.
Example
using static Stove.PCSDK.Base;
string accessToken = string.Empty;
Result result = Base_GetAccessToken(ref accessToken, 1024);
if (result.IsSuccessful())
{
// accessToken 을 사용하는 로직을 구현해 주세요.
}
else
{
// 실패 시 로직을 구현해 주세요.
}
Notes
- 토큰이 갱신될 때 알림을 받으려면 Base_AccessTokenRenewed 를 사용해야 해요.
- 조회한 토큰을 게임에서 따로 보관해 두고 다시 쓰지 마세요. SDK 가 토큰을 주기적으로 갱신하므로 보관해 둔 값은 만료될 수 있어요. 토큰이 필요할 때마다 이 함수를 호출해 그때의 유효한 값을 받아 쓰세요.
See Also
Base_GetGds
종류 함수 · 모듈 Base · 버전 3.1.0
Description
Base_GetGds 는 유저의 GDS 정보를 StovePCGds 에 채워 돌려주는 함수예요. 초기화 후 호출해야 해요.
Declaration
public static Result Base_GetGds(ref StovePCGds gds);
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
gds | ref StovePCGds | Y | GDS 정보를 돌려받을 변수 |
Returns
| Type | Description |
|---|---|
| Result | 조회 결과. IsSuccessful() 로 성공 여부를 판정해요 |
Error Codes
| Code | Name | Description | Show to User | In-Game Message |
|---|---|---|---|---|
| 0 | SUCCESS | 성공 | x | |
| 83 | INVALID_GDS_INFO | GDS 정보가 올바르지 않음. 초기화 상태를 확인해야 해요 | x | |
| 254 | MANAGED_EXCEPTION | C# 래퍼 내부(마샬링 등)에서 예외가 발생함. exceptionMessage 를 확인해야 해요 | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
발생 가능한 결과 코드는 BaseSDKResultCode 를 참조하세요.
Example
using static Stove.PCSDK.Base;
StovePCGds gds = default;
Result result = Base_GetGds(ref gds);
if (result.IsSuccessful())
{
// gds.nation, gds.regulation 등을 사용하는 로직을 구현해 주세요.
}
else
{
// 실패 시 로직을 구현해 주세요.
}
Notes
- 실패 시
gds는 기본값(default)으로 유지돼요.
See Also
Base_GetSignin
종류 함수 · 모듈 Base · 버전 3.1.0
Description
Base_GetSignin 은 유저의 로그인 정보를 StovePCSignin 에 채워 돌려주는 함수예요. 초기화 후 호출해야 해요.
Declaration
public static Result Base_GetSignin(ref StovePCSignin signin);
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
signin | ref StovePCSignin | Y | 로그인 정보를 돌려받을 변수 |
Returns
| Type | Description |
|---|---|
| Result | 조회 결과. IsSuccessful() 로 성공 여부를 판정해요 |
Error Codes
| Code | Name | Description | Show to User | In-Game Message |
|---|---|---|---|---|
| 0 | SUCCESS | 성공 | x | |
| 254 | MANAGED_EXCEPTION | C# 래퍼 내부(마샬링 등)에서 예외가 발생함. exceptionMessage 를 확인해야 해요 | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
발생 가능한 결과 코드는 BaseSDKResultCode 를 참조하세요.
Example
using static Stove.PCSDK.Base;
StovePCSignin signin = default;
Result result = Base_GetSignin(ref signin);
if (result.IsSuccessful())
{
// signin.personVerify, signin.nationality 등을 사용하는 로직을 구현해 주세요.
}
else
{
// 실패 시 로직을 구현해 주세요.
}
Notes
- 실패 시
signin은 기본값(default)으로 유지돼요.
See Also
Base_GetTraceHint
종류 함수 · 모듈 Base · 버전 3.0.0.4 · 폐기 예정
Description
폐기(deprecated)된 기능이에요. 신규 인터페이스에서도 제공하지 않아요.
Base_GetTraceHint 는 로그 추적용 세션 힌트 정보를 StovePCTraceHint 에 채워 돌려주는 함수예요. 초기화 후 호출해야 해요.
Declaration
public static Result Base_GetTraceHint(ref StovePCTraceHint traceHint);
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
traceHint | ref StovePCTraceHint | Y | 세션 힌트 정보를 돌려받을 변수 |
Returns
| Type | Description |
|---|---|
| Result | 조회 결과. IsSuccessful() 로 성공 여부를 판정해요 |
Error Codes
| Code | Name | Description | Show to User | In-Game Message |
|---|---|---|---|---|
| 0 | SUCCESS | 성공 | x | |
| 254 | MANAGED_EXCEPTION | C# 래퍼 내부(마샬링 등)에서 예외가 발생함. exceptionMessage 를 확인해야 해요 | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
발생 가능한 결과 코드는 BaseSDKResultCode 를 참조하세요.
Example
using static Stove.PCSDK.Base;
StovePCTraceHint traceHint = default;
Result result = Base_GetTraceHint(ref traceHint);
if (result.IsSuccessful())
{
// traceHint.sessionId 등을 로그에 남기는 로직을 구현해 주세요.
}
else
{
// 실패 시 로직을 구현해 주세요.
}
Notes
- 실패 시
traceHint는 기본값(default)으로 유지돼요. - 이 함수와 StovePCTraceHint 는 향후 버전에서 제거될 예정이에요.
See Also
Base_GetUser
종류 함수 · 모듈 Base · 버전 3.0.0.4
Description
Base_GetUser 는 로그인한 유저 정보를 StovePCUser 에 채워 돌려주는 함수예요. 초기화 후 호출해야 해요.
Declaration
public static Result Base_GetUser(ref StovePCUser user);
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
user | ref StovePCUser | Y | 유저 정보를 돌려받을 변수 |
Returns
| Type | Description |
|---|---|
| Result | 조회 결과. IsSuccessful() 로 성공 여부를 판정해요 |
Error Codes
| Code | Name | Description | Show to User | In-Game Message |
|---|---|---|---|---|
| 0 | SUCCESS | 성공 | x | |
| 254 | MANAGED_EXCEPTION | C# 래퍼 내부(마샬링 등)에서 예외가 발생함. exceptionMessage 를 확인해야 해요 | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
발생 가능한 결과 코드는 BaseSDKResultCode 를 참조하세요.
Example
using static Stove.PCSDK.Base;
StovePCUser user = default;
Result result = Base_GetUser(ref user);
if (result.IsSuccessful())
{
// user.nickname, user.gameUserId 를 사용하는 로직을 구현해 주세요.
}
else
{
// 실패 시 로직을 구현해 주세요.
}
Notes
- 실패 시
user는 기본값(default)으로 유지돼요.
See Also
Base_GetVersion
종류 함수 · 모듈 Base · 버전 3.0.0.4
Description
Base_GetVersion 은 SDK 의 버전 문자열을 version 에 채워 돌려주는 함수예요.
Declaration
public static Result Base_GetVersion(ref string version, uint length);
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
version | ref string | Y | 버전 문자열을 돌려받을 변수 |
length | uint | Y | version 을 채우는 데 내부적으로 사용하는 버퍼 크기(문자 수) |
Returns
| Type | Description |
|---|---|
| Result | 조회 결과. IsSuccessful() 로 성공 여부를 판정해요 |
Error Codes
| Code | Name | Description | Show to User | In-Game Message |
|---|---|---|---|---|
| 0 | SUCCESS | 성공 | x | |
| 254 | MANAGED_EXCEPTION | C# 래퍼 내부(마샬링 등)에서 예외가 발생함. exceptionMessage 를 확인해야 해요 | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
발생 가능한 결과 코드는 BaseSDKResultCode 를 참조하세요.
Example
using static Stove.PCSDK.Base;
string version = string.Empty;
Result result = Base_GetVersion(ref version, 64);
if (result.IsSuccessful())
{
// version 을 사용하는 로직을 구현해 주세요.
}
else
{
// 실패 시 로직을 구현해 주세요.
}
Notes
- 없음
See Also
- 없음
Base_Initialize
종류 함수 · 모듈 Base · 버전 3.0.0.4
Description
Base_Initialize 는 StovePCInitializeParam 을 받아 SDK 를 초기화하는 비동기 함수예요. 결과는 onFinished 콜백으로 전달돼요.
이 함수를 호출하기 전에는 다른 SDK API 를 호출할 수 없어요. 초기화 파라미터 없이 호출하려면 Base_InitializeEx 를 사용해야 해요.
이 함수를 호출하기 전에 Base_RestartAppIfNecessary 계열 함수(
Base_RestartAppIfNecessary,Base_RestartAppIfNecessaryAsync,Base_RestartAppIfNecessaryAsyncEx등)를 먼저 호출해 런처를 통해 실행되었는지 확인해야 해요. 먼저 호출하지 않으면NEED_STOVE_LAUNCHER(84)로 실패해요.
Declaration
public static void Base_Initialize(StovePCInitializeParam initParam, OnInitializeFinished onFinished);
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
initParam | StovePCInitializeParam | Y | 초기화 파라미터 |
onFinished | OnInitializeFinished | Y | 결과를 받을 콜백 |
Returns
| Type | Description |
|---|---|
void | 없음 |
Callback
public delegate void OnInitializeFinished(CallbackResult result);
| Name | Type | Description |
|---|---|---|
result | CallbackResult | 초기화 결과 |
콜백은 Base_RunCallback() 을 호출한 스레드에서 실행돼요. 이 호출 1건에 대해 1회 실행돼요.
Error Codes
| Code | Name | Description | Show to User | In-Game Message |
|---|---|---|---|---|
| 0 | SUCCESS | 성공 | x | |
| 5 | INVALID_PARAM | initParam 의 environment · gameId · applicationKey 중 비어 있는 값이 있음 | x | |
| 18 | ALREADY_INITIALIZED | 이미 초기화되어 있음 | x | |
| 84 | NEED_STOVE_LAUNCHER | Base_RestartAppIfNecessary 계열 함수를 먼저 호출하지 않았거나, 런처를 통해 실행되지 않음 | O | 게임이 스토브 PC 클라이언트를 통해 실행되지 않아 종료됩니다.클라이언트에서 다시 게임을 실행해주세요.클라이언트 미설치 시 스토브 홈페이지에서 설치해주세요.[확인] |
| 254 | MANAGED_EXCEPTION | C# 래퍼 내부(마샬링 등)에서 예외가 발생함. result.exceptionMessage 를 확인해야 해요 | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
발생 가능한 결과 코드는 BaseSDKResultCode 를 참조하세요.
Example
using static Stove.PCSDK.Base;
void OnInitializeFinished(CallbackResult callbackResult)
{
if (callbackResult.result.IsSuccessful())
{
// 성공 시 로직을 구현해 주세요.
}
else
{
// 실패 시 로직을 구현해 주세요.
}
}
StovePCInitializeParam initParam = new StovePCInitializeParam
{
environment = "real",
gameId = "your_game_id",
applicationKey = "your_application_key"
};
Base_Initialize(initParam, OnInitializeFinished);
// 게임 루프에서 반복 호출해 콜백을 처리해 주세요.
while (isRunning)
{
Base_RunCallback();
}
Notes
- 콜백을 받으려면 게임 루프에서 Base_RunCallback 을 반복 호출해야 해요. 이 함수는
while(true)형태로 별도 호출하는 것이 아니라 게임 루프 안에서 매 프레임 호출해야 해요. - 종료 시에는 Base_UnInitialize 를 호출해야 해요.
See Also
Base_InitializeEx
종류 함수 · 모듈 Base · 버전 3.4.1
Description
Base_InitializeEx 는 Base_Initialize 와 달리 StovePCInitializeParam 을 받지 않고 콜백만 받아요. 초기화 결과는 동일하게 onFinished 콜백으로 전달돼요.
이 함수는 Base_RestartAppIfNecessary 계열 함수(
Base_RestartAppIfNecessary,Base_RestartAppIfNecessaryAsync,Base_RestartAppIfNecessaryAsyncEx2등)가 캐시한 초기화 파라미터를 재사용해요. 이 함수를 호출하기 전에 반드시Base_RestartAppIfNecessary계열 함수를 먼저 호출해야 하며, 먼저 호출하지 않으면NEED_STOVE_LAUNCHER(84)로 실패해요.
Declaration
public static void Base_InitializeEx(OnInitializeFinished onFinished);
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
onFinished | OnInitializeFinished | Y | 결과를 받을 콜백 |
Returns
| Type | Description |
|---|---|
void | 없음 |
Callback
public delegate void OnInitializeFinished(CallbackResult result);
| Name | Type | Description |
|---|---|---|
result | CallbackResult | 초기화 결과 |
콜백은 Base_RunCallback() 을 호출한 스레드에서 실행돼요. 이 호출 1건에 대해 1회 실행돼요.
Error Codes
| Code | Name | Description | Show to User | In-Game Message |
|---|---|---|---|---|
| 0 | SUCCESS | 성공 | x | |
| 5 | INVALID_PARAM | Base_RestartAppIfNecessary 계열 함수가 캐시한 environment · gameId · applicationKey 중 비어 있는 값이 있음 | x | |
| 18 | ALREADY_INITIALIZED | 이미 초기화되어 있음 | x | |
| 84 | NEED_STOVE_LAUNCHER | Base_RestartAppIfNecessary 계열 함수를 먼저 호출하지 않았거나, 런처를 통해 실행되지 않음 | O | 게임이 스토브 PC 클라이언트를 통해 실행되지 않아 종료됩니다.클라이언트에서 다시 게임을 실행해주세요.클라이언트 미설치 시 스토브 홈페이지에서 설치해주세요.[확인] |
| 254 | MANAGED_EXCEPTION | C# 래퍼 내부(마샬링 등)에서 예외가 발생함. result.exceptionMessage 를 확인해야 해요 | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
발생 가능한 결과 코드는 BaseSDKResultCode 를 참조하세요.
Example
using static Stove.PCSDK.Base;
void OnInitializeFinished(CallbackResult callbackResult)
{
if (callbackResult.result.IsSuccessful())
{
// 성공 시 로직을 구현해 주세요.
}
else
{
// 실패 시 로직을 구현해 주세요.
}
}
Base_InitializeEx(OnInitializeFinished);
Notes
- Base_Initialize 와의 시그니처 차이는 StovePCInitializeParam 매개변수가 없다는 점뿐이에요.
- 콜백을 받으려면 게임 루프에서 Base_RunCallback 을 반복 호출해야 해요.
See Also
Base_OpenExternalUrl
종류 함수 · 모듈 Base · 버전 3.3.4
Description
Base_OpenExternalUrl 은 지정한 URL 을 외부에서 여는 비동기 함수예요. 결과는 onFinished 콜백으로 전달돼요.
Declaration
public static void Base_OpenExternalUrl(string url, OnOpenExternalUrlFinished onFinished);
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
url | string | Y | 열고자 하는 URL |
onFinished | OnOpenExternalUrlFinished | Y | 결과를 받을 콜백 |
Returns
| Type | Description |
|---|---|
void | 없음 |
Callback
public delegate void OnOpenExternalUrlFinished(CallbackResult result);
| Name | Type | Description |
|---|---|---|
result | CallbackResult | 호출 결과 |
콜백은 Base_RunCallback() 을 호출한 스레드에서 실행돼요. 이 호출 1건에 대해 1회 실행돼요.
Error Codes
| Code | Name | Description | Show to User | In-Game Message |
|---|---|---|---|---|
| 0 | SUCCESS | 성공 | x | |
| 254 | MANAGED_EXCEPTION | C# 래퍼 내부(마샬링 등)에서 예외가 발생함. result.exceptionMessage 를 확인해야 해요 | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
발생 가능한 결과 코드는 BaseSDKResultCode 를 참조하세요.
Example
using static Stove.PCSDK.Base;
void OnOpenExternalUrlFinished(CallbackResult callbackResult)
{
if (callbackResult.result.IsSuccessful())
{
// 성공 시 로직을 구현해 주세요.
}
else
{
// 실패 시 로직을 구현해 주세요.
}
}
Base_OpenExternalUrl("https://www.onstove.com", OnOpenExternalUrlFinished);
Notes
onFinished는 필수예요. 넘기지 않으면INVALID_PARAM으로 처리돼요.- 기본 브라우저에서 지정한 주소를 열어요. 게임 창은 그대로 유지돼요.
- 콜백은
Base_RunCallback()을 호출한 스레드에서 실행돼요.
See Also
- 없음
Base_OverImmersionNotification
종류 함수 · 모듈 Base · 버전 3.3.0
Description
Base_OverImmersionNotification 은 과몰입 경고가 발생할 때 호출될 콜백을 등록하는 함수예요. onFinished 를 다시 호출하면 이전에 등록된 같은 타입의 콜백은 새 콜백으로 교체돼요.
Declaration
public static void Base_OverImmersionNotification(OnOverImmersionFinished onFinished);
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
onFinished | OnOverImmersionFinished | N | 과몰입 경고 발생 시 호출될 콜백. null 을 넘기면 등록을 해제해요 |
Returns
| Type | Description |
|---|---|
void | 없음 |
Callback
public delegate void OnOverImmersionFinished(CallbackResult result, StovePCOverImmersion overImmersion);
| Name | Type | Description |
|---|---|---|
result | CallbackResult | 알림 결과 |
overImmersion | StovePCOverImmersion | 과몰입 경고 내용 |
콜백은 Base_RunCallback() 을 호출한 스레드에서 실행돼요. 과몰입 경고가 발생할 때마다 호출돼요.
Error Codes
| Code | Name | Description | Show to User | In-Game Message |
|---|---|---|---|---|
| 0 | SUCCESS | 성공 | x | |
| 254 | MANAGED_EXCEPTION | C# 래퍼 내부(마샬링 등)에서 예외가 발생함. result.exceptionMessage 를 확인해야 해요 | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
발생 가능한 결과 코드는 BaseSDKResultCode 를 참조하세요.
Example
using static Stove.PCSDK.Base;
void OnOverImmersionFinished(CallbackResult callbackResult, StovePCOverImmersion overImmersion)
{
if (callbackResult.result.IsSuccessful())
{
// overImmersion.warningMessage 등으로 경고를 표시하는 로직을 구현해 주세요.
}
}
Base_OverImmersionNotification(OnOverImmersionFinished);
Notes
PCBANG_FREE상태에서도 이 알림은 계속 동작할 수 있어요. 상태와 무관하게 콜백 등록을 유지해야 해요.
See Also
Base_RestartAppIfNecessary
종류 함수 · 모듈 Base · 버전 3.1.0
Description
Base_RestartAppIfNecessary 는 StovePCInitializeParam 을 넘겨 필요한 경우 앱을 재시작시키는 동기 함수예요. 콜백 없이 즉시 bool 값을 돌려줘요.
비동기로 처리하려면 Base_RestartAppIfNecessaryAsync 계열을 사용해야 해요.
Declaration
public static bool Base_RestartAppIfNecessary(StovePCInitializeParam initParam);
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
initParam | StovePCInitializeParam | Y | 초기화 파라미터 |
Returns
| Type | Description |
|---|---|
bool | true 이면 스토브 프로토콜 핸들러로 재실행되므로 이후 코드를 실행하지 말고 게임을 종료해야 해요. false 이면 이미 런처로 실행된 상태이므로 이어서 Base_Initialize() 를 호출해요 |
Error Codes
없음. 이 함수는 Result/CallbackResult 를 반환하지 않으며, 내부에서 예외가 발생하면 C# 예외가 그대로 다시 던져져요(rethrow).
Example
using static Stove.PCSDK.Base;
StovePCInitializeParam initParam = new StovePCInitializeParam
{
environment = "real",
gameId = "your_game_id",
applicationKey = "your_application_key"
};
bool restarted = Base_RestartAppIfNecessary(initParam);
Notes
- 이 함수는 동기 함수이며 콜백을 받지 않아요. 비동기로 재시작을 처리하려면 Base_RestartAppIfNecessaryAsync, Base_RestartAppIfNecessaryAsyncEx, Base_RestartAppIfNecessaryAsyncEx2 를 사용해야 해요.
- 예외 발생 시
Result로 감싸지 않고 C# 예외가 그대로 다시 던져지므로, 호출부에서 예외 처리를 고려해야 해요.
See Also
Base_RestartAppIfNecessaryAsync
종류 함수 · 모듈 Base · 버전 3.3.0
Description
Base_RestartAppIfNecessaryAsync 는 StovePCInitializeParam 과 대기 시간(waitTimeMillisec)을 받아, 필요한 경우 앱을 비동기로 재시작하고 결과를 콜백으로 알려줘요.
런처 실행 여부를 별도로 지정해야 하면 Base_RestartAppIfNecessaryAsyncEx 를, 확장 초기화 파라미터를 한 구조체로 넘기려면 Base_RestartAppIfNecessaryAsyncEx2 를 사용해야 해요.
Declaration
public static void Base_RestartAppIfNecessaryAsync(StovePCInitializeParam initParam, uint waitTimeMillisec, OnRestartAppIfNecessaryAsyncFinished onFinished);
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
initParam | StovePCInitializeParam | Y | 초기화 파라미터 |
waitTimeMillisec | uint | Y | 대기 시간(밀리초) |
onFinished | OnRestartAppIfNecessaryAsyncFinished | Y | 결과를 받을 콜백 |
Returns
| Type | Description |
|---|---|
void | 없음 |
Callback
public delegate void OnRestartAppIfNecessaryAsyncFinished(CallbackResult result, bool restartAppIfNecessary);
| Name | Type | Description |
|---|---|---|
result | CallbackResult | 호출 결과 |
restartAppIfNecessary | bool | 재시작 여부를 나타내는 값이에요 |
콜백은 Base_RunCallback() 을 호출한 스레드에서 실행돼요. 이 호출 1건에 대해 1회 실행돼요.
Error Codes
| Code | Name | Description | Show to User | In-Game Message |
|---|---|---|---|---|
| 0 | SUCCESS | 성공 | x | |
| 254 | MANAGED_EXCEPTION | C# 래퍼 내부(마샬링 등)에서 예외가 발생함. result.exceptionMessage 를 확인해야 해요 | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
아래 코드를 받으면 반드시 게임을 종료해야 해요. 정상 진행이 불가능한 상태예요.
87IPC_CONNECT_FAILED·88IPC_AES_KEY_NOT_RECEIVED·89IPC_TIMEOUT— 스토브 PC 클라이언트를 통해 게임을 다시 실행해야 해요253UNMANAGED_EXCEPTION·254MANAGED_EXCEPTION— 재시작 여부를 판단할 수 없는 상태이므로 게임을 종료해야 해요
발생 가능한 결과 코드는 BaseSDKResultCode 를 참조하세요.
Example
using static Stove.PCSDK.Base;
void OnRestartAppIfNecessaryAsyncFinished(CallbackResult callbackResult, bool restartAppIfNecessary)
{
if (callbackResult.result.IsSuccessful())
{
// 성공 시 로직을 구현해 주세요.
}
else
{
// 실패 시 로직을 구현해 주세요.
}
}
StovePCInitializeParam initParam = new StovePCInitializeParam
{
environment = "real",
gameId = "your_game_id",
applicationKey = "your_application_key"
};
Base_RestartAppIfNecessaryAsync(initParam, 3000, OnRestartAppIfNecessaryAsyncFinished);
Notes
onFinished를null로 넘기면 콜백 없이 재시작만 처리돼요.- 콜백을 받으려면 게임 루프에서 Base_RunCallback 을 반복 호출해야 해요.
See Also
Base_RestartAppIfNecessaryAsyncEx
종류 함수 · 모듈 Base · 버전 3.4.0
Description
Base_RestartAppIfNecessaryAsyncEx 는 Base_RestartAppIfNecessaryAsync 에 launchLauncher 매개변수가 추가된 버전이에요. 런처를 함께 실행할지를 호출자가 직접 지정할 수 있어요.
Declaration
public static void Base_RestartAppIfNecessaryAsyncEx(StovePCInitializeParam initParam, uint waitTimeMillisec, bool launchLauncher, OnRestartAppIfNecessaryAsyncFinished onFinished);
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
initParam | StovePCInitializeParam | Y | 초기화 파라미터 |
waitTimeMillisec | uint | Y | 대기 시간(밀리초) |
launchLauncher | bool | Y | 런처 실행 여부 |
onFinished | OnRestartAppIfNecessaryAsyncFinished | Y | 결과를 받을 콜백 |
Returns
| Type | Description |
|---|---|
void | 없음 |
Callback
public delegate void OnRestartAppIfNecessaryAsyncFinished(CallbackResult result, bool restartAppIfNecessary);
| Name | Type | Description |
|---|---|---|
result | CallbackResult | 호출 결과 |
restartAppIfNecessary | bool | 재시작 여부를 나타내는 값이에요 |
콜백은 Base_RunCallback() 을 호출한 스레드에서 실행돼요. 이 호출 1건에 대해 1회 실행돼요.
Error Codes
| Code | Name | Description | Show to User | In-Game Message |
|---|---|---|---|---|
| 0 | SUCCESS | 성공 | x | |
| 253 | UNMANAGED_EXCEPTION | 네이티브 SDK 내부에서 예외가 발생함 | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
| 254 | MANAGED_EXCEPTION | C# 래퍼 내부(마샬링 등)에서 예외가 발생함. result.exceptionMessage 를 확인해야 해요 | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
아래 코드를 받으면 반드시 게임을 종료해야 해요. 정상 진행이 불가능한 상태예요.
87IPC_CONNECT_FAILED·88IPC_AES_KEY_NOT_RECEIVED·89IPC_TIMEOUT— 스토브 PC 클라이언트를 통해 게임을 다시 실행해야 해요253UNMANAGED_EXCEPTION·254MANAGED_EXCEPTION— 재시작 여부를 판단할 수 없는 상태이므로 게임을 종료해야 해요
발생 가능한 결과 코드는 BaseSDKResultCode 를 참조하세요.
Example
using static Stove.PCSDK.Base;
void OnRestartAppIfNecessaryAsyncFinished(CallbackResult callbackResult, bool restartAppIfNecessary)
{
if (callbackResult.result.IsSuccessful())
{
// 성공 시 로직을 구현해 주세요.
}
else
{
// 실패 시 로직을 구현해 주세요.
}
}
StovePCInitializeParam initParam = new StovePCInitializeParam
{
environment = "real",
gameId = "your_game_id",
applicationKey = "your_application_key"
};
Base_RestartAppIfNecessaryAsyncEx(initParam, 3000, true, OnRestartAppIfNecessaryAsyncFinished);
Notes
- 백그라운드 스레드에서 발생한 예외도
UNMANAGED_EXCEPTION(253) 또는MANAGED_EXCEPTION(254) 으로 콜백에 전달돼요. - Base_RestartAppIfNecessaryAsync 와 시그니처가 다른 점은
launchLauncher매개변수 하나뿐이에요.
See Also
Base_RestartAppIfNecessaryAsyncEx2
종류 함수 · 모듈 Base · 버전 3.4.1
Description
스팀 연동 여부와 관계없이 사용할 수 있어요.
platformName만 스토브 외 플랫폼(Steam 등)과 함께 연동할 때 채우는 선택 필드이며, 스토브 단독 연동이라면 값을 설정하지 않거나 빈 문자열("")로 두면 Base_RestartAppIfNecessaryAsyncEx 와 동일하게 동작해요.
Base_RestartAppIfNecessaryAsyncEx2 는 Base_RestartAppIfNecessaryAsyncEx 의 initParam, waitTimeMillisec, launchLauncher 를 하나의 StovePCInitializeParamEx2 구조체로 통합한 버전이에요. platformName 과 예약 필드도 이 구조체를 통해 함께 전달해요.
Declaration
public static void Base_RestartAppIfNecessaryAsyncEx2(StovePCInitializeParamEx2 initParam, OnRestartAppIfNecessaryAsyncFinished onFinished);
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
initParam | StovePCInitializeParamEx2 | Y | 확장 초기화 파라미터 |
onFinished | OnRestartAppIfNecessaryAsyncFinished | Y | 결과를 받을 콜백 |
Returns
| Type | Description |
|---|---|
void | 없음 |
Callback
public delegate void OnRestartAppIfNecessaryAsyncFinished(CallbackResult result, bool restartAppIfNecessary);
| Name | Type | Description |
|---|---|---|
result | CallbackResult | 호출 결과 |
restartAppIfNecessary | bool | 재시작 여부를 나타내는 값이에요 |
콜백은 Base_RunCallback() 을 호출한 스레드에서 실행돼요. 이 호출 1건에 대해 1회 실행돼요.
Error Codes
| Code | Name | Description | Show to User | In-Game Message |
|---|---|---|---|---|
| 0 | SUCCESS | 성공 | x | |
| 253 | UNMANAGED_EXCEPTION | 네이티브 SDK 내부에서 예외가 발생함 | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
| 254 | MANAGED_EXCEPTION | C# 래퍼 내부(마샬링 등)에서 예외가 발생함. result.exceptionMessage 를 확인해야 해요 | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
아래 코드를 받으면 반드시 게임을 종료해야 해요. 정상 진행이 불가능한 상태예요.
87IPC_CONNECT_FAILED·88IPC_AES_KEY_NOT_RECEIVED·89IPC_TIMEOUT— 스토브 PC 클라이언트를 통해 게임을 다시 실행해야 해요253UNMANAGED_EXCEPTION·254MANAGED_EXCEPTION— 재시작 여부를 판단할 수 없는 상태이므로 게임을 종료해야 해요
발생 가능한 결과 코드는 BaseSDKResultCode 를 참조하세요.
Example
using static Stove.PCSDK.Base;
void OnRestartAppIfNecessaryAsyncFinished(CallbackResult callbackResult, bool restartAppIfNecessary)
{
if (callbackResult.result.IsSuccessful())
{
// 성공 시 로직을 구현해 주세요.
}
else
{
// 실패 시 로직을 구현해 주세요.
}
}
StovePCInitializeParamEx2 initParam = new StovePCInitializeParamEx2
{
environment = "real",
gameId = "your_game_id",
applicationKey = "your_application_key",
waitTimeMillisec = 3000,
launchLauncher = true,
platformName = "your_platform_name"
};
Base_RestartAppIfNecessaryAsyncEx2(initParam, OnRestartAppIfNecessaryAsyncFinished);
Notes
- 백그라운드 스레드에서 발생한 예외도
UNMANAGED_EXCEPTION(253) 또는MANAGED_EXCEPTION(254) 으로 콜백에 전달돼요. - Base_RestartAppIfNecessaryAsync, Base_RestartAppIfNecessaryAsyncEx 와 달리 별도 매개변수 없이 StovePCInitializeParamEx2 하나만 받아요.
See Also
Base_RunCallback
종류 함수 · 모듈 Base · 버전 3.0.0.4
Description
Base_RunCallback 은 대기 중인 비동기 API 콜백을 현재 호출 스레드에서 실행시키는 함수예요. 모든 SDK 비동기 API(예: Base_Initialize)의 콜백은 SDK 내부 스레드가 아니라, 이 함수를 호출한 스레드에서 실행돼요.
게임 루프에서 매 프레임(또는 주기적으로) 호출해야 대기 중인 콜백이 처리돼요.
Declaration
public static void Base_RunCallback();
Parameters
없음
Returns
| Type | Description |
|---|---|
void | 없음 |
Error Codes
없음. 이 함수는 Result/CallbackResult 를 반환하지 않으며, 내부에서 예외가 발생하면 C# 예외가 그대로 다시 던져져요(rethrow).
Example
using static Stove.PCSDK.Base;
// 게임 루프 안에서 매 프레임 호출해 주세요.
void Update()
{
Base_RunCallback();
}
Notes
while(true)형태로 별도 호출하는 함수가 아니라, 게임 루프 안에서 반복 호출해야 하는 함수예요.- 대기 시간을 지정하려면 Base_RunCallbackWithTimeout 을 사용해야 해요.
See Also
Base_RunCallbackWithTimeout
종류 함수 · 모듈 Base · 버전 3.3.0
Description
Base_RunCallbackWithTimeout 은 Base_RunCallback 과 같은 역할을 하되, timeoutMillisec 로 대기 시간을 지정할 수 있는 함수예요. 콜백은 이 함수를 호출한 스레드에서 실행돼요.
Declaration
public static void Base_RunCallbackWithTimeout(uint timeoutMillisec);
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
timeoutMillisec | uint | Y | 대기 시간(밀리초) |
Returns
| Type | Description |
|---|---|
void | 없음 |
Error Codes
없음. 이 함수는 Result/CallbackResult 를 반환하지 않으며, 내부에서 예외가 발생하면 C# 예외가 그대로 다시 던져져요(rethrow).
Example
using static Stove.PCSDK.Base;
Base_RunCallbackWithTimeout(100);
Notes
- Base_RunCallback 과 마찬가지로 게임 루프에서 반복 호출해야 해요.
See Also
Base_SetGameProfile
종류 함수 · 모듈 Base · 버전 3.0.0.4
Description
Base_SetGameProfile 은 StovePCGameProfile 을 SDK 에 전달하는 동기 함수예요.
Declaration
public static Result Base_SetGameProfile(StovePCGameProfile gameProfile);
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
gameProfile | StovePCGameProfile | Y | 설정할 게임 프로필 |
Returns
| Type | Description |
|---|---|
| Result | 설정 결과. IsSuccessful() 로 성공 여부를 판정해요 |
Error Codes
| Code | Name | Description | Show to User | In-Game Message |
|---|---|---|---|---|
| 0 | SUCCESS | 성공 | x | |
| 254 | MANAGED_EXCEPTION | C# 래퍼 내부(마샬링 등)에서 예외가 발생함. exceptionMessage 를 확인해야 해요 | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
발생 가능한 결과 코드는 BaseSDKResultCode 를 참조하세요.
Example
using static Stove.PCSDK.Base;
StovePCGameProfile gameProfile = new StovePCGameProfile
{
worldId = "world_01",
characterNumber = 12345L
};
Result result = Base_SetGameProfile(gameProfile);
if (result.IsSuccessful())
{
// 성공 시 로직을 구현해 주세요.
}
else
{
// 실패 시 로직을 구현해 주세요.
}
Notes
- 없음
See Also
Base_SetLanguage
종류 함수 · 모듈 Base · 버전 3.1.0
Description
Base_SetLanguage 는 StoveLanguage 열거형 값으로 SDK 언어를 설정하는 동기 함수예요.
이 열거형에 없는 언어를 설정해야 하면 Base_SetLanguageEx 를 사용해야 해요.
새로 연동하는 경우에는 Base_SetLanguageEx 를 사용하세요. 열거형에 없는 언어까지 문자열로 지정할 수 있어 이후 언어가 추가되어도 그대로 쓸 수 있어요.
Declaration
public static Result Base_SetLanguage(StoveLanguage language);
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
language | StoveLanguage | Y | 설정할 언어 |
Returns
| Type | Description |
|---|---|
| Result | 설정 결과. IsSuccessful() 로 성공 여부를 판정해요 |
Error Codes
| Code | Name | Description | Show to User | In-Game Message |
|---|---|---|---|---|
| 0 | SUCCESS | 성공 | x | |
| 254 | MANAGED_EXCEPTION | C# 래퍼 내부(마샬링 등)에서 예외가 발생함. exceptionMessage 를 확인해야 해요 | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
발생 가능한 결과 코드는 BaseSDKResultCode 를 참조하세요.
Example
using static Stove.PCSDK.Base;
Result result = Base_SetLanguage(StoveLanguage.ko);
if (result.IsSuccessful())
{
// 성공 시 로직을 구현해 주세요.
}
else
{
// 실패 시 로직을 구현해 주세요.
}
Notes
- Base_SetLanguageEx 는
StoveLanguage열거형 대신 문자열을 받아요.
See Also
Base_SetLanguageEx
종류 함수 · 모듈 Base · 버전 3.4.0
Description
Base_SetLanguageEx 는 Base_SetLanguage 와 달리 StoveLanguage 열거형이 아니라 문자열로 언어를 설정하는 동기 함수예요. StoveLanguage 에 없는 언어 값을 설정해야 할 때 사용해요.
Declaration
public static Result Base_SetLanguageEx(string language);
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
language | string | Y | 설정할 언어 문자열 |
Returns
| Type | Description |
|---|---|
| Result | 설정 결과. IsSuccessful() 로 성공 여부를 판정해요 |
Error Codes
| Code | Name | Description | Show to User | In-Game Message |
|---|---|---|---|---|
| 0 | SUCCESS | 성공 | x | |
| 254 | MANAGED_EXCEPTION | C# 래퍼 내부(마샬링 등)에서 예외가 발생함. exceptionMessage 를 확인해야 해요 | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
발생 가능한 결과 코드는 BaseSDKResultCode 를 참조하세요.
Example
using static Stove.PCSDK.Base;
Result result = Base_SetLanguageEx("ko");
if (result.IsSuccessful())
{
// 성공 시 로직을 구현해 주세요.
}
else
{
// 실패 시 로직을 구현해 주세요.
}
Notes
- Base_SetLanguage 와의 시그니처 차이는 매개변수 타입이
StoveLanguage열거형이 아니라string이라는 점뿐이에요.
See Also
Base_ShutdownNotification
종류 함수 · 모듈 Base · 버전 3.3.0
Description
Base_ShutdownNotification 은 셧다운 대상 유저에게 셧다운 안내가 발생할 때 호출될 콜백을 등록하는 함수예요. onFinished 를 다시 호출하면 이전에 등록된 같은 타입의 콜백은 새 콜백으로 교체돼요.
Declaration
public static void Base_ShutdownNotification(OnShutdownFinished onFinished);
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
onFinished | OnShutdownFinished | N | 셧다운 알림 발생 시 호출될 콜백. null 을 넘기면 등록을 해제해요 |
Returns
| Type | Description |
|---|---|
void | 없음 |
Callback
public delegate void OnShutdownFinished(CallbackResult result, StovePCShutdown shutdown);
| Name | Type | Description |
|---|---|---|
result | CallbackResult | 알림 결과 |
shutdown | StovePCShutdown | 셧다운 안내 내용 |
콜백은 Base_RunCallback() 을 호출한 스레드에서 실행돼요. 셧다운 안내가 발생할 때마다 호출돼요.
Error Codes
| Code | Name | Description | Show to User | In-Game Message |
|---|---|---|---|---|
| 0 | SUCCESS | 성공 | x | |
| 254 | MANAGED_EXCEPTION | C# 래퍼 내부(마샬링 등)에서 예외가 발생함. result.exceptionMessage 로 확인해요 | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
발생 가능한 결과 코드는 BaseSDKResultCode 를 참조하세요.
Example
using static Stove.PCSDK.Base;
void OnShutdownFinished(CallbackResult callbackResult, StovePCShutdown shutdown)
{
if (callbackResult.result.IsSuccessful())
{
// shutdown.shutdownMessage 등으로 안내를 표시하는 로직을 구현해 주세요.
}
}
Base_ShutdownNotification(OnShutdownFinished);
Notes
ShutdownNotification은 한국 전용 기능이 아니에요. 셧다운이 적용된 계정이면 해외에서도 이 콜백이 호출돼요.
See Also
Base_UnInitialize
종류 함수 · 모듈 Base · 버전 3.0.0.4
Description
게임을 종료하기 전에 반드시 호출해야 해요. 게임 이용 시간을 집계해 서버에 반영하는 처리가 이 함수에서 이루어지므로, 호출하지 않고 프로세스를 내리면 해당 플레이 구간의 이용 시간이 누락돼요.
Base_UnInitialize 는 SDK 를 종료하는 동기 함수예요. 대기 중인 콜백 큐를 폐기 모드로 비운 뒤(등록된 사용자 delegate 는 이 과정에서 호출되지 않음) 콜백 컨테이너를 정리하고 네이티브 종료를 수행해요.
Declaration
public static Result Base_UnInitialize();
Parameters
없음
Returns
| Type | Description |
|---|---|
| Result | 종료 결과. IsSuccessful() 로 성공 여부를 판정해요 |
Error Codes
| Code | Name | Description | Show to User | In-Game Message |
|---|---|---|---|---|
| 0 | SUCCESS | 성공 | x | |
| 254 | MANAGED_EXCEPTION | C# 래퍼 내부(마샬링 등)에서 예외가 발생함. exceptionMessage 로 확인해요 | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
발생 가능한 결과 코드는 BaseSDKResultCode 를 참조하세요.
Example
using static Stove.PCSDK.Base;
Result result = Base_UnInitialize();
if (result.IsSuccessful())
{
// 성공 시 로직을 구현해 주세요.
}
else
{
// 실패 시 로직을 구현해 주세요.
}
Notes
- 종료 처리 중에는 이미 등록된 콜백이 폐기 모드로 처리되어 사용자 delegate 가 호출되지 않아요. 즉, 종료 직전에 등록한 비동기 API 의 콜백을 기대해서는 안 돼요.
- 초기화는 Base_Initialize 또는 Base_InitializeEx 와 짝을 이뤄요.
- 게임 종료 경로가 여러 개라면(정상 종료 · 예외 종료 · 강제 종료 처리) 모든 경로에서 이 함수를 거치도록 두세요. 이용 시간 집계가 이 시점에 정리돼요.
See Also
Base_VietnamAgeRatingNotification
종류 함수 · 모듈 Base · 버전 3.4.1
Description
Base_VietnamAgeRatingNotification 은 베트남 연령등급 오버레이 표시가 필요할 때 호출될 콜백을 등록하는 함수예요.
이 콜백은 1회성이며, 렌더링이 가능한 시점 이후에 등록해야 해요.
Declaration
public static void Base_VietnamAgeRatingNotification(OnVietnamAgeRatingFinished onFinished);
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
onFinished | OnVietnamAgeRatingFinished | N | 알림 발생 시 호출될 콜백. null 을 넘기면 등록을 해제해요 |
Returns
| Type | Description |
|---|---|
void | 없음 |
Callback
public delegate void OnVietnamAgeRatingFinished(CallbackResult result, StovePCVietnamAgeRatingInfo vietnamAgeRatingInfo);
| Name | Type | Description |
|---|---|---|
result | CallbackResult | 알림 결과 |
vietnamAgeRatingInfo | StovePCVietnamAgeRatingInfo | 연령등급 오버레이 표시 정보 |
콜백은 Base_RunCallback() 을 호출한 스레드에서 실행돼요. 1회성 콜백이에요.
Error Codes
| Code | Name | Description | Show to User | In-Game Message |
|---|---|---|---|---|
| 0 | SUCCESS | 성공 | x | |
| 254 | MANAGED_EXCEPTION | C# 래퍼 내부(마샬링 등)에서 예외가 발생함. result.exceptionMessage 로 확인해요 | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
발생 가능한 결과 코드는 BaseSDKResultCode 를 참조하세요.
Example
using static Stove.PCSDK.Base;
void OnVietnamAgeRatingFinished(CallbackResult callbackResult, StovePCVietnamAgeRatingInfo vietnamAgeRatingInfo)
{
if (callbackResult.result.IsSuccessful())
{
// vietnamAgeRatingInfo 로 오버레이를 그리는 로직을 구현해 주세요.
}
}
Base_VietnamAgeRatingNotification(OnVietnamAgeRatingFinished);
Notes
- 이 콜백은 렌더링이 가능한 시점 이후에 등록해야 해요. 초기화 직후처럼 렌더링 준비가 되지 않은 시점에 등록하면 오버레이가 정상적으로 표시되지 않을 수 있어요.
- 과몰입 알림은 Base_VietnamOverimmersionNotification 로 별도 등록해야 해요.
See Also
Base_VietnamOverimmersionNotification
종류 함수 · 모듈 Base · 버전 3.4.1
Description
Base_VietnamOverimmersionNotification 은 베트남 과몰입 오버레이 표시가 필요할 때 호출될 콜백을 등록하는 함수예요. onFinished 를 다시 호출하면 이전에 등록된 같은 타입의 콜백은 새 콜백으로 교체돼요.
이 콜백은 1회성이며, 렌더링이 가능한 시점 이후에 등록해야 해요.
Declaration
public static void Base_VietnamOverimmersionNotification(OnVietnamOverimmersionFinished onFinished);
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
onFinished | OnVietnamOverimmersionFinished | N | 알림 발생 시 호출될 콜백. null 을 넘기면 등록을 해제해요 |
Returns
| Type | Description |
|---|---|
void | 없음 |
Callback
public delegate void OnVietnamOverimmersionFinished(CallbackResult result, StovePCVietnamOverimmersionInfo vietnamOverimmersionInfo);
| Name | Type | Description |
|---|---|---|
result | CallbackResult | 알림 결과 |
vietnamOverimmersionInfo | StovePCVietnamOverimmersionInfo | 과몰입 오버레이 표시 정보 |
콜백은 Base_RunCallback() 을 호출한 스레드에서 실행돼요. 1회성 콜백이에요.
Error Codes
| Code | Name | Description | Show to User | In-Game Message |
|---|---|---|---|---|
| 0 | SUCCESS | 성공 | x | |
| 254 | MANAGED_EXCEPTION | C# 래퍼 내부(마샬링 등)에서 예외가 발생함. result.exceptionMessage 로 확인해요 | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
발생 가능한 결과 코드는 BaseSDKResultCode 를 참조하세요.
Example
using static Stove.PCSDK.Base;
void OnVietnamOverimmersionFinished(CallbackResult callbackResult, StovePCVietnamOverimmersionInfo vietnamOverimmersionInfo)
{
if (callbackResult.result.IsSuccessful())
{
// vietnamOverimmersionInfo 로 오버레이를 그리는 로직을 구현해 주세요.
}
}
Base_VietnamOverimmersionNotification(OnVietnamOverimmersionFinished);
Notes
- 이 콜백은 렌더링이 가능한 시점 이후에 등록해야 해요.
- 연령등급 알림은 Base_VietnamAgeRatingNotification 로 별도 등록해야 해요.
See Also
BaseSDKMethod
종류 열거형 · 모듈 Base · 버전 3.0.0.4
Description
BaseSDKMethod 는 Result.methodCode 와 CallbackResult 안 result.methodCode 에 담기는 값이에요. C# 래퍼가 관리 예외를 Result / CallbackResult 로 변환할 때 어느 API 호출에서 발생했는지 표시하는 용도로 써요.
값은 성격별로 다음과 같이 나뉘어요.
- 생명주기: 초기화 · 종료 · 버전 조회
- 인증/토큰: 액세스 토큰 조회 · 갱신
- 사용자/게임 정보: 유저 · GDS · 로그인 정보 조회
- 언어
- 알림/규제: 과몰입 · 셧다운 · 베트남 규제 알림
- 로그/진단: 로그 전송, 트레이스 힌트, 게임 프로필
- 앱 재시작/외부 연결: 런처 재시작, 외부 URL
이 중 INTERNAL_ 접두사가 붙은 값은 SDK 내부 전용이며, 아래 표에서 제외했어요.
INTERNAL_접두사가 붙은 값은 내부 전용이므로 아래 표에서 제외했어요. 이 값들은 게임 코드에서 직접 다룰 일이 없어요.
Declaration
public enum BaseSDKMethod
{
INITIALIZE = 1,
UNINITIALIZE = 2,
// ... 이하 Values 표 참조
GET_TRANSLATE_LANGUAGE = 119,
};
Enum Values
생명주기
| Code | Name | Description |
|---|---|---|
| 1 | INITIALIZE | Base_Initialize · Base_InitializeEx |
| 2 | UNINITIALIZE | Base_UnInitialize |
| 5 | GET_VERSION | Base_GetVersion |
인증/토큰
| Code | Name | Description |
|---|---|---|
| 64 | GET_ACCESS_TOKEN | Base_GetAccessToken |
| 65 | ACCESS_TOKEN_RENEWED | Base_AccessTokenRenewed |
| 112 | FORCE_REFRESH_TOKEN | 대응하는 공개 API 없음 (SDK 내부 전용) |
| 113 | ACCESS_TOKEN_RENEWED_TO_PRIVATE | 대응하는 공개 API 없음 (SDK 내부 전용) |
| 114 | GET_TOKEN_TO_PRIVATE | 대응하는 공개 API 없음 (SDK 내부 전용) |
사용자/게임 정보
| Code | Name | Description |
|---|---|---|
| 66 | GET_USER | Base_GetUser |
| 73 | GET_GDS | Base_GetGds |
| 74 | GET_SIGNIN | Base_GetSignin |
| 115 | GET_ENV_TOKEN_TO_PRIVATE | 대응하는 공개 API 없음 (SDK 내부 전용) |
| 116 | GET_GAMEID_TO_PRIVATE | 대응하는 공개 API 없음 (SDK 내부 전용) |
| 117 | GET_MEMBERNO_PRIVATE | 대응하는 공개 API 없음 (SDK 내부 전용) |
| 118 | GET_PUBLIC_IP | 대응하는 공개 API 없음 (SDK 내부 전용) |
언어
| Code | Name | Description |
|---|---|---|
| 67 | SET_LANGUAGE | Base_SetLanguage · Base_SetLanguageEx |
| 119 | GET_TRANSLATE_LANGUAGE | 대응하는 공개 API 없음 (SDK 내부 전용) |
알림/규제
| Code | Name | Description |
|---|---|---|
| 68 | OVER_IMMERSION_NOTIFICATION | Base_OverImmersionNotification |
| 69 | SHUTDOWN_NOTIFICATION | Base_ShutdownNotification |
| 79 | VIETNAM_AGE_RATING_NOTIFICATION | Base_VietnamAgeRatingNotification |
| 80 | VIETNAM_OVER_IMMERSION_NOTIFICATION | Base_VietnamOverimmersionNotification |
로그/진단
| Code | Name | Description |
|---|---|---|
| 70 | LOG_ADD | Base_LogAdd (Deprecated) — 현재 공개된 헤더에는 대응하는 함수가 없어요 |
| 71 | GET_TRACE_HINT | Base_GetTraceHint |
| 72 | SET_GAME_PROFILE | Base_SetGameProfile |
앱 재시작/외부 연결
| Code | Name | Description |
|---|---|---|
| 75 | RESTART_APP_IF_NECESSARY | Base_RestartAppIfNecessary |
| 76 | RESTART_APP_IF_NECESSARY_ASYNC | Base_RestartAppIfNecessaryAsync 계열(Ex, Ex2 포함) |
| 77 | OPEN_EXTERNAL_URL | Base_OpenExternalUrl |
| 78 | GET_CLOUD_SAVING_PATH | Base_GetCloudSavingPath — 스토어인디 전용 |
미사용 번호
| Code | Name | Description |
|---|---|---|
| — | 6–63 | 사용하지 않아요 (미사용 번호) |
| — | 81–95 | 사용하지 않아요 (미사용 번호) |
내부 전용 값(INTERNAL_SEND_81PLUG, INTERNAL_UPDATE_81PLUG, INTERNAL_SET_PLAYTIME_REPORT, INTERNAL_OPERATOR_REPORT_PLAYTIME, INTERNAL_GAME_EXIT_REPORT_PLAYTIME, INTERNAL_FILE_SAVE_UNSET_PLAYTIME, INTERNAL_FAILED_PLAYTIME_TRANSFERS, INTERNAL_OPERATOR_REPORT_CONCURRENT_USER, INTERNAL_SERVER_CONFIG, INTERNAL_GDS_INFO, INTERNAL_GAME_CHECKER_LOGIN, INTERNAL_ONSTOVE_LOGIN, INTERNAL_FUNCTION, INTERNAL_RENEW_GUID_TOKEN, INTERNAL_RENEW_TOKEN, INTERNAL_CONVERT_ONLINE_TOKEN, INTERNAL_TRANSLATE_LANGUAGE, INTERNAL_GET_GAMEMETA, 총 18개)은 표에서 제외했어요.
Example
using static Stove.PCSDK.Base;
// Result.methodCode 는 이 열거형의 값을 uint 로 담고 있습니다.
void CheckMethod(Result result)
{
if (result.methodCode == Convert.ToUInt32(BaseSDKMethod.INITIALIZE))
{
// Base_Initialize / Base_InitializeEx 호출 결과입니다.
}
}
Notes
GET_TOKEN_TO_PRIVATE,GET_ENV_TOKEN_TO_PRIVATE,GET_GAMEID_TO_PRIVATE,GET_MEMBERNO_PRIVATE,GET_PUBLIC_IP,FORCE_REFRESH_TOKEN,ACCESS_TOKEN_RENEWED_TO_PRIVATE,GET_TRANSLATE_LANGUAGE는 이름에INTERNAL이 없지만,BaseAPI.cs안에서 이 값을 사용하는 공개Base_API 가 확인되지 않아요. C++ 원본 헤더(BaseSDKResult.h)의 값 112~119 는 모두 주석으로 "Internal method"라고 명시되어 있어, 대응하는 공개 API 없이 SDK 내부 전용으로 쓰는 값임이 확인돼요.LOG_ADD(70) 도 대응하는 공개 API 가 없어요. C++ 원본 헤더에는Base_LogAdd (deprecated)로 주석이 남아 있으나, 현재 공개된 헤더 어디에도Base_LogAdd함수 선언이 없어요. 하위 호환을 위해 코드 값만 남은 폐기된 API 예요.
See Also
BaseSDKResultCode
종류 결과코드 · 모듈 Base · 버전 3.0.0.4
Description
BaseSDKResultCode 는 Result.resultCode 에 담기는 값이에요. 0(SUCCESS)이 성공이며, 그 외 값은 실패 원인을 나타내요. Result.IsSuccessful() 은 resultCode == 0 인지를 검사해요.
C# 래퍼 내부에서 예외가 발생하면(마샬링 오류 등) 항상 MANAGED_EXCEPTION(254) 로 채워진 Result 를 돌려줘요.
Declaration
public enum BaseSDKResultCode
{
SUCCESS = 0,
FAIL = 1,
// ... 이하 Values 표 참조
IPC_TIMEOUT = 89,
}
Enum Values
성공/일반 오류
| Code | Name | Description | Show to User | In-Game Message |
|---|---|---|---|---|
| 0 | SUCCESS | 성공 | x | |
| 1 | FAIL | 일반 실패 | x | |
| 2 | INVALID_CONFIG | 설정값이 올바르지 않음 (사용하지 않는 코드) | x | |
| 3 | INVALID_LOG_LEVEL | 로그 레벨 값이 올바르지 않음 (사용하지 않는 코드) | x | |
| 4 | INVALID_LOG_PATH | 로그 경로 값이 올바르지 않음 (사용하지 않는 코드) | x | |
| 5 | INVALID_PARAM | 매개변수 값이 올바르지 않음. 호출부 매개변수를 확인해야 해요 | x | |
| — | 6–15 | 사용하지 않아요 (미사용 번호) | x |
초기화 상태
| Code | Name | Description | Show to User | In-Game Message |
|---|---|---|---|---|
| 16 | BASE_NOT_INITIALIZED | SDK 가 초기화되지 않음. Base_Initialize 선행 호출이 필요해요 | x | |
| 17 | NOT_INITIALIZED | 초기화되지 않음 | x | |
| 18 | ALREADY_INITIALIZED | 이미 초기화됨. 중복 초기화 호출을 제거해야 해요 | x | |
| 29 | ASYNC_OPERATION_IN_PROGRESS | 비동기 작업이 이미 진행 중. 이전 호출의 콜백을 기다린 뒤 재호출해야 해요 | x | |
| 30 | BASE_UNINITIALIZED | SDK 가 종료된 상태 | x |
인증/토큰
| Code | Name | Description | Show to User | In-Game Message |
|---|---|---|---|---|
| 19 | INVALID_ACCESS_TOKEN | 액세스 토큰이 올바르지 않음 | O | 로그인 세션이 만료되었습니다. 게임 종료 후 다시 실행해 주세요. [확인] |
| 20 | NULL_TOKEN_ENTITY | 토큰 엔티티가 없음 (사용하지 않는 코드) | x |
응답/통신
| Code | Name | Description | Show to User | In-Game Message |
|---|---|---|---|---|
| 21 | NULL_ENTITY | 응답 엔티티가 없음 (사용하지 않는 코드) | x | |
| 22 | HTTP_ERROR | HTTP 통신 오류 | O | 네트워크 연결이 원활하지 않습니다. 네트워크 상태를 확인하고 다시 실행해 주세요. [확인] |
| 23 | RESPONSE_ERROR | 응답 처리 오류 | O | 네트워크 연결이 원활하지 않습니다. 네트워크 상태를 확인하고 다시 실행해 주세요. [확인] |
| 24 | RESPONSE_INVALID_CODE | 응답 코드가 올바르지 않음 | O | 네트워크 연결이 원활하지 않습니다. 네트워크 상태를 확인하고 다시 실행해 주세요. [확인] |
| 25 | RESPONSE_VALUE_IS_NULL | 응답 값이 없음 | O | 네트워크 연결이 원활하지 않습니다. 네트워크 상태를 확인하고 다시 실행해 주세요. [확인] |
| 26 | RESPONSE_INVALID_VALUE_FORMAT | 응답 값의 형식이 올바르지 않음 | O | 네트워크 연결이 원활하지 않습니다. 네트워크 상태를 확인하고 다시 실행해 주세요. [확인] |
| 249 | NETWORK_TRANSPORT_ERROR | 네트워크 전송 오류. externalError 에 HTTP 백엔드의 네이티브 오류 코드(예: WinHTTP 12002/12007/12029)가 담겨요 | x |
81Plug 연동
| Code | Name | Description | Show to User | In-Game Message |
|---|---|---|---|---|
| 27 | LOG_81PLUG_ERROR | 81Plug 로그 처리 오류 (사용하지 않는 코드) | x | |
| 28 | UPDATE_81PLUG_FEED_ERROR | 81Plug 피드 갱신 오류 (사용하지 않는 코드) | x |
국가/규제
| Code | Name | Description | Show to User | In-Game Message |
|---|---|---|---|---|
| 31 | NOT_SUPPORTED_COUNTRY | 지원하지 않는 국가 | x |
내부 정리 전용
| Code | Name | Description | Show to User | In-Game Message |
|---|---|---|---|---|
| 33 | POPUP_NOT_CREATED | 내부 정리 전용 — 팝업 미생성 종료(onDestroy 전용). 래퍼가 가로채 사용자 콜백을 호출하지 않아요 | x | |
| — | 32 | 사용하지 않아요 (미사용 번호) | x | |
| — | 34–79 | 사용하지 않아요 (미사용 번호) | x |
언어/GDS
| Code | Name | Description | Show to User | In-Game Message |
|---|---|---|---|---|
| 80 | LANGUAGE_NOT_SET | 언어가 설정되지 않음 (사용하지 않는 코드) | x | |
| 81 | EMPTY_TRANSLATED_STRING | 번역된 문자열이 비어 있음 (사용하지 않는 코드) | x | |
| 82 | NOT_FOUND_REQUIRED_INFORMATION | 필요한 정보를 찾을 수 없음 | x | |
| 83 | INVALID_GDS_INFO | GDS 정보가 올바르지 않음 (사용하지 않는 코드) | x |
런처 연동
| Code | Name | Description | Show to User | In-Game Message |
|---|---|---|---|---|
| 84 | NEED_STOVE_LAUNCHER | 스토브 런처가 필요함 | O | 게임이 스토브 PC 클라이언트를 통해 실행되지 않아 종료됩니다.클라이언트에서 다시 게임을 실행해주세요.클라이언트 미설치 시 스토브 홈페이지에서 설치해주세요.[확인] |
| 85 | LAUNCHER_FAILED_CREATE_REQUIRED | 런처 생성에 실패함 (사용하지 않는 코드) | x | |
| 86 | RENEW_TOKEN_MAX_RETRY_COUNT_EXCEEDED | 토큰 갱신 재시도 횟수를 초과함 | O | 네트워크 연결이 원활하지 않습니다. 네트워크 상태를 확인하고 다시 실행해 주세요. [확인] |
| 87 | IPC_CONNECT_FAILED | 런처와의 IPC 연결에 실패함 | O | 게임이 스토브 PC 클라이언트를 통해 실행되지 않아 종료됩니다.클라이언트에서 다시 게임을 실행해주세요.클라이언트 미설치 시 스토브 홈페이지에서 설치해주세요.[확인] |
| 88 | IPC_AES_KEY_NOT_RECEIVED | IPC AES 키를 받지 못함 | O | 게임이 스토브 PC 클라이언트를 통해 실행되지 않아 종료됩니다.클라이언트에서 다시 게임을 실행해주세요.클라이언트 미설치 시 스토브 홈페이지에서 설치해주세요.[확인] |
| 89 | IPC_TIMEOUT | IPC 응답 시간 초과 | O | 게임이 스토브 PC 클라이언트를 통해 실행되지 않아 종료됩니다.클라이언트에서 다시 게임을 실행해주세요.클라이언트 미설치 시 스토브 홈페이지에서 설치해주세요.[확인] |
| — | 90–248 | 사용하지 않아요 (미사용 번호) | x |
C# 래퍼 전용
| Code | Name | Description | Show to User | In-Game Message |
|---|---|---|---|---|
| 250 | JSON_EXCEPTION | JSON 처리 중 예외 발생 | O | 네트워크 연결이 원활하지 않습니다. 네트워크 상태를 확인하고 다시 실행해 주세요. [확인] |
| 251 | PCSDK_DLL_NOT_FOUND | 네이티브 PCSDK DLL 을 찾지 못함 (사용하지 않는 코드) | x | |
| 252 | NOT_IMPLEMENTED | 구현되지 않은 기능 (사용하지 않는 코드) | x | |
| 253 | UNMANAGED_EXCEPTION | 네이티브(비관리) 예외 발생 | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
| 254 | MANAGED_EXCEPTION | C# 래퍼 내부(마샬링 등)에서 예외 발생 | 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 static Stove.PCSDK.Base;
Result result = Base_SetGameProfile(gameProfile);
if (result.IsSuccessful())
{
// 성공 시 로직을 구현해 주세요.
}
else if (result.resultCode == Convert.ToUInt32(BaseSDKResultCode.BASE_NOT_INITIALIZED))
{
// 초기화 선행 호출 로직을 구현해 주세요.
}
else
{
// 그 외 실패 시 로직을 구현해 주세요.
}
Notes
POPUP_NOT_CREATED(33)은 SDK Legacy API 자체보다는 팝업의 내부 정리 경로에서 쓰이며, 사용자 콜백에는 전달되지 않아요.
See Also
CallbackResult
종류 구조체 · 모듈 Base · 버전 3.0.0.4
Description
CallbackResult 는 Base_Initialize, Base_RestartAppIfNecessaryAsync 등 콜백을 받는 SDK Legacy API 가 콜백 첫 번째 인자로 전달하는 구조체예요. 실제 성공 · 실패 여부는 내부의 result 필드로 판정해요.
Declaration
public struct CallbackResult
{
public Result result;
public string errorMessage;
public int externalError;
}
Members
| Name | Type | Description |
|---|---|---|
result | Result | 결과 코드를 담은 구조체. 소문자 필드예요 |
errorMessage | string | 오류 메시지 |
externalError | int | 외부(네이티브 전송 계층 등) 오류 코드. 예: BaseSDKResultCode.NETWORK_TRANSPORT_ERROR(249)일 때 WinHTTP 네이티브 오류 코드가 담겨요 |
Example
using static Stove.PCSDK.Base;
void OnInitializeFinished(CallbackResult callbackResult)
{
if (callbackResult.result.IsSuccessful())
{
// 성공 시 로직을 구현해 주세요.
}
else
{
// 실패 시 로직을 구현해 주세요.
}
}
Notes
- 결과 확인은
callbackResult.result.IsSuccessful()이에요.result는 소문자 필드이며,IsSuccessful()은 메서드예요. - 신규 C# 인터페이스(
Stove.PCSDK.V3)의IStoveCallbackResult는Result프로퍼티(대문자 시작)를 쓰므로 구 인터페이스와 표기가 달라요.
See Also
DiscountType
종류 열거형 · 모듈 IAP · 버전 3.0.0.4
Description
StovePCProduct.discountType / StovePCProductEx.discountType 필드에 담겨, 상품이 할인 중일 때(isDiscount == true) 할인 방식이 정률(비율)인지 정액(고정 금액)인지를 나타내요.
Declaration
public enum DiscountType
{
NONE = 0,
FIXED_RATE = 1,
FLAT_RATE,
};
Enum Values
| Code | Name | Description |
|---|---|---|
| 0 | NONE | 할인이 적용되지 않았어요 |
| 1 | FIXED_RATE | 정률(비율) 할인이에요 |
| 2 | FLAT_RATE | 정액(고정 금액) 할인이에요 |
Example
using static Stove.PCSDK.IAP;
void CheckDiscount(StovePCProduct product)
{
if (product.isDiscount && product.discountType == DiscountType.FIXED_RATE)
{
// 정률 할인 표시 로직을 구현해 주세요. discountTypeValue 가 할인율입니다.
}
}
Notes
discountTypeValue필드와 함께 사용돼요.FIXED_RATE이면 비율(%),FLAT_RATE이면 고정 금액을 의미해요.
See Also
IAP_CloseAllPopups
종류 함수 · 모듈 IAP · 버전 3.1.3
Description
결제 기능이 띄운 웹뷰 팝업(구매, 결제, 약관 동의, 게임 탈퇴 등)이 열려 있다면 모두 닫아요.
IAP_Initialize 이후에 호출해야 해요.
Declaration
public static Result IAP_CloseAllPopups()
Parameters
없음
Returns
| Type | Description |
|---|---|
| Result | 호출 결과예요. result.IsSuccessful()로 성공 여부를 확인해요. |
Error Codes
Result.methodCode 값은 Convert.ToUInt32(IAPSDKMethod.CLOSE_ALL_POPUPS)이에요.
| Code | Name | Description | Show to User | In-Game Message |
|---|---|---|---|---|
| 0 | SUCCESS | 성공 | x | |
| 17 | NOT_INITIALIZED | IAP가 초기화되어 있지 않음 | x | |
| 80 | VIEWUI_NOT_INITIALIZED | 닫을 팝업의 웹뷰가 초기화되어 있지 않음 | x | |
| 89 | WEBVIEW_CLOSE_ALL_FAIL | 열려 있는 팝업을 모두 닫는 데 실패함 | x | |
| 253 | UNMANAGED_EXCEPTION | 네이티브 SDK 내부에서 예외가 발생함 | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
| 254 | MANAGED_EXCEPTION | C# 래퍼 내부(마샬링 등)에서 예외가 발생함. Result.exceptionMessage 를 확인해야 해요 | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
전체 목록은 IAPSDKResultCode 를 참조하세요.
Example
using static Stove.PCSDK.IAP;
Result result = IAP_CloseAllPopups();
if (result.IsSuccessful())
{
// 성공 시 로직을 구현해 주세요.
}
else
{
// 실패 시 로직을 구현해 주세요.
}
Notes
- 이 함수는 동기 함수이며 콜백을 받지 않아요.
- 게임 종료 등으로 열려 있는 팝업을 한 번에 정리해야 할 때 사용해요.
See Also
- IAP_StartPurchase
- IAP_StartPayment
- IAP_WithdrawGame
IAP_ConfirmPurchase
종류 함수 · 모듈 IAP · 버전 3.0.0.4
Description
transactionMasterNo로 지정한 거래의 구매를 확인 처리해요. IAP_StartPurchase / IAP_StartPurchaseEx의 콜백으로 전달받은 StovePCPurchaseResult.transactionMasterNumber를 전달해요.
IAP_Initialize 이후에 호출해야 해요.
Declaration
public static void IAP_ConfirmPurchase(long transactionMasterNo, OnConfirmPurchaseFinished onFinished)
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
transactionMasterNo | long | Y | 확인 처리할 거래의 마스터 번호예요. |
onFinished | OnConfirmPurchaseFinished | Y | 확인 처리 결과를 받을 콜백이에요. |
Returns
없음
Callback
public delegate void OnConfirmPurchaseFinished(CallbackResult callbackResult, bool status, StovePCPurchasedProduct[] purchasedProducts, StovePCChargeInfo[] chargeInfos);
| Name | Type | Description |
|---|---|---|
callbackResult | CallbackResult | 호출 결과예요. callbackResult.result.IsSuccessful()로 성공 여부를 확인해요. |
status | bool | 확인 처리 상태예요. |
purchasedProducts | StovePCPurchasedProduct[] | 실제로 지급된 상품 목록이에요. |
chargeInfos | StovePCChargeInfo[] | 구매 대가로 차감된 재화 내역이에요. |
이 콜백은 Base_RunCallback()을 호출한 스레드에서 실행돼요. 호출 1회당 1회 실행돼요.
Error Codes
CallbackResult.result.methodCode 값은 Convert.ToUInt32(IAPSDKMethod.CONFIRM_PURCHASE)예요.
| Code | Name | Description | Show to User | In-Game Message |
|---|---|---|---|---|
| 0 | SUCCESS | 성공 | x | |
| 17 | NOT_INITIALIZED | IAP가 초기화되어 있지 않음. IAP_Initialize를 먼저 호출해야 해요 | x | |
| 21 | NULL_ENTITY | 언어 설정 정보를 확인할 수 없어 요청을 처리할 수 없음 | x | |
| 253 | UNMANAGED_EXCEPTION | 네이티브 SDK 내부에서 예외가 발생함 | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
| 254 | MANAGED_EXCEPTION | C# 래퍼 내부(마샬링 등)에서 예외가 발생함. CallbackResult.result.exceptionMessage 를 확인해야 해요 | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
전체 목록은 IAPSDKResultCode 를 참조하세요.
Example
using static Stove.PCSDK.IAP;
IAP_ConfirmPurchase(transactionMasterNumber, OnConfirmPurchaseFinished);
void OnConfirmPurchaseFinished(CallbackResult callbackResult, bool status, StovePCPurchasedProduct[] purchasedProducts, StovePCChargeInfo[] chargeInfos)
{
if (callbackResult.result.IsSuccessful())
{
// 성공 시 로직을 구현해 주세요.
}
else
{
// 실패 시 로직을 구현해 주세요.
}
}
Notes
transactionMasterNo는 IAP_StartPurchase 계열 API의 콜백 결과에서 얻어요.Base_RunCallback()을 게임 루프에서 반복 호출해야 콜백이 전달돼요.
See Also
IAP_FetchInventory
종류 함수 · 모듈 IAP · 버전 3.0.0.4
Description
사용자가 보유한 인벤토리 아이템 목록을 조회해요.
IAP_Initialize 이후에 호출해야 해요.
Declaration
public static void IAP_FetchInventory(OnFetchInventoryFinished onFinished)
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
onFinished | OnFetchInventoryFinished | Y | 조회 결과를 받을 콜백이에요. |
Returns
없음
Callback
public delegate void OnFetchInventoryFinished(CallbackResult callbackResult, StovePCInventoryItem[] inventoryItems);
| Name | Type | Description |
|---|---|---|
callbackResult | CallbackResult | 호출 결과예요. callbackResult.result.IsSuccessful()로 성공 여부를 확인해요. |
inventoryItems | StovePCInventoryItem[] | 조회된 인벤토리 아이템 목록이에요. |
이 콜백은 Base_RunCallback()을 호출한 스레드에서 실행돼요. 호출 1회당 1회 실행돼요.
Error Codes
CallbackResult.result.methodCode 값은 Convert.ToUInt32(IAPSDKMethod.FETCH_INVENTORY)예요.
| Code | Name | Description | Show to User | In-Game Message |
|---|---|---|---|---|
| 0 | SUCCESS | 성공 | x | |
| 17 | NOT_INITIALIZED | IAP가 초기화되어 있지 않음. IAP_Initialize를 먼저 호출해야 해요 | x | |
| 253 | UNMANAGED_EXCEPTION | 네이티브 SDK 내부에서 예외가 발생함 | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
| 254 | MANAGED_EXCEPTION | C# 래퍼 내부(마샬링 등)에서 예외가 발생함. CallbackResult.result.exceptionMessage 를 확인해야 해요 | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
전체 목록은 IAPSDKResultCode 를 참조하세요.
Example
using static Stove.PCSDK.IAP;
IAP_FetchInventory(OnFetchInventoryFinished);
void OnFetchInventoryFinished(CallbackResult callbackResult, StovePCInventoryItem[] inventoryItems)
{
if (callbackResult.result.IsSuccessful())
{
// 성공 시 로직을 구현해 주세요.
}
else
{
// 실패 시 로직을 구현해 주세요.
}
}
Notes
Base_RunCallback()을 게임 루프에서 반복 호출해야 콜백이 전달돼요.
See Also
IAP_FetchProducts
종류 함수 · 모듈 IAP · 버전 3.0.0.4 · 폐기 예정
Description
이 기본형은 사용하지 않아요. 대신 IAP_FetchProductsEx 를 사용하세요.
productParam으로 지정한 카테고리·페이지 범위의 상품 목록을 조회해요.
IAP_Initialize 이후에 호출해야 해요.
Declaration
public static void IAP_FetchProducts(StovePCFetchProductParam productParam, OnFetchProductsFinished onFinished)
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
productParam | StovePCFetchProductParam | Y | 조회할 카테고리·페이지 조건이에요. |
onFinished | OnFetchProductsFinished | Y | 조회 결과를 받을 콜백이에요. |
Returns
없음
Callback
public delegate void OnFetchProductsFinished(CallbackResult callbackResult, StovePCProduct[] products);
| Name | Type | Description |
|---|---|---|
callbackResult | CallbackResult | 호출 결과예요. callbackResult.result.IsSuccessful()로 성공 여부를 확인해요. |
products | StovePCProduct[] | 조회된 상품 목록이에요. |
이 콜백은 Base_RunCallback()을 호출한 스레드에서 실행돼요. 호출 1회당 1회 실행돼요.
Error Codes
CallbackResult.result.methodCode 값은 Convert.ToUInt32(IAPSDKMethod.FETCH_PRODUCTS)이에요.
| Code | Name | Description | Show to User | In-Game Message |
|---|---|---|---|---|
| 0 | SUCCESS | 성공 | x | |
| 17 | NOT_INITIALIZED | IAP가 초기화되어 있지 않음. IAP_Initialize를 먼저 호출해야 해요 | x | |
| 253 | UNMANAGED_EXCEPTION | 네이티브 SDK 내부에서 예외가 발생함 | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
| 254 | MANAGED_EXCEPTION | C# 래퍼 내부(마샬링 등)에서 예외가 발생함. CallbackResult.result.exceptionMessage 를 확인해야 해요 | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
전체 목록은 IAPSDKResultCode 를 참조하세요.
Example
using static Stove.PCSDK.IAP;
StovePCFetchProductParam param = new StovePCFetchProductParam();
param.categoryId = "YOUR_CATEGORY_ID";
param.pageNumber = 1;
param.pageSize = 20;
IAP_FetchProducts(param, OnFetchProductsFinished);
void OnFetchProductsFinished(CallbackResult callbackResult, StovePCProduct[] products)
{
if (callbackResult.result.IsSuccessful())
{
// 성공 시 로직을 구현해 주세요.
}
else
{
// 실패 시 로직을 구현해 주세요.
}
}
Notes
- 실제 연동에는 항상 IAP_FetchProductsEx를 사용하세요. 구매 가능 여부 코드(
purchaseAvailabilityCode)도Ex변형에서만 받을 수 있어요. Base_RunCallback()을 게임 루프에서 반복 호출해야 콜백이 전달돼요.
See Also
IAP_FetchProductsEx
종류 함수 · 모듈 IAP · 버전 3.4.1
Description
IAP_FetchProducts와 입력 파라미터(productParam)는 동일하지만, 조회 결과로 purchaseAvailabilityCode 필드가 추가된 StovePCProductEx[]를 돌려줘요. StovePCProduct[]를 돌려주는 IAP_FetchProducts와는 반환 타입만 달라요.
IAP_Initialize 이후에 호출해야 해요.
Declaration
public static void IAP_FetchProductsEx(StovePCFetchProductParam productParam, OnFetchProductsExFinished onFinished)
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
productParam | StovePCFetchProductParam | Y | 조회할 카테고리·페이지 조건이에요. |
onFinished | OnFetchProductsExFinished | Y | 조회 결과를 받을 콜백이에요. |
Returns
없음
Callback
public delegate void OnFetchProductsExFinished(CallbackResult callbackResult, StovePCProductEx[] products);
| Name | Type | Description |
|---|---|---|
callbackResult | CallbackResult | 호출 결과예요. callbackResult.result.IsSuccessful()로 성공 여부를 확인해요. |
products | StovePCProductEx[] | 조회된 상품 목록이에요. |
이 콜백은 Base_RunCallback()을 호출한 스레드에서 실행돼요. 호출 1회당 1회 실행돼요.
Error Codes
CallbackResult.result.methodCode 값은 Convert.ToUInt32(IAPSDKMethod.FETCH_PRODUCTS)이에요.
| Code | Name | Description | Show to User | In-Game Message |
|---|---|---|---|---|
| 0 | SUCCESS | 성공 | x | |
| 17 | NOT_INITIALIZED | IAP가 초기화되어 있지 않음. IAP_Initialize를 먼저 호출해야 해요 | x | |
| 253 | UNMANAGED_EXCEPTION | 네이티브 SDK 내부에서 예외가 발생함 | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
| 254 | MANAGED_EXCEPTION | C# 래퍼 내부(마샬링 등)에서 예외가 발생함. CallbackResult.result.exceptionMessage 를 확인해야 해요 | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
전체 목록은 IAPSDKResultCode 를 참조하세요.
Example
using static Stove.PCSDK.IAP;
StovePCFetchProductParam param = new StovePCFetchProductParam();
param.categoryId = "YOUR_CATEGORY_ID";
param.pageNumber = 1;
param.pageSize = 20;
IAP_FetchProductsEx(param, OnFetchProductsExFinished);
void OnFetchProductsExFinished(CallbackResult callbackResult, StovePCProductEx[] products)
{
if (callbackResult.result.IsSuccessful())
{
// 성공 시 로직을 구현해 주세요.
}
else
{
// 실패 시 로직을 구현해 주세요.
}
}
Notes
purchaseAvailabilityCode가 필요하지 않다면 IAP_FetchProducts를 사용해요.Base_RunCallback()을 게임 루프에서 반복 호출해야 콜백이 전달돼요.
See Also
IAP_FetchShopCategories
종류 함수 · 모듈 IAP · 버전 3.0.0.4
Description
상점에 등록된 카테고리 목록을 조회해요. 조회한 카테고리 ID는 IAP_FetchProducts / IAP_FetchProductsEx의 StovePCFetchProductParam.categoryId에 사용해요.
IAP_Initialize 이후에 호출해야 해요.
Declaration
public static void IAP_FetchShopCategories(OnFetchShopCategoriesFinished onFinished)
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
onFinished | OnFetchShopCategoriesFinished | Y | 조회 결과를 받을 콜백이에요. |
Returns
없음
Callback
public delegate void OnFetchShopCategoriesFinished(CallbackResult callbackResult, StovePCShopCategory[] shopCategories);
| Name | Type | Description |
|---|---|---|
callbackResult | CallbackResult | 호출 결과예요. callbackResult.result.IsSuccessful()로 성공 여부를 확인해요. |
shopCategories | StovePCShopCategory[] | 조회된 카테고리 목록이에요. |
이 콜백은 Base_RunCallback()을 호출한 스레드에서 실행돼요. 호출 1회당 1회 실행돼요.
Error Codes
CallbackResult.result.methodCode 값은 Convert.ToUInt32(IAPSDKMethod.FETCH_SHOP_CATEGORIES)이에요.
| Code | Name | Description | Show to User | In-Game Message |
|---|---|---|---|---|
| 0 | SUCCESS | 성공 | x | |
| 17 | NOT_INITIALIZED | IAP가 초기화되어 있지 않음. IAP_Initialize를 먼저 호출해야 해요 | x | |
| 253 | UNMANAGED_EXCEPTION | 네이티브 SDK 내부에서 예외가 발생함 | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
| 254 | MANAGED_EXCEPTION | C# 래퍼 내부(마샬링 등)에서 예외가 발생함. CallbackResult.result.exceptionMessage 를 확인해야 해요 | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
전체 목록은 IAPSDKResultCode 를 참조하세요.
Example
using static Stove.PCSDK.IAP;
IAP_FetchShopCategories(OnFetchShopCategoriesFinished);
void OnFetchShopCategoriesFinished(CallbackResult callbackResult, StovePCShopCategory[] shopCategories)
{
if (callbackResult.result.IsSuccessful())
{
// 성공 시 로직을 구현해 주세요.
}
else
{
// 실패 시 로직을 구현해 주세요.
}
}
Notes
Base_RunCallback()을 게임 루프에서 반복 호출해야 콜백이 전달돼요.
See Also
IAP_FetchTermsAgreement
종류 함수 · 모듈 IAP · 버전 3.0.0.4
Description
사용자의 약관 동의 여부를 조회해요. option의 동작 방식에 따라 약관 동의 웹뷰 팝업이 표시될 수 있어요.
IAP_Initialize 이후에 호출해야 해요.
Declaration
public static void IAP_FetchTermsAgreement(StovePCTermsOption option, OnFetchTermsAgreementFinished onFinished)
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
option | StovePCTermsOption | Y | 약관 동의 팝업의 동작 방식과 위치·크기예요. |
onFinished | OnFetchTermsAgreementFinished | Y | 조회 결과를 받을 콜백이에요. |
Returns
없음
Callback
public delegate void OnFetchTermsAgreementFinished(CallbackResult callbackResult, bool agreed, string url);
| Name | Type | Description |
|---|---|---|
callbackResult | CallbackResult | 호출 결과예요. callbackResult.result.IsSuccessful()로 성공 여부를 확인해요. |
agreed | bool | 약관에 동의했는지 여부예요. |
url | string | 약관 동의 웹뷰의 URL이에요. |
이 콜백은 Base_RunCallback()을 호출한 스레드에서 실행돼요. 호출 1회당 1회 실행돼요.
Error Codes
CallbackResult.result.methodCode 값은 Convert.ToUInt32(IAPSDKMethod.FETCH_TERMS_AGREEMENT)예요.
| Code | Name | Description | Show to User | In-Game Message |
|---|---|---|---|---|
| 0 | SUCCESS | 성공 | x | |
| 17 | NOT_INITIALIZED | IAP가 초기화되어 있지 않음. IAP_Initialize를 먼저 호출해야 해요 | x | |
| 80 | VIEWUI_NOT_INITIALIZED | 약관 동의 팝업을 표시할 웹뷰 초기화에 실패함 | 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 | 네이티브 SDK 내부에서 예외가 발생함 | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
| 254 | MANAGED_EXCEPTION | C# 래퍼 내부(마샬링 등)에서 예외가 발생함. CallbackResult.result.exceptionMessage 를 확인해야 해요 | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
전체 목록은 IAPSDKResultCode 를 참조하세요.
Example
using static Stove.PCSDK.Base;
using static Stove.PCSDK.IAP;
StovePCTermsOption option = new StovePCTermsOption();
option.operation = StovePCTermsOperation.WITH_WEBVIEW;
option.webviewMode = WebViewMode.INTERNAL;
option.webviewWidth = 800;
option.webviewHeight = 600;
IAP_FetchTermsAgreement(option, OnFetchTermsAgreementFinished);
void OnFetchTermsAgreementFinished(CallbackResult callbackResult, bool agreed, string url)
{
if (callbackResult.result.IsSuccessful())
{
// 성공 시 로직을 구현해 주세요.
}
else
{
// 실패 시 로직을 구현해 주세요.
}
}
Notes
- 팝업이 닫힐 때(destroy)를 별도로 감지해야 한다면 IAP_FetchTermsAgreementEx를 사용해요.
Base_RunCallback()을 게임 루프에서 반복 호출해야 콜백이 전달돼요.
See Also
IAP_FetchTermsAgreementEx
종류 함수 · 모듈 IAP · 버전 3.3.4
Description
IAP_FetchTermsAgreement와 동일하게 약관 동의 여부를 조회하지만, 약관 동의 팝업이 닫힐 때 호출되는 onDestroy 콜백을 추가로 받아요. 나머지 파라미터와 결과 콜백(onFinished)은 IAP_FetchTermsAgreement와 동일해요.
IAP_Initialize 이후에 호출해야 해요.
Declaration
public static void IAP_FetchTermsAgreementEx(StovePCTermsOption option, OnFetchTermsAgreementFinished onFinished, OnIAPPopupDestroyFinished onDestroy)
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
option | StovePCTermsOption | Y | 약관 동의 팝업의 동작 방식과 위치·크기예요. |
onFinished | OnFetchTermsAgreementFinished | Y | 조회 결과를 받을 콜백이에요. |
onDestroy | OnIAPPopupDestroyFinished | N | 약관 동의 팝업이 닫힐 때 호출되는 콜백이에요. |
Returns
없음
Callback
public delegate void OnFetchTermsAgreementFinished(CallbackResult callbackResult, bool agreed, string url);
public delegate void OnIAPPopupDestroyFinished(CallbackResult callbackResult);
| Name | Type | Description |
|---|---|---|
callbackResult | CallbackResult | 호출 결과예요. callbackResult.result.IsSuccessful()로 성공 여부를 확인해요. |
agreed | bool | onFinished로 전달되는 약관 동의 여부예요. |
url | string | onFinished로 전달되는 약관 동의 웹뷰의 URL이에요. |
두 콜백 모두 Base_RunCallback()을 호출한 스레드에서 실행돼요. onFinished는 조회가 끝나면, onDestroy는 약관 동의 팝업이 닫히면 각각 호출돼요.
Error Codes
CallbackResult.result.methodCode 값은 Convert.ToUInt32(IAPSDKMethod.FETCH_TERMS_AGREEMENT)예요.
| Code | Name | Description | Show to User | In-Game Message |
|---|---|---|---|---|
| 0 | SUCCESS | 성공 | x | |
| 17 | NOT_INITIALIZED | IAP가 초기화되어 있지 않음. IAP_Initialize를 먼저 호출해야 해요 | x | |
| 80 | VIEWUI_NOT_INITIALIZED | 약관 동의 팝업을 표시할 웹뷰 초기화에 실패함 | 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 | 네이티브 SDK 내부에서 예외가 발생함 | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
| 254 | MANAGED_EXCEPTION | C# 래퍼 내부(마샬링 등)에서 예외가 발생함. CallbackResult.result.exceptionMessage 를 확인해야 해요 | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
전체 목록은 IAPSDKResultCode 를 참조하세요.
Example
using static Stove.PCSDK.Base;
using static Stove.PCSDK.IAP;
StovePCTermsOption option = new StovePCTermsOption();
option.operation = StovePCTermsOperation.WITH_WEBVIEW;
option.webviewMode = WebViewMode.INTERNAL;
option.webviewWidth = 800;
option.webviewHeight = 600;
IAP_FetchTermsAgreementEx(option, OnFetchTermsAgreementFinished, OnIAPPopupDestroyFinished);
void OnFetchTermsAgreementFinished(CallbackResult callbackResult, bool agreed, string url)
{
if (callbackResult.result.IsSuccessful())
{
// 성공 시 로직을 구현해 주세요.
}
else
{
// 실패 시 로직을 구현해 주세요.
}
}
void OnIAPPopupDestroyFinished(CallbackResult callbackResult)
{
// 약관 동의 팝업이 닫혔을 때의 로직을 구현해 주세요.
}
Notes
- 팝업 종료 감지가 필요하지 않다면 IAP_FetchTermsAgreement를 사용해요.
Base_RunCallback()을 게임 루프에서 반복 호출해야 콜백이 전달돼요.
See Also
IAP_FetchVoidedPurchases
종류 함수 · 모듈 IAP · 버전 3.0.0.4 · 폐기 예정
Description
환불 조회 기능은 폐기(deprecated)된 기능이에요. 신규 인터페이스에서는 제공하지 않아요. 기존 인터페이스에서만 계속 제공돼요.
마켓에서 취소(환불) 처리된 구매 내역 목록을 조회해요.
IAP_Initialize 이후에 호출해야 해요.
Declaration
public static void IAP_FetchVoidedPurchases(OnFetchVoidedPurchasesFinished onFinished)
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
onFinished | OnFetchVoidedPurchasesFinished | Y | 조회 결과를 받을 콜백이에요. |
Returns
없음
Callback
public delegate void OnFetchVoidedPurchasesFinished(CallbackResult callbackResult, StovePCVoidedPurchase[] voidedPurchase);
| Name | Type | Description |
|---|---|---|
callbackResult | CallbackResult | 호출 결과예요. callbackResult.result.IsSuccessful()로 성공 여부를 확인해요. |
voidedPurchase | StovePCVoidedPurchase[] | 취소된 구매 내역 목록이에요. |
이 콜백은 Base_RunCallback()을 호출한 스레드에서 실행돼요. 호출 1회당 1회 실행돼요.
Error Codes
CallbackResult.result.methodCode 값은 Convert.ToUInt32(IAPSDKMethod.FETCH_VOIDED_PURCHASES)이에요.
| Code | Name | Description | Show to User | In-Game Message |
|---|---|---|---|---|
| 0 | SUCCESS | 성공 | x | |
| 17 | NOT_INITIALIZED | IAP가 초기화되어 있지 않음. IAP_Initialize를 먼저 호출해야 해요 | x | |
| 253 | UNMANAGED_EXCEPTION | 네이티브 SDK 내부에서 예외가 발생함 | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
| 254 | MANAGED_EXCEPTION | C# 래퍼 내부(마샬링 등)에서 예외가 발생함. CallbackResult.result.exceptionMessage 를 확인해야 해요 | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
전체 목록은 IAPSDKResultCode 를 참조하세요.
Example
using static Stove.PCSDK.IAP;
IAP_FetchVoidedPurchases(OnFetchVoidedPurchasesFinished);
void OnFetchVoidedPurchasesFinished(CallbackResult callbackResult, StovePCVoidedPurchase[] voidedPurchase)
{
if (callbackResult.result.IsSuccessful())
{
// 성공 시 로직을 구현해 주세요.
}
else
{
// 실패 시 로직을 구현해 주세요.
}
}
Notes
- 마켓별로 필터링해서 조회하는 IAP_FetchVoidedPurchasesEx는 현재 SDK 에서 제공하지 않아요.
Base_RunCallback()을 게임 루프에서 반복 호출해야 콜백이 전달돼요.
See Also
IAP_FetchVoidedPurchasesEx
종류 함수 · 모듈 IAP · 버전 3.4.1 · 폐기 예정
Description
이 함수는 현재 SDK 에서 제공하지 않아요. 환불 조회 기능 자체도 폐기(deprecated)된 기능이에요.
IAP_FetchVoidedPurchases와 달리 marketType 파라미터로 조회할 마켓을 지정할 수 있고, 조회 결과로 회원 번호·GUID 등 더 많은 필드를 가진 StovePCVoidedPurchasesEx[]를 돌려줘요.
IAP_Initialize 이후에 호출해야 해요.
Declaration
public static void IAP_FetchVoidedPurchasesEx(StovePCVoidedPurchasesMarketType marketType, OnFetchVoidedPurchasesExFinished onFinished)
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
marketType | StovePCVoidedPurchasesMarketType | Y | 조회할 마켓이에요. |
onFinished | OnFetchVoidedPurchasesExFinished | Y | 조회 결과를 받을 콜백이에요. |
Returns
없음
Callback
public delegate void OnFetchVoidedPurchasesExFinished(CallbackResult callbackResult, StovePCVoidedPurchasesEx[] voidedPurchase);
| Name | Type | Description |
|---|---|---|
callbackResult | CallbackResult | 호출 결과예요. callbackResult.result.IsSuccessful()로 성공 여부를 확인해요. |
voidedPurchase | StovePCVoidedPurchasesEx[] | 취소된 구매 내역 목록이에요. |
이 콜백은 Base_RunCallback()을 호출한 스레드에서 실행돼요. 호출 1회당 1회 실행돼요.
Error Codes
CallbackResult.result.methodCode 값은 Convert.ToUInt32(IAPSDKMethod.FETCH_VOIDED_PURCHASES)이에요.
| Code | Name | Description | Show to User | In-Game Message |
|---|---|---|---|---|
| — | — | 이 함수는 현재 SDK 에서 제공하지 않아요. | — | — |
전체 목록은 IAPSDKResultCode 를 참조하세요.
Example
using static Stove.PCSDK.IAP;
IAP_FetchVoidedPurchasesEx(StovePCVoidedPurchasesMarketType.STEAM, OnFetchVoidedPurchasesExFinished);
void OnFetchVoidedPurchasesExFinished(CallbackResult callbackResult, StovePCVoidedPurchasesEx[] voidedPurchase)
{
if (callbackResult.result.IsSuccessful())
{
// 성공 시 로직을 구현해 주세요.
}
else
{
// 실패 시 로직을 구현해 주세요.
}
}
Notes
- 마켓을 구분하지 않고 조회하려면
marketType에StovePCVoidedPurchasesMarketType.ALL을 전달해요. Base_RunCallback()을 게임 루프에서 반복 호출해야 콜백이 전달돼요.
See Also
IAP_GetVersion
종류 함수 · 모듈 IAP · 버전 3.4.1
Description
결제 기능 모듈의 버전 문자열을 조회해 version에 채워 돌려줘요.
Declaration
public static Result IAP_GetVersion(ref string version, uint length)
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
version | ref string | Y | 버전 문자열을 전달받을 참조 변수예요. 호출 후 이 변수에 버전 값이 채워져요. |
length | uint | Y | 버전 문자열을 담을 버퍼의 크기(문자 수)예요. |
Returns
| Type | Description |
|---|---|
| Result | 호출 결과예요. result.IsSuccessful()로 성공 여부를 확인해요. |
Error Codes
Result.methodCode 값은 Convert.ToUInt32(IAPSDKMethod.GET_VERSION)이에요.
| Code | Name | Description | Show to User | In-Game Message |
|---|---|---|---|---|
| 0 | SUCCESS | 성공 | x | |
| 5 | INVALID_PARAM | version 버퍼가 없거나 length가 0, 또는 버퍼 크기가 문자열을 담기에 부족함 | x | |
| 251 | PCSDK_DLL_NOT_FOUND | SDK 파일 경로를 찾지 못해 버전 조회에 실패함 | x | |
| 253 | UNMANAGED_EXCEPTION | 네이티브 SDK 내부에서 예외가 발생함 | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
| 254 | MANAGED_EXCEPTION | C# 래퍼 내부(마샬링 등)에서 예외가 발생함. Result.exceptionMessage 를 확인해야 해요 | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
이 함수는 실제로는 IAPSDK 자체 버전이 아닌 BaseSDK 통합 버전을 그대로 반환해요. 전체 목록은 IAPSDKResultCode 를 참조하세요.
Example
using static Stove.PCSDK.Base;
using static Stove.PCSDK.IAP;
string version = string.Empty;
Result result = IAP_GetVersion(ref version, 64);
if (result.IsSuccessful())
{
// 성공 시 로직을 구현해 주세요. version 에 버전 문자열이 채워집니다.
}
else
{
// 실패 시 로직을 구현해 주세요.
}
Notes
- 이 함수는 동기 함수이며 콜백을 받지 않아요.
length는version에 채워질 문자열을 담을 만큼 충분히 지정해야 해요.
See Also
IAP_Initialize
종류 함수 · 모듈 IAP · 버전 3.0.0.4
Description
결제 기능을 사용하기 전에 호출해 상점 키(Shop Key)로 모듈을 초기화해요.
구 인터페이스에서는 SDK 뿐 아니라 결제 기능을 포함한 각 모듈을 개별적으로 초기화해야 해요. SDK 초기화 이후에 이 함수를 호출해야 해요.
Declaration
public static Result IAP_Initialize(string shopKey)
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
shopKey | string | Y | 결제 기능 초기화에 사용하는 상점 키예요. |
Returns
| Type | Description |
|---|---|
| Result | 호출 결과예요. result.IsSuccessful()로 성공 여부를 확인해요. |
Error Codes
Result.methodCode 값은 Convert.ToUInt32(IAPSDKMethod.INITIALIZE)예요.
| Code | Name | Description | Show to User | In-Game Message |
|---|---|---|---|---|
| 0 | SUCCESS | 성공 | x | |
| 16 | BASE_NOT_INITIALIZED | BaseSDK가 초기화되지 않음. Base_Initialize를 먼저 호출해야 해요 | x | |
| 18 | ALREADY_INITIALIZED | IAP가 이미 초기화되어 있음 | x | |
| 80 | VIEWUI_NOT_INITIALIZED | 결제 팝업을 표시할 웹뷰 초기화에 실패함 | x | |
| 251 | PCSDK_DLL_NOT_FOUND | SDK 파일 경로를 찾지 못해 버전 확인에 실패함 | x | |
| 253 | UNMANAGED_EXCEPTION | 네이티브 SDK 내부에서 예외가 발생함 | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
| 254 | MANAGED_EXCEPTION | C# 래퍼 내부(마샬링 등)에서 예외가 발생함. Result.exceptionMessage 를 확인해야 해요 | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
전체 목록은 IAPSDKResultCode 를 참조하세요.
Example
using static Stove.PCSDK.IAP;
Result result = IAP_Initialize("YOUR_SHOP_KEY");
if (result.IsSuccessful())
{
// 성공 시 로직을 구현해 주세요.
}
else
{
// 실패 시 로직을 구현해 주세요.
}
Notes
- 이 함수는 동기 함수이며 콜백을 받지 않아요.
- 메인 윈도우 핸들을 함께 전달하려면 IAP_InitializeWithWndInfo를 사용해요.
- 종료 시에는 반드시 IAP_UnInitialize를 호출해야 해요.
See Also
IAP_InitializeWithWndInfo
종류 함수 · 모듈 IAP · 버전 3.3.3
Description
IAP_Initialize와 동일하게 결제 기능을 초기화하지만, 추가로 mainWndHandle 파라미터로 메인 윈도우의 핸들을 함께 전달해요.
구 인터페이스에서는 SDK 뿐 아니라 결제 기능을 포함한 각 모듈을 개별적으로 초기화해야 해요. SDK 초기화 이후에 이 함수를 호출해야 해요.
Declaration
public static Result IAP_InitializeWithWndInfo(string shopKey, IntPtr mainWndHandle)
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
shopKey | string | Y | 결제 기능 초기화에 사용하는 상점 키예요. |
mainWndHandle | IntPtr | Y | 메인 윈도우의 핸들이에요. |
Returns
| Type | Description |
|---|---|
| Result | 호출 결과예요. result.IsSuccessful()로 성공 여부를 확인해요. |
Error Codes
Result.methodCode 값은 Convert.ToUInt32(IAPSDKMethod.INITIALIZE)예요.
| Code | Name | Description | Show to User | In-Game Message |
|---|---|---|---|---|
| 0 | SUCCESS | 성공 | x | |
| 16 | BASE_NOT_INITIALIZED | BaseSDK가 초기화되지 않음. Base_Initialize를 먼저 호출해야 해요 | x | |
| 18 | ALREADY_INITIALIZED | IAP가 이미 초기화되어 있음 | x | |
| 80 | VIEWUI_NOT_INITIALIZED | 결제 팝업을 표시할 웹뷰 초기화에 실패함 | x | |
| 251 | PCSDK_DLL_NOT_FOUND | SDK 파일 경로를 찾지 못해 버전 확인에 실패함 | x | |
| 253 | UNMANAGED_EXCEPTION | 네이티브 SDK 내부에서 예외가 발생함 | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
| 254 | MANAGED_EXCEPTION | C# 래퍼 내부(마샬링 등)에서 예외가 발생함. Result.exceptionMessage 를 확인해야 해요 | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
전체 목록은 IAPSDKResultCode 를 참조하세요.
Example
using static Stove.PCSDK.IAP;
Result result = IAP_InitializeWithWndInfo("YOUR_SHOP_KEY", mainWindowHandle);
if (result.IsSuccessful())
{
// 성공 시 로직을 구현해 주세요.
}
else
{
// 실패 시 로직을 구현해 주세요.
}
Notes
- 이 함수는 동기 함수이며 콜백을 받지 않아요.
- 메인 윈도우 핸들이 필요하지 않다면 IAP_Initialize를 사용해요.
- 종료 시에는 반드시 IAP_UnInitialize를 호출해야 해요.
See Also
IAP_StartPayment
종류 함수 · 모듈 IAP · 버전 3.0.0.4 · 폐기 예정
Description
폐기(deprecated)된 기능이에요. 대신 IAP_StartPurchase 를 사용하세요.
option으로 지정한 방식으로 결제를 요청해요. 동작 방식에 따라 결제 웹뷰 팝업이 표시될 수 있어요.
IAP_Initialize 이후에 호출해야 해요.
Declaration
public static void IAP_StartPayment(StovePCPaymentOption option, OnStartPaymentFinished onFinished)
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
option | StovePCPaymentOption | Y | 결제 팝업의 동작 방식과 위치·크기예요. |
onFinished | OnStartPaymentFinished | Y | 결제 결과를 받을 콜백이에요. |
Returns
없음
Callback
public delegate void OnStartPaymentFinished(CallbackResult callbackResult, string url);
| Name | Type | Description |
|---|---|---|
callbackResult | CallbackResult | 호출 결과예요. callbackResult.result.IsSuccessful()로 성공 여부를 확인해요. |
url | string | 결제 웹뷰의 URL이에요. |
이 콜백은 Base_RunCallback()을 호출한 스레드에서 실행돼요. 호출 1회당 1회 실행돼요.
Error Codes
CallbackResult.result.methodCode 값은 Convert.ToUInt32(IAPSDKMethod.START_PAYMENT)예요.
| Code | Name | Description | Show to User | In-Game Message |
|---|---|---|---|---|
| 0 | SUCCESS | 성공 | x | |
| 17 | NOT_INITIALIZED | IAP가 초기화되어 있지 않음. IAP_Initialize를 먼저 호출해야 해요 | x | |
| 80 | VIEWUI_NOT_INITIALIZED | 결제 팝업을 표시할 웹뷰 초기화에 실패함 | x | |
| 82 | WEBVIEW_CREATE_FAIL | 결제 팝업 웹뷰 생성에 실패함 | x | |
| 83 | WEBVIEW_LOAD_URL_FAIL | 결제 팝업 웹뷰에서 페이지를 불러오지 못함 | x | |
| 89 | WEBVIEW_CLOSE_ALL_FAIL | 기존에 열려 있던 팝업을 모두 닫는 데 실패함 | x | |
| 253 | UNMANAGED_EXCEPTION | 네이티브 SDK 내부에서 예외가 발생함 | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
| 254 | MANAGED_EXCEPTION | C# 래퍼 내부(마샬링 등)에서 예외가 발생함. CallbackResult.result.exceptionMessage 를 확인해야 해요 | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
전체 목록은 IAPSDKResultCode 를 참조하세요.
Example
using static Stove.PCSDK.Base;
using static Stove.PCSDK.IAP;
StovePCPaymentOption option = new StovePCPaymentOption();
option.operation = StovePCPaymentOperation.WITH_WEBVIEW;
option.webviewMode = WebViewMode.INTERNAL;
option.webviewWidth = 800;
option.webviewHeight = 600;
IAP_StartPayment(option, OnStartPaymentFinished);
void OnStartPaymentFinished(CallbackResult callbackResult, string url)
{
if (callbackResult.result.IsSuccessful())
{
// 성공 시 로직을 구현해 주세요.
}
else
{
// 실패 시 로직을 구현해 주세요.
}
}
Notes
- 팝업이 닫힐 때(destroy)를 별도로 감지해야 한다면 IAP_StartPaymentEx를 사용해요.
Base_RunCallback()을 게임 루프에서 반복 호출해야 콜백이 전달돼요.
See Also
IAP_StartPaymentEx
종류 함수 · 모듈 IAP · 버전 3.3.4 · 폐기 예정
Description
폐기(deprecated)된 기능이에요. 대신 IAP_StartPurchaseEx 를 사용하세요.
IAP_StartPayment와 동일하게 결제를 요청하지만, 결제 팝업이 닫힐 때 호출되는 onDestroy 콜백을 추가로 받아요. 나머지 파라미터와 결과 콜백(onFinished)은 IAP_StartPayment와 동일해요.
IAP_Initialize 이후에 호출해야 해요.
Declaration
public static void IAP_StartPaymentEx(StovePCPaymentOption option, OnStartPaymentFinished onFinished, OnIAPPopupDestroyFinished onDestroy)
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
option | StovePCPaymentOption | Y | 결제 팝업의 동작 방식과 위치·크기예요. |
onFinished | OnStartPaymentFinished | Y | 결제 결과를 받을 콜백이에요. |
onDestroy | OnIAPPopupDestroyFinished | N | 결제 팝업이 닫힐 때 호출되는 콜백이에요. |
Returns
없음
Callback
public delegate void OnStartPaymentFinished(CallbackResult callbackResult, string url);
public delegate void OnIAPPopupDestroyFinished(CallbackResult callbackResult);
| Name | Type | Description |
|---|---|---|
callbackResult | CallbackResult | 호출 결과예요. callbackResult.result.IsSuccessful()로 성공 여부를 확인해요. |
url | string | onFinished로 전달되는 결제 웹뷰의 URL이에요. |
두 콜백 모두 Base_RunCallback()을 호출한 스레드에서 실행돼요. onFinished는 요청 처리가 끝나면, onDestroy는 결제 팝업이 닫히면 각각 호출돼요.
Error Codes
CallbackResult.result.methodCode 값은 Convert.ToUInt32(IAPSDKMethod.START_PAYMENT)예요.
| Code | Name | Description | Show to User | In-Game Message |
|---|---|---|---|---|
| 0 | SUCCESS | 성공 | x | |
| 17 | NOT_INITIALIZED | IAP가 초기화되어 있지 않음. IAP_Initialize를 먼저 호출해야 해요 | x | |
| 80 | VIEWUI_NOT_INITIALIZED | 결제 팝업을 표시할 웹뷰 초기화에 실패함 | 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 | 네이티브 SDK 내부에서 예외가 발생함 | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
| 254 | MANAGED_EXCEPTION | C# 래퍼 내부(마샬링 등)에서 예외가 발생함. CallbackResult.result.exceptionMessage 를 확인해야 해요 | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
전체 목록은 IAPSDKResultCode 를 참조하세요.
Example
using static Stove.PCSDK.Base;
using static Stove.PCSDK.IAP;
StovePCPaymentOption option = new StovePCPaymentOption();
option.operation = StovePCPaymentOperation.WITH_WEBVIEW;
option.webviewMode = WebViewMode.INTERNAL;
option.webviewWidth = 800;
option.webviewHeight = 600;
IAP_StartPaymentEx(option, OnStartPaymentFinished, OnIAPPopupDestroyFinished);
void OnStartPaymentFinished(CallbackResult callbackResult, string url)
{
if (callbackResult.result.IsSuccessful())
{
// 성공 시 로직을 구현해 주세요.
}
else
{
// 실패 시 로직을 구현해 주세요.
}
}
void OnIAPPopupDestroyFinished(CallbackResult callbackResult)
{
// 결제 팝업이 닫혔을 때의 로직을 구현해 주세요.
}
Notes
- 팝업 종료 감지가 필요하지 않다면 IAP_StartPayment를 사용해요.
Base_RunCallback()을 게임 루프에서 반복 호출해야 콜백이 전달돼요.
See Also
IAP_StartPurchase
종류 함수 · 모듈 IAP · 버전 3.0.0.4
Description
startPurchaseParam에 담긴 상품 목록의 구매를 요청해요. 구매 옵션에 따라 웹뷰 팝업이 표시될 수 있어요.
IAP_Initialize 이후에 호출해야 해요.
Declaration
public static void IAP_StartPurchase(StovePCStartPurchaseParam startPurchaseParam, OnStartPurchaseFinished onFinished)
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
startPurchaseParam | StovePCStartPurchaseParam | Y | 구매할 상품 목록과 팝업 옵션이에요. |
onFinished | OnStartPurchaseFinished | Y | 구매 결과를 받을 콜백이에요. |
Returns
없음
Callback
public delegate void OnStartPurchaseFinished(CallbackResult callbackResult, StovePCPurchaseResult purchase);
| Name | Type | Description |
|---|---|---|
callbackResult | CallbackResult | 호출 결과예요. callbackResult.result.IsSuccessful()로 성공 여부를 확인해요. |
purchase | StovePCPurchaseResult | 구매 처리 결과예요. |
이 콜백은 Base_RunCallback()을 호출한 스레드에서 실행돼요. 호출 1회당 1회 실행돼요.
Error Codes
CallbackResult.result.methodCode 값은 Convert.ToUInt32(IAPSDKMethod.START_PURCHASE)예요.
| Code | Name | Description | Show to User | In-Game Message |
|---|---|---|---|---|
| 0 | SUCCESS | 성공 | x | |
| 17 | NOT_INITIALIZED | IAP가 초기화되어 있지 않음. IAP_Initialize를 먼저 호출해야 해요 | x | |
| 80 | VIEWUI_NOT_INITIALIZED | 구매 팝업을 표시할 웹뷰 초기화에 실패함 | x | |
| 82 | WEBVIEW_CREATE_FAIL | 구매 팝업 웹뷰 생성에 실패함 | x | |
| 83 | WEBVIEW_LOAD_URL_FAIL | 구매 팝업 웹뷰에서 페이지를 불러오지 못함 | x | |
| 84 | WEBVIEW_CLOSED_BEFORE_PURCHASE | 구매가 완료되기 전에 팝업이 닫힘 | O | 구매가 정상적으로 완료되지 않았습니다. 다시 시도해 주세요. [확인] |
| 85 | PARAMETER_LENGTH_EXCEEDED | serviceTxnNo 또는 extraData의 길이가 허용 범위를 초과함 | O | 결제 정보가 유효하지 않아 결제를 진행할 수 없습니다. 다시 시도해 주세요. [확인] |
| 86 | INVALID_JSON_STRING | extraData가 올바른 JSON 형식이 아님 | O | 결제 정보가 유효하지 않아 결제를 진행할 수 없습니다. 다시 시도해 주세요. [확인] |
| 88 | INVALID_ORDER_PRODUCT_INFORMATION | 구매 상품 정보(quantity, salePrice 등)가 올바르지 않음 | O | 결제 정보가 유효하지 않아 결제를 진행할 수 없습니다. 다시 시도해 주세요. [확인] |
| 89 | WEBVIEW_CLOSE_ALL_FAIL | 기존에 열려 있던 팝업을 모두 닫는 데 실패함 | x | |
| 252 | NOT_IMPLEMENTED | 구매 옵션(option.operation)에 알 수 없는 값이 지정됨 | x | |
| 253 | UNMANAGED_EXCEPTION | 네이티브 SDK 내부에서 예외가 발생함 | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
| 254 | MANAGED_EXCEPTION | C# 래퍼 내부(마샬링 등)에서 예외가 발생함. CallbackResult.result.exceptionMessage 를 확인해야 해요 | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
전체 목록은 IAPSDKResultCode 를 참조하세요.
Example
using static Stove.PCSDK.Base;
using static Stove.PCSDK.IAP;
StovePCOrderProduct orderProduct = new StovePCOrderProduct();
orderProduct.productId = 123456;
orderProduct.salePrice = 1000;
orderProduct.quantity = 1;
StovePCPurchaseOption option = new StovePCPurchaseOption();
option.operation = StovePCPurchaseOperation.WITH_WEBVIEW;
option.webviewMode = WebViewMode.INTERNAL;
option.webviewWidth = 800;
option.webviewHeight = 600;
StovePCStartPurchaseParam purchaseParam = new StovePCStartPurchaseParam();
purchaseParam.products = new StovePCOrderProduct[] { orderProduct };
purchaseParam.productsSize = 1;
purchaseParam.option = option;
purchaseParam.serviceTxnNo = "YOUR_SERVICE_TXN_NO";
purchaseParam.extraData = "";
IAP_StartPurchase(purchaseParam, OnStartPurchaseFinished);
void OnStartPurchaseFinished(CallbackResult callbackResult, StovePCPurchaseResult purchase)
{
if (callbackResult.result.IsSuccessful())
{
// 성공 시 로직을 구현해 주세요.
}
else
{
// 실패 시 로직을 구현해 주세요.
}
}
Notes
- 팝업이 닫힐 때(destroy)를 별도로 감지해야 한다면 IAP_StartPurchaseEx를 사용해요.
Base_RunCallback()을 게임 루프에서 반복 호출해야 콜백이 전달돼요.
See Also
IAP_StartPurchaseEx
종류 함수 · 모듈 IAP · 버전 3.3.4
Description
IAP_StartPurchase와 동일하게 구매를 요청하지만, 구매 팝업이 닫힐 때 호출되는 onDestroy 콜백을 추가로 받아요. 나머지 파라미터와 결과 콜백(onFinished)은 IAP_StartPurchase와 동일해요.
IAP_Initialize 이후에 호출해야 해요.
Declaration
public static void IAP_StartPurchaseEx(StovePCStartPurchaseParam startPurchaseParam, OnStartPurchaseFinished onFinished, OnIAPPopupDestroyFinished onDestroy)
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
startPurchaseParam | StovePCStartPurchaseParam | Y | 구매할 상품 목록과 팝업 옵션이에요. |
onFinished | OnStartPurchaseFinished | Y | 구매 결과를 받을 콜백이에요. |
onDestroy | OnIAPPopupDestroyFinished | N | 구매 팝업이 닫힐 때 호출되는 콜백이에요. |
Returns
없음
Callback
public delegate void OnStartPurchaseFinished(CallbackResult callbackResult, StovePCPurchaseResult purchase);
public delegate void OnIAPPopupDestroyFinished(CallbackResult callbackResult);
| Name | Type | Description |
|---|---|---|
callbackResult | CallbackResult | 호출 결과예요. callbackResult.result.IsSuccessful()로 성공 여부를 확인해요. |
purchase | StovePCPurchaseResult | onFinished로 전달되는 구매 처리 결과예요. |
두 콜백 모두 Base_RunCallback()을 호출한 스레드에서 실행돼요. onFinished는 구매 처리가 끝나면, onDestroy는 구매 팝업이 닫히면 각각 호출돼요.
Error Codes
CallbackResult.result.methodCode 값은 Convert.ToUInt32(IAPSDKMethod.START_PURCHASE)예요.
| Code | Name | Description | Show to User | In-Game Message |
|---|---|---|---|---|
| 0 | SUCCESS | 성공 | x | |
| 17 | NOT_INITIALIZED | IAP가 초기화되어 있지 않음. IAP_Initialize를 먼저 호출해야 해요 | x | |
| 80 | VIEWUI_NOT_INITIALIZED | 구매 팝업을 표시할 웹뷰 초기화에 실패함 | x | |
| 82 | WEBVIEW_CREATE_FAIL | 구매 팝업 웹뷰 생성에 실패함 | x | |
| 83 | WEBVIEW_LOAD_URL_FAIL | 구매 팝업 웹뷰에서 페이지를 불러오지 못함 | x | |
| 84 | WEBVIEW_CLOSED_BEFORE_PURCHASE | 구매가 완료되기 전에 팝업이 닫힘 | O | 구매가 정상적으로 완료되지 않았습니다. 다시 시도해 주세요. [확인] |
| 85 | PARAMETER_LENGTH_EXCEEDED | serviceTxnNo 또는 extraData의 길이가 허용 범위를 초과함 | O | 결제 정보가 유효하지 않아 결제를 진행할 수 없습니다. 다시 시도해 주세요. [확인] |
| 86 | INVALID_JSON_STRING | extraData가 올바른 JSON 형식이 아님 | O | 결제 정보가 유효하지 않아 결제를 진행할 수 없습니다. 다시 시도해 주세요. [확인] |
| 88 | INVALID_ORDER_PRODUCT_INFORMATION | 구매 상품 정보(quantity, salePrice 등)가 올바르지 않음 | O | 결제 정보가 유효하지 않아 결제를 진행할 수 없습니다. 다시 시도해 주세요. [확인] |
| 89 | WEBVIEW_CLOSE_ALL_FAIL | 기존에 열려 있던 팝업을 모두 닫는 데 실패함 | x | |
| 90 | WEBVIEW_CLOSE_FAIL | 팝업을 닫는 데 실패함(onDestroy 콜백으로 전달됨) | x | |
| 252 | NOT_IMPLEMENTED | 구매 옵션(option.operation)에 알 수 없는 값이 지정됨 | x | |
| 253 | UNMANAGED_EXCEPTION | 네이티브 SDK 내부에서 예외가 발생함 | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
| 254 | MANAGED_EXCEPTION | C# 래퍼 내부(마샬링 등)에서 예외가 발생함. CallbackResult.result.exceptionMessage 를 확인해야 해요 | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
전체 목록은 IAPSDKResultCode 를 참조하세요.
Example
using static Stove.PCSDK.Base;
using static Stove.PCSDK.IAP;
StovePCOrderProduct orderProduct = new StovePCOrderProduct();
orderProduct.productId = 123456;
orderProduct.salePrice = 1000;
orderProduct.quantity = 1;
StovePCPurchaseOption option = new StovePCPurchaseOption();
option.operation = StovePCPurchaseOperation.WITH_WEBVIEW;
option.webviewMode = WebViewMode.INTERNAL;
option.webviewWidth = 800;
option.webviewHeight = 600;
StovePCStartPurchaseParam purchaseParam = new StovePCStartPurchaseParam();
purchaseParam.products = new StovePCOrderProduct[] { orderProduct };
purchaseParam.productsSize = 1;
purchaseParam.option = option;
purchaseParam.serviceTxnNo = "YOUR_SERVICE_TXN_NO";
purchaseParam.extraData = "";
IAP_StartPurchaseEx(purchaseParam, OnStartPurchaseFinished, OnIAPPopupDestroyFinished);
void OnStartPurchaseFinished(CallbackResult callbackResult, StovePCPurchaseResult purchase)
{
if (callbackResult.result.IsSuccessful())
{
// 성공 시 로직을 구현해 주세요.
}
else
{
// 실패 시 로직을 구현해 주세요.
}
}
void OnIAPPopupDestroyFinished(CallbackResult callbackResult)
{
// 구매 팝업이 닫혔을 때의 로직을 구현해 주세요.
}
Notes
- 팝업 종료 감지가 필요하지 않다면 IAP_StartPurchase를 사용해요.
Base_RunCallback()을 게임 루프에서 반복 호출해야 콜백이 전달돼요.
See Also
IAP_UnInitialize
종류 함수 · 모듈 IAP · 버전 3.0.0.4
Description
IAP_Initialize / IAP_InitializeWithWndInfo로 초기화한 결제 기능 모듈을 종료해요.
구 인터페이스에서는 SDK 뿐 아니라 결제 기능을 포함한 각 모듈을 개별적으로 초기화·종료해야 해요. 게임을 종료하기 전에 이 함수를 호출해야 해요.
Declaration
public static Result IAP_UnInitialize()
Parameters
없음
Returns
| Type | Description |
|---|---|
| Result | 호출 결과예요. result.IsSuccessful()로 성공 여부를 확인해요. |
Error Codes
Result.methodCode 값은 Convert.ToUInt32(IAPSDKMethod.UNINITIALIZE)예요.
| Code | Name | Description | Show to User | In-Game Message |
|---|---|---|---|---|
| 0 | SUCCESS | 성공 | x | |
| 17 | NOT_INITIALIZED | IAP가 초기화되어 있지 않음 | x | |
| 81 | VIEWUI_UNINIT_FAILED | 결제 웹뷰 종료 처리에 실패함 | x | |
| 253 | UNMANAGED_EXCEPTION | 네이티브 SDK 내부에서 예외가 발생함 | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
| 254 | MANAGED_EXCEPTION | C# 래퍼 내부(마샬링 등)에서 예외가 발생함. Result.exceptionMessage 를 확인해야 해요 | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
전체 목록은 IAPSDKResultCode 를 참조하세요.
Example
using static Stove.PCSDK.IAP;
Result result = IAP_UnInitialize();
if (result.IsSuccessful())
{
// 성공 시 로직을 구현해 주세요.
}
else
{
// 실패 시 로직을 구현해 주세요.
}
Notes
- 이 함수는 동기 함수이며 콜백을 받지 않아요.
- IAP_Initialize / IAP_InitializeWithWndInfo와 짝을 이루는 종료 함수예요.
See Also
IAPSDKMethod
종류 열거형 · 모듈 IAP · 버전 3.0.0.4
Description
결제 기능의 각 API를 식별하는 값이에요. API 내부에서 예외가 발생하면 Convert.ToUInt32(IAPSDKMethod.Xxx)로 변환되어 Result의 methodCode 필드 또는 CallbackResult의 result.methodCode 필드에 담겨요.
값 자체는 성공/실패와 무관하며, 오류가 발생했을 때 어느 API 호출에서 발생했는지 구분하는 용도로 사용돼요.
Declaration
public enum IAPSDKMethod
{
INITIALIZE = 1,
UNINITIALIZE = 2,
GET_VERSION = 5,
// ... 이하 Values 표 참조
WITHDRAW_GAME = 89,
}
Enum Values
| Code | Name | Description |
|---|---|---|
| 1 | INITIALIZE | IAP_Initialize / IAP_InitializeWithWndInfo |
| 2 | UNINITIALIZE | IAP_UnInitialize |
| 5 | GET_VERSION | IAP_GetVersion |
| 80 | FETCH_SHOP_CATEGORIES | IAP_FetchShopCategories |
| 81 | FETCH_PRODUCTS | IAP_FetchProducts / IAP_FetchProductsEx |
| 82 | START_PURCHASE | IAP_StartPurchase / IAP_StartPurchaseEx |
| 83 | CONFIRM_PURCHASE | IAP_ConfirmPurchase |
| 84 | FETCH_INVENTORY | IAP_FetchInventory |
| 85 | FETCH_TERMS_AGREEMENT | IAP_FetchTermsAgreement / IAP_FetchTermsAgreementEx |
| 86 | START_PAYMENT | IAP_StartPayment / IAP_StartPaymentEx |
| 87 | FETCH_VOIDED_PURCHASES | IAP_FetchVoidedPurchases / IAP_FetchVoidedPurchasesEx |
| 88 | CLOSE_ALL_POPUPS | IAP_CloseAllPopups |
| 89 | WITHDRAW_GAME | IAP_WithdrawGame — 로스트아크모바일 전용 |
INTERNAL_SEND_81PLUG(3), INTERNAL_UPDATE_81PLUG(4)는 내부 전용 값이라 문서에 포함하지 않아요.
값 번호는 1 ~ 5(모듈 공통 API)와 80 ~ 89(결제 기능 고유 API)로 구간이 나뉘어 있고, 그 사이 번호는 사용되지 않아요.
Example
using static Stove.PCSDK.Base;
using static Stove.PCSDK.IAP;
void OnInitializeChecked(Result result)
{
if (!result.IsSuccessful() && result.methodCode == Convert.ToUInt32(IAPSDKMethod.INITIALIZE))
{
// IAP_Initialize 호출 실패 로직을 구현해 주세요.
}
}
Notes
Result.methodCode,CallbackResult.result.methodCode는uint타입이므로, 비교 시Convert.ToUInt32(IAPSDKMethod.Xxx)로 변환해야 해요.- 다른 모듈도 각자 별도의
XxxSDKMethod열거형을 가지므로 번호가 서로 겹칠 수 있어요.
See Also
IAPSDKResultCode
종류 결과코드 · 모듈 IAP · 버전 3.0.0.4
Description
결제 기능의 모든 API가 Result의 resultCode 필드 또는 CallbackResult의 result.resultCode 필드로 돌려주는 결과 코드예요.
0(SUCCESS)이면 성공이며, Result.IsSuccessful() / CallbackResult.result.IsSuccessful()로 판정해요. 그 외 값은 실패를 나타내요.
Declaration
public enum IAPSDKResultCode
{
SUCCESS = 0,
FAIL = 1,
INVALID_CONFIG = 2,
// ... 이하 Values 표 참조
WEBVIEW_CLOSE_ALL_FAIL = 89,
}
Enum Values
| Code | Name | Description | Show to User | In-Game Message |
|---|---|---|---|---|
| 0 | SUCCESS | 성공 | x | |
| 1 | FAIL | 일반 실패예요. 재시도하거나 문의해야 해요 | x | |
| 2 | INVALID_CONFIG | 설정값이 올바르지 않아요. 호출부 설정을 확인해야 해요 | x | |
| 3 | INVALID_LOG_LEVEL | 로그 레벨 값이 올바르지 않아요. 호출부 설정을 확인해야 해요 | x | |
| 4 | INVALID_LOG_PATH | 로그 경로가 올바르지 않아요. 호출부 설정을 확인해야 해요 | x | |
| 5 | INVALID_PARAM | 전달한 파라미터가 올바르지 않아요. 호출부 파라미터를 확인해야 해요 | x | |
| 16 | BASE_NOT_INITIALIZED | SDK가 초기화되지 않았어요. Base_Initialize를 먼저 호출해야 해요 | x | |
| 17 | NOT_INITIALIZED | 결제 기능이 초기화되지 않았어요. IAP_Initialize를 먼저 호출해야 해요 | x | |
| 18 | ALREADY_INITIALIZED | 결제 기능이 이미 초기화되어 있어요. 중복 초기화 호출을 제거해야 해요 | x | |
| 19 | INVALID_ACCESS_TOKEN | 액세스 토큰이 올바르지 않아요. 재로그인하거나 토큰을 갱신해야 해요 | O | 로그인 세션이 만료되었습니다. 게임 종료 후 다시 실행해 주세요. [확인] |
| 20 | NULL_TOKEN_ENTITY | 토큰 정보가 비어 있어요. 재로그인하거나 토큰을 갱신해야 해요 | x | |
| 21 | NULL_ENTITY | 필요한 데이터가 비어 있어요 | x | |
| 22 | HTTP_ERROR | HTTP 통신 오류예요. 네트워크 상태를 확인한 뒤 재시도해야 해요 | O | 네트워크 연결이 원활하지 않습니다. 네트워크 상태를 확인하고 다시 실행해 주세요. [확인] |
| 23 | RESPONSE_ERROR | 서버 응답 처리 중 오류예요 | O | 네트워크 연결이 원활하지 않습니다. 네트워크 상태를 확인하고 다시 실행해 주세요. [확인] |
| 24 | RESPONSE_INVALID_CODE | 서버 응답 코드가 올바르지 않아요 | O | 네트워크 연결이 원활하지 않습니다. 네트워크 상태를 확인하고 다시 실행해 주세요. [확인] |
| 25 | RESPONSE_VALUE_IS_NULL | 서버 응답 값이 비어 있어요 | O | 네트워크 연결이 원활하지 않습니다. 네트워크 상태를 확인하고 다시 실행해 주세요. [확인] |
| 26 | RESPONSE_INVALID_VALUE_FORMAT | 서버 응답 값의 형식이 올바르지 않아요 | O | 네트워크 연결이 원활하지 않습니다. 네트워크 상태를 확인하고 다시 실행해 주세요. [확인] |
| 27 | LOG_81PLUG_ERROR | 81Plug 로그 전송 오류예요 | x | |
| 28 | UPDATE_81PLUG_FEED_ERROR | 81Plug 피드 갱신 오류예요 | x | |
| 29 | ASYNC_OPERATION_IN_PROGRESS | 비동기 작업이 이미 진행 중이에요. 이전 요청이 끝난 뒤 재호출해야 해요 | x | |
| 30 | BASE_UNINITIALIZED | SDK가 이미 종료(UnInitialize)되었어요. 호출 순서를 확인해야 해요 | x | |
| 31 | NOT_SUPPORTED_COUNTRY | 지원하지 않는 국가예요 | x | |
| 80 | VIEWUI_NOT_INITIALIZED | 팝업 UI가 초기화되지 않았어요. 초기화 순서를 확인해야 해요 | x | |
| 81 | VIEWUI_UNINIT_FAILED | 팝업 UI 종료에 실패했어요 | x | |
| 82 | WEBVIEW_CREATE_FAIL | 웹뷰 생성에 실패했어요 | x | |
| 83 | WEBVIEW_LOAD_URL_FAIL | 웹뷰에서 URL을 불러오지 못했어요. 네트워크 상태를 확인한 뒤 재시도해야 해요 | x | |
| 84 | WEBVIEW_CLOSED_BEFORE_PURCHASE | 구매 완료 전에 웹뷰가 닫혔어요. 사용자 취소로 안내해야 해요 | O | 구매가 정상적으로 완료되지 않았습니다. 다시 시도해 주세요. [확인] |
| 85 | PARAMETER_LENGTH_EXCEEDED | 파라미터 길이가 허용 범위를 초과했어요. 호출부 파라미터를 확인해야 해요 | O | 결제 정보가 유효하지 않아 결제를 진행할 수 없습니다. 다시 시도해 주세요. [확인] |
| 86 | INVALID_JSON_STRING | JSON 문자열이 올바르지 않아요 | O | 결제 정보가 유효하지 않아 결제를 진행할 수 없습니다. 다시 시도해 주세요. [확인] |
| 87 | WEBVIEW_CREATE_COOKIE_FAIL | 웹뷰 쿠키 생성에 실패했어요 | O | 구매를 위해서는 약관 동의가 필요합니다. 현재 약관 동의 화면을 불러오지 못했습니다. 다시 시도해 주세요. [확인] |
| 88 | INVALID_ORDER_PRODUCT_INFORMATION | 주문 상품 정보가 올바르지 않아요. 호출부 상품 정보를 확인해야 해요 | O | 결제 정보가 유효하지 않아 결제를 진행할 수 없습니다. 다시 시도해 주세요. [확인] |
| 89 | WEBVIEW_CLOSE_ALL_FAIL | 모든 웹뷰 닫기에 실패했어요 | x | |
| 251 | PCSDK_DLL_NOT_FOUND | PCSDK 네이티브 DLL을 찾지 못했어요. 설치 경로를 확인해야 해요 | x | |
| 252 | NOT_IMPLEMENTED | 구현되지 않은 기능이에요 | x | |
| 253 | UNMANAGED_EXCEPTION | 네이티브(unmanaged) 계층에서 예외가 발생했어요 | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
| 254 | MANAGED_EXCEPTION | .NET(managed) 계층에서 예외가 발생했어요 | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
| 255 | UNKNOWN_ERROR | 알 수 없는 오류예요 | x |
아래 코드를 받으면 반드시 게임을 종료해야 해요. 정상 진행이 불가능한 상태예요.
19INVALID_ACCESS_TOKEN— 로그인 세션이 만료되어 게임을 종료하고 다시 실행해야 해요
값 번호는 0 ~ 31(모듈 공통 오류), 80 ~ 89(결제 기능 고유 오류), 251 ~ 255(시스템/예외 오류) 구간으로 나뉘어 있고, 그 사이 번호는 사용되지 않아요.
Example
using static Stove.PCSDK.IAP;
void OnFetchProductsFinished(CallbackResult callbackResult, StovePCProduct[] products)
{
if (!callbackResult.result.IsSuccessful())
{
if (callbackResult.result.resultCode == (uint)IAPSDKResultCode.NOT_INITIALIZED)
{
// IAP_Initialize 를 먼저 호출해야 하는 경우의 로직을 구현해 주세요.
}
return;
}
}
Notes
80~89구간은 BaseSDKResultCode에도 동일한 번호대(LANGUAGE_NOT_SET등)가 존재하지만 서로 다른 열거형이므로 번호만 같고 의미는 달라요. 어느 모듈의 API가 반환했는지는 IAPSDKMethod로 함께 확인해야 해요.- 이 열거형에는 정의되어 있지 않지만, 네이티브 결제 기능의 SDKResultCode에는 존재하는 값이 두 가지 있어요.
90(WEBVIEW_CLOSE_FAIL, 웹뷰 닫기 실패)은 결제 진행 중 실제로 반환될 수 있는 코드예요. 이 코드가 발생하면resultCode필드에 이름 없는 숫자90이 그대로 담겨 전달되므로, 개발사는 값 자체(정수90)로 분기 처리해야 해요.33(POPUP_NOT_CREATED)은 팝업(웹뷰)이 생성되지 않은 채 종료된 경우의 내부 정리용 코드로, SDK 래퍼가 가로채어 사용자 콜백에는 전달하지 않으므로 실제로 이 값을 받는 경우는 없어요.
See Also
Log_GetVersion
종류 함수 · 모듈 Log · 버전 3.4.1
Description
로그 기능의 버전 정보를 조회해요.
호출자가 준비한 변수에 버전 문자열을 채워서 돌려줘요.
Declaration
public static Result Log_GetVersion(ref string version, uint length);
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
version | ref string | Y | 버전 문자열을 받을 변수예요. 호출 전 값은 무시되고, 호출 후 결과 문자열로 대체돼요. |
length | uint | Y | 내부적으로 사용하는 문자열 버퍼의 길이예요. |
Returns
| Type | Description |
|---|---|
Result | API 호출 결과예요. result.IsSuccessful() 로 성공 여부를 확인해요. |
Error Codes
| Code | Name | Description | Show to User | In-Game Message |
|---|---|---|---|---|
| 0 | SUCCESS | 성공 | x | |
| 5 | INVALID_PARAM | version 버퍼가 없거나 length가 0, 또는 버퍼 크기가 문자열을 담기에 부족함 | x | |
| 251 | PCSDK_DLL_NOT_FOUND | SDK 파일 경로를 찾지 못해 버전 조회에 실패함 | x | |
| 253 | UNMANAGED_EXCEPTION | 네이티브 SDK 내부에서 예외가 발생함 | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
| 254 | MANAGED_EXCEPTION | C# 래퍼 내부(마샬링 등)에서 예외가 발생함. Result.exceptionMessage 를 확인해야 해요 | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
이 함수는 실제로는 LogSDK 자체 버전이 아닌 BaseSDK 통합 버전을 그대로 반환해요. 전체 목록은 LogSDKResultCode 를 참조하세요.
Example
using static Stove.PCSDK.Log;
string version = null;
Result result = Log_GetVersion(ref version, 64);
if (result.IsSuccessful())
{
// 성공 시 로직을 구현해 주세요. version을 사용합니다.
}
else
{
// 실패 시 로직을 구현해 주세요.
}
Notes
- 이 함수는 동기 함수이며 콜백을 받지 않아요.
See Also
Log_Initialize
종류 함수 · 모듈 Log · 버전 3.4.1
Description
로그 기능을 초기화해요.
이 모듈의 다른 API를 호출하기 전에 먼저 호출해야 해요. LogSDKResultCode.BASE_NOT_INITIALIZED 코드가 존재하는 것으로 보아, SDK가 먼저 초기화되어 있어야 해요.
Declaration
public static Result Log_Initialize();
Parameters
없음
Returns
| Type | Description |
|---|---|
Result | API 호출 결과예요. result.IsSuccessful() 로 성공 여부를 확인해요. |
Error Codes
| Code | Name | Description | Show to User | In-Game Message |
|---|---|---|---|---|
| 0 | SUCCESS | 성공 | x | |
| 16 | BASE_NOT_INITIALIZED | BaseSDK가 초기화되지 않음. Base_Initialize를 먼저 호출해야 해요 | x | |
| 18 | ALREADY_INITIALIZED | 로그 기능이 이미 초기화되어 있음 | x | |
| 80 | LOCAL_DB_CREATE_WORKING_DIRECTORY_FAILED | 로그를 저장할 로컬 작업 디렉터리 생성에 실패함 | x | |
| 81 | LOCAL_DB_CONNECT_FAILED | 로그 저장용 로컬 DB 연결에 실패함 | x | |
| 82 | LOCAL_DB_CREATE_TABLE_FAILED | 로그 저장용 로컬 DB 테이블 생성에 실패함 | x | |
| 251 | PCSDK_DLL_NOT_FOUND | SDK 파일 경로를 찾지 못해 버전 확인에 실패함 | x | |
| 253 | UNMANAGED_EXCEPTION | 네이티브 SDK 내부에서 예외가 발생함 | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
| 254 | MANAGED_EXCEPTION | C# 래퍼 내부(마샬링 등)에서 예외가 발생함. Result.exceptionMessage 를 확인해야 해요 | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
전체 목록은 LogSDKResultCode 를 참조하세요.
Example
using static Stove.PCSDK.Log;
Result result = Log_Initialize();
if (result.IsSuccessful())
{
// 성공 시 로직을 구현해 주세요.
}
else
{
// 실패 시 로직을 구현해 주세요.
}
Notes
- 이 함수는 동기 함수이며 콜백을 받지 않아요.
- 모듈 사용이 끝나면 Log_UnInitialize 를 호출해 자원을 정리해야 해요.
- 로그 기능은 모듈 전체가 3.4.1 에 추가되었어요.
See Also
Log_Send
종류 함수 · 모듈 Log · 버전 3.4.1
Description
STOVE 로그 서버에 로그를 전송해요. StovePCLogSendParam 에 담은 값이 그대로 로그 항목이 되어 전송돼요.
Log_Initialize 로 초기화한 뒤에 호출해야 해요.
Declaration
public static void Log_Send(StovePCLogSendParam logSendParam, OnLogSendFinished onFinished);
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
logSendParam | StovePCLogSendParam | Y | 전송할 로그 항목의 값이에요. |
onFinished | OnLogSendFinished | Y | 전송 결과를 받는 콜백이에요. |
Returns
없음
Callback
public delegate void OnLogSendFinished(CallbackResult callbackResult);
| Name | Type | Description |
|---|---|---|
callbackResult | CallbackResult | 전송 호출 결과예요. callbackResult.result.IsSuccessful() 로 성공 여부를 확인해요. |
콜백은 Base_RunCallback() 을 호출한 스레드에서 실행되며, Log_Send() 호출 1회당 1회 전달돼요.
Error Codes
| Code | Name | Description | Show to User | In-Game Message |
|---|---|---|---|---|
| 0 | SUCCESS | 로컬 DB에 로그가 기록됨(서버 전송 성공을 의미하지 않음) | x | |
| 17 | NOT_INITIALIZED | 로그 기능이 초기화되어 있지 않음. Log_Initialize를 먼저 호출해야 해요 | x | |
| 84 | LOCAL_DB_BACKUP_LOG_FAILED | 로그를 로컬 DB에 기록하는 데 실패함 | x | |
| 85 | INVALID_LOG_PARAMETER | contents가 올바른 JSON 형식이 아님 | x | |
| 86 | LOG_SIZE_EXCEEDED | 로그 콘텐츠 크기가 허용 범위(50KB)를 초과함 | x | |
| 253 | UNMANAGED_EXCEPTION | 네이티브 SDK 내부에서 예외가 발생함 | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
| 254 | MANAGED_EXCEPTION | C# 래퍼 내부(마샬링 등)에서 예외가 발생함. callbackResult.result.exceptionMessage 를 확인해야 해요 | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
전체 목록은 LogSDKResultCode 를 참조하세요.
Example
using static Stove.PCSDK.Log;
void OnLogSendFinished(CallbackResult callbackResult)
{
if (callbackResult.result.IsSuccessful())
{
// 성공 시 로직을 구현해 주세요.
}
else
{
// 실패 시 로직을 구현해 주세요.
}
}
var logSendParam = new StovePCLogSendParam
{
auid = auid,
cuid = cuid,
gameVersion = "1.2.3",
contents = "{\"event\":\"login\"}"
};
Log_Send(logSendParam, OnLogSendFinished);
Notes
- 이 함수는 비동기 함수이며, 콜백은
Base_RunCallback()을 호출하는 스레드에서 1회 실행돼요. - 값을 모르는 필드는 기본값(숫자 0, 문자열
null/빈 값)으로 남겨 둘 수 있어요. - 로그 기능은 모듈 전체가 3.4.1 에 추가되었어요.
onFinished콜백은 로그가 로컬 DB에 기록된 시점에SUCCESS로 호출돼요. 실제 STOVE 로그 서버로의 전송은 별도로 처리되며, 서버 전송이 실패해도 이 콜백으로는 전달되지 않아요.- 로컬 DB 기록 실패(
LOCAL_DB_BACKUP_LOG_FAILED등)를 제외하면 이 콜백은 사실상 항상 성공을 돌려줘요. 게임 로직을 이 콜백의 결과로 분기하도록 설계하지 않는 것을 권장해요.
See Also
Log_UnInitialize
종류 함수 · 모듈 Log · 버전 3.4.1
Description
로그 기능의 자원을 해제해요.
Log_Initialize 로 초기화한 자원을 정리하는 함수이며, 모듈 사용을 마칠 때 호출해요.
Declaration
public static Result Log_UnInitialize();
Parameters
없음
Returns
| Type | Description |
|---|---|
Result | API 호출 결과예요. result.IsSuccessful() 로 성공 여부를 확인해요. |
Error Codes
| Code | Name | Description | Show to User | In-Game Message |
|---|---|---|---|---|
| 0 | SUCCESS | 성공 | x | |
| 17 | NOT_INITIALIZED | 로그 기능이 초기화되어 있지 않음 | x | |
| 83 | LOCAL_DB_DISCONNECT_FAILED | 로그 저장용 로컬 DB 연결 해제에 실패함 | x | |
| 253 | UNMANAGED_EXCEPTION | 네이티브 SDK 내부에서 예외가 발생함 | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
| 254 | MANAGED_EXCEPTION | C# 래퍼 내부(마샬링 등)에서 예외가 발생함. Result.exceptionMessage 를 확인해야 해요 | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
전체 목록은 LogSDKResultCode 를 참조하세요.
Example
using static Stove.PCSDK.Log;
Result result = Log_UnInitialize();
if (result.IsSuccessful())
{
// 성공 시 로직을 구현해 주세요.
}
else
{
// 실패 시 로직을 구현해 주세요.
}
Notes
- 이 함수는 동기 함수이며 콜백을 받지 않아요.
- Log_Initialize 와 짝을 이루는 함수예요.
- 로그 기능은 모듈 전체가 3.4.1 에 추가되었어요.
See Also
LogSDKMethod
종류 열거형 · 모듈 Log · 버전 3.4.1
Description
Result.methodCode 또는 CallbackResult.result.methodCode 로 조회되는 값으로, 어떤 로그 기능 함수가 해당 결과를 만들었는지 식별해요.
Declaration
public enum LogSDKMethod
{
INITIALIZE = 1,
UNINITIALIZE = 2,
GET_VERSION = 5,
SEND = 80,
};
Enum Values
| Code | Name | Description |
|---|---|---|
| 1 | INITIALIZE | Log_Initialize 가 만든 결과예요. |
| 2 | UNINITIALIZE | Log_UnInitialize 가 만든 결과예요. |
| — | 3, 4 | 사용하지 않아요 (예약된 번호) |
| 5 | GET_VERSION | Log_GetVersion 이 만든 결과예요. |
| — | 6 ~ 79 | 사용하지 않아요 (예약된 번호) |
| 80 | SEND | Log_Send 가 만든 결과예요. |
Example
if (callbackResult.result.methodCode == Convert.ToUInt32(LogSDKMethod.SEND))
{
// Log_Send 의 결과입니다.
}
Notes
Result.methodCode는uint필드이므로, 이 열거형 값과 비교할 때는Convert.ToUInt32()등으로 변환해야 해요.
See Also
LogSDKResultCode
종류 결과코드 · 모듈 Log · 버전 3.4.1
Description
Result.resultCode 또는 CallbackResult.result.resultCode 로 조회되는 값이에요. 0(SUCCESS)이면 성공이고, 그 외 값은 실패예요.
앞부분(0 ~ 31, 251 ~ 255)은 다른 PCSDK 레거시 모듈과 공유하는 공용 코드이고, 80 이후는 로그 기능 고유의 실패 코드예요.
Declaration
public enum LogSDKResultCode
{
SUCCESS = 0,
FAIL = 1,
// ... 이하 Values 표 참조
LOG_SIZE_EXCEEDED = 86,
}
Enum Values
공용 코드
| Code | Name | Description | Show to User | In-Game Message |
|---|---|---|---|---|
| 0 | SUCCESS | 성공 | x | |
| 1 | FAIL | 일반 실패. 상세 원인은 로그/exceptionMessage 로 확인해요 | x | |
| 2 | INVALID_CONFIG | 설정값이 유효하지 않아요. 설정값을 확인해요 | x | |
| 3 | INVALID_LOG_LEVEL | 로그 레벨 값이 유효하지 않아요. 로그 레벨 값을 확인해요 | x | |
| 4 | INVALID_LOG_PATH | 로그 경로가 유효하지 않아요. 로그 경로를 확인해요 | x | |
| 5 | INVALID_PARAM | 파라미터가 유효하지 않아요. 호출부 파라미터 값을 확인 후 수정해요 | x | |
| — | 6 ~ 15 | 사용하지 않아요 (예약 구간) | ||
| 16 | BASE_NOT_INITIALIZED | SDK가 초기화되지 않았어요. Base_Initialize()를 선행 호출해요 | x | |
| 17 | NOT_INITIALIZED | 로그 기능이 초기화되지 않았어요. Log_Initialize를 선행 호출해요 | x | |
| 18 | ALREADY_INITIALIZED | 이미 초기화되어 있어요. 중복 초기화 호출을 제거해요 | x | |
| 19 | INVALID_ACCESS_TOKEN | AccessToken 이 유효하지 않아요. 토큰 재발급을 확인해요 | O | 로그인 세션이 만료되었습니다. 게임 종료 후 다시 실행해 주세요. [확인] |
| 20 | NULL_TOKEN_ENTITY | 토큰 엔티티가 null 이에요. 토큰 발급 상태를 확인해요 | x | |
| 21 | NULL_ENTITY | 엔티티가 null 이에요. 응답 객체의 null 여부를 확인해요 | x | |
| 22 | HTTP_ERROR | HTTP 통신 오류가 발생했어요. 네트워크 상태를 확인 후 재시도해요 | O | 네트워크 연결이 원활하지 않습니다. 네트워크 상태를 확인하고 다시 실행해 주세요. [확인] |
| 23 | RESPONSE_ERROR | 서버 응답 오류예요. 서버 응답을 확인해요 | O | 네트워크 연결이 원활하지 않습니다. 네트워크 상태를 확인하고 다시 실행해 주세요. [확인] |
| 24 | RESPONSE_INVALID_CODE | 서버 응답 코드가 유효하지 않아요. 서버 응답 코드를 확인해요 | O | 네트워크 연결이 원활하지 않습니다. 네트워크 상태를 확인하고 다시 실행해 주세요. [확인] |
| 25 | RESPONSE_VALUE_IS_NULL | 서버 응답 값이 비어 있어요. 서버 응답 값을 확인해요 | O | 네트워크 연결이 원활하지 않습니다. 네트워크 상태를 확인하고 다시 실행해 주세요. [확인] |
| 26 | RESPONSE_INVALID_VALUE_FORMAT | 서버 응답 값의 형식이 올바르지 않아요. 서버 응답 형식을 확인해요 | O | 네트워크 연결이 원활하지 않습니다. 네트워크 상태를 확인하고 다시 실행해 주세요. [확인] |
| 27 | LOG_81PLUG_ERROR | 81 Plug 전송에 실패했어요 (Deprecated) | x | |
| 28 | UPDATE_81PLUG_FEED_ERROR | 81 Plug 업데이트에 실패했어요 (Deprecated) | x | |
| 29 | ASYNC_OPERATION_IN_PROGRESS | 비동기 작업이 이미 진행 중이에요. 진행 중인 비동기 작업을 완료한 뒤 재호출해요 | x | |
| 30 | BASE_UNINITIALIZED | SDK가 이미 UnInitialize 되었어요. Base_Initialize()를 재호출해요 | x | |
| 31 | NOT_SUPPORTED_COUNTRY | 현재 국가/지역에서는 지원되지 않는 기능이에요. 국가/지역 제한을 확인 후 호출을 중단해요 | x | |
| — | 32 ~ 79 | 사용하지 않아요 (예약 구간) |
로그 기능 고유 코드
| Code | Name | Description | Show to User | In-Game Message |
|---|---|---|---|---|
| 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 | |
| — | 251 ~ 255 | 시스템/런타임 실패 (공용 코드, 아래 참조) |
| Code | Name | Description | Show to User | In-Game Message |
|---|---|---|---|---|
| 251 | PCSDK_DLL_NOT_FOUND | PC SDK DLL 을 찾을 수 없어요. DLL 배치를 확인해요 | x | |
| 252 | NOT_IMPLEMENTED | 구현되지 않은 기능이에요. 호출을 제거하거나 대체 API를 확인해요 | x | |
| 253 | UNMANAGED_EXCEPTION | 관리되지 않는(unmanaged) 예외가 발생했어요. 예외 로그를 확인해요 | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
| 254 | MANAGED_EXCEPTION | 관리되는(managed) 예외가 발생했어요. 예외 로그를 확인해요 | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
| 255 | UNKNOWN_ERROR | 알 수 없는 오류예요. 상세 로그를 확인해요 | x |
아래 코드를 받으면 반드시 게임을 종료해야 해요. 정상 진행이 불가능한 상태예요.
19INVALID_ACCESS_TOKEN— 로그인 세션이 만료되어 게임을 종료하고 다시 실행해야 해요
Example
void OnLogSendFinished(CallbackResult callbackResult)
{
if (callbackResult.result.IsSuccessful())
{
// 성공 시 로직을 구현해 주세요.
}
else if (callbackResult.result.resultCode == (uint)LogSDKResultCode.LOG_SIZE_EXCEEDED)
{
// 로그 크기를 줄여 재전송하는 로직을 구현해 주세요.
}
}
Notes
Result.resultCode는uint필드이므로, 이 열거형 값과 비교할 때는(uint)캐스팅 등으로 변환해야 해요.- Log_Send() 가 실패했을 때 80~86 번 코드가 나올 수 있어요.
See Also
PCBang_CheckPCBangStatus
종류 함수 · 모듈 PCBang · 버전 3.0.2
Description
PC방 여부 및 상품 사용 상태를 조회해요. 결과는 콜백에 StovePCBangStatus 로 전달돼요.
Declaration
public static void PCBang_CheckPCBangStatus(OnPCBangCheckPCBangStatusOnFinished onFinished);
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
onFinished | OnPCBangCheckPCBangStatusOnFinished | Y | 조회 결과를 받는 콜백이에요. |
Returns
없음
Callback
public delegate void OnPCBangCheckPCBangStatusOnFinished(CallbackResult result, StovePCBangStatus stovePCBangStatus);
| Name | Type | Description |
|---|---|---|
result | CallbackResult | 조회 호출 결과예요. result.result.IsSuccessful() 로 성공 여부를 확인해요. |
stovePCBangStatus | StovePCBangStatus | 현재 PC방 상황과 상품 코드 정보예요. |
콜백은 Base_RunCallback() 을 호출한 스레드에서 실행되며, 조회 결과에 대해 1회만 호출돼요.
Error Codes
| Code | Name | Description | Show to User | In-Game Message |
|---|---|---|---|---|
| 0 | SUCCESS | 성공 | x | |
| 17 | NOT_INITIALIZED | PC방 기능이 초기화되어 있지 않음. PCBang_Initialize를 먼저 호출해야 해요 | x | |
| 22 | HTTP_ERROR | 네트워크 요청이 HTTP 오류로 실패함 | O | 네트워크 연결이 원활하지 않습니다. 네트워크 상태를 확인하고 다시 실행해 주세요. [확인] |
| 23 | RESPONSE_ERROR | 서버 응답에 오류가 있음 | O | 네트워크 연결이 원활하지 않습니다. 네트워크 상태를 확인하고 다시 실행해 주세요. [확인] |
| 25 | RESPONSE_VALUE_IS_NULL | 서버 응답 데이터가 비어 있음 | O | 네트워크 연결이 원활하지 않습니다. 네트워크 상태를 확인하고 다시 실행해 주세요. [확인] |
| 249 | NETWORK_TRANSPORT_ERROR | 네트워크 전송 계층에서 오류가 발생함 | x | |
| 253 | UNMANAGED_EXCEPTION | 네이티브 SDK 내부에서 예외가 발생함 | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
| 254 | MANAGED_EXCEPTION | C# 래퍼 내부(마샬링 등)에서 예외가 발생함. CallbackResult.result.exceptionMessage 를 확인해야 해요 | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
전체 목록은 PCBangSDKResultCode 를 참조하세요.
Example
using static Stove.PCSDK.PCBang;
void OnCheckStatusFinished(CallbackResult result, StovePCBangStatus status)
{
if (result.result.IsSuccessful())
{
// 성공 시 로직을 구현해 주세요.
}
else
{
// 실패 시 로직을 구현해 주세요.
}
}
PCBang_CheckPCBangStatus(OnCheckStatusFinished);
Notes
- 이 함수는 비동기 함수이며, 콜백은
Base_RunCallback()을 호출하는 스레드에서 1회 실행돼요. - PCBang_UserLogin 의 로그인 결과와는 별개의 조회 API예요.
See Also
PCBang_GetVersion
종류 함수 · 모듈 PCBang · 버전 3.0.2
Description
PC방 기능의 버전 정보를 조회해요.
호출자가 준비한 변수에 버전 문자열을 채워서 돌려줘요.
Declaration
public static Result PCBang_GetVersion(ref string version, uint length);
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
version | ref string | Y | 버전 문자열을 받을 변수예요. 호출 전 값은 무시되고, 호출 후 결과 문자열로 대체돼요. |
length | uint | Y | 내부적으로 사용하는 문자열 버퍼의 길이예요. |
Returns
| Type | Description |
|---|---|
Result | API 호출 결과예요. result.IsSuccessful() 로 성공 여부를 확인해요. |
Error Codes
| Code | Name | Description | Show to User | In-Game Message |
|---|---|---|---|---|
| 0 | SUCCESS | 성공 | x | |
| 5 | INVALID_PARAM | version 버퍼가 없거나 length가 0, 또는 버퍼 크기가 문자열을 담기에 부족함 | x | |
| 251 | PCSDK_DLL_NOT_FOUND | SDK 파일 경로를 찾지 못해 버전 조회에 실패함 | x | |
| 253 | UNMANAGED_EXCEPTION | 네이티브 SDK 내부에서 예외가 발생함 | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
| 254 | MANAGED_EXCEPTION | C# 래퍼 내부(마샬링 등)에서 예외가 발생함. Result.exceptionMessage 를 확인해야 해요 | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
이 함수는 실제로는 PCBangSDK 자체 버전이 아닌 BaseSDK 통합 버전을 그대로 반환해요. 전체 목록은 PCBangSDKResultCode 를 참조하세요.
Example
using static Stove.PCSDK.PCBang;
string version = null;
Result result = PCBang_GetVersion(ref version, 64);
if (result.IsSuccessful())
{
// 성공 시 로직을 구현해 주세요. version을 사용합니다.
}
else
{
// 실패 시 로직을 구현해 주세요.
}
Notes
- 이 함수는 동기 함수이며 콜백을 받지 않아요.
See Also
PCBang_Initialize
종류 함수 · 모듈 PCBang · 버전 3.0.2
Description
PC방 기능을 초기화해요.
이 모듈의 다른 API를 호출하기 전에 먼저 호출해야 해요. PCBangSDKResultCode.BASE_NOT_INITIALIZED 코드가 존재하는 것으로 보아, SDK가 먼저 초기화되어 있어야 해요.
Declaration
public static Result PCBang_Initialize();
Parameters
없음
Returns
| Type | Description |
|---|---|
Result | API 호출 결과예요. result.IsSuccessful() 로 성공 여부를 확인해요. |
Error Codes
| Code | Name | Description | Show to User | In-Game Message |
|---|---|---|---|---|
| 0 | SUCCESS | 성공 | x | |
| 16 | BASE_NOT_INITIALIZED | BaseSDK가 초기화되지 않음. Base_Initialize를 먼저 호출해야 해요 | x | |
| 18 | ALREADY_INITIALIZED | PC방 기능이 이미 초기화되어 있음 | x | |
| 251 | PCSDK_DLL_NOT_FOUND | SDK 파일 경로를 찾지 못해 버전 확인에 실패함 | x | |
| 253 | UNMANAGED_EXCEPTION | 네이티브 SDK 내부에서 예외가 발생함 | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
| 254 | MANAGED_EXCEPTION | C# 래퍼 내부(마샬링 등)에서 예외가 발생함. Result.exceptionMessage 를 확인해야 해요 | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
전체 목록은 PCBangSDKResultCode 를 참조하세요.
Example
using static Stove.PCSDK.PCBang;
Result result = PCBang_Initialize();
if (result.IsSuccessful())
{
// 성공 시 로직을 구현해 주세요.
}
else
{
// 실패 시 로직을 구현해 주세요.
}
Notes
- 이 함수는 동기 함수이며 콜백을 받지 않아요.
- 모듈 사용이 끝나면 PCBang_UnInitialize 를 호출해 자원을 정리해야 해요.
See Also
PCBang_UnInitialize
종류 함수 · 모듈 PCBang · 버전 3.0.2
Description
PC방 기능의 자원을 해제해요.
PCBang_Initialize 로 초기화한 자원을 정리하는 함수이며, 모듈 사용을 마칠 때 호출해요.
Declaration
public static Result PCBang_UnInitialize();
Parameters
없음
Returns
| Type | Description |
|---|---|
Result | API 호출 결과예요. result.IsSuccessful() 로 성공 여부를 확인해요. |
Error Codes
| Code | Name | Description | Show to User | In-Game Message |
|---|---|---|---|---|
| 0 | SUCCESS | 성공 | x | |
| 17 | NOT_INITIALIZED | PC방 기능이 초기화되어 있지 않음 | x | |
| 253 | UNMANAGED_EXCEPTION | 네이티브 SDK 내부에서 예외가 발생함 | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
| 254 | MANAGED_EXCEPTION | C# 래퍼 내부(마샬링 등)에서 예외가 발생함. Result.exceptionMessage 를 확인해야 해요 | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
전체 목록은 PCBangSDKResultCode 를 참조하세요.
Example
using static Stove.PCSDK.PCBang;
Result result = PCBang_UnInitialize();
if (result.IsSuccessful())
{
// 성공 시 로직을 구현해 주세요.
}
else
{
// 실패 시 로직을 구현해 주세요.
}
Notes
- 이 함수는 동기 함수이며 콜백을 받지 않아요.
- PCBang_Initialize 와 짝을 이루는 함수예요.
See Also
PCBang_UserLogin
종류 함수 · 모듈 PCBang · 버전 3.0.2
Description
PC방 서비스에서 게임 유저를 로그인해요. 로그인 결과는 onUserLoginFinished 콜백으로 전달되고, 이후 4분마다 갱신되는 PC방 혜택 정보가 onRefreshBenefitsFinished 콜백으로 전달돼요.
PCBang_Initialize 로 초기화한 뒤에 호출해야 해요.
실제 구현에서는 두 콜백이 모두
null이 아닐 때만 등록돼요. 하나라도null이면 어느 콜백도 등록되지 않아요.
Declaration
public static void PCBang_UserLogin(OnPCBangUserLoginOnFinished onUserLoginFinished, OnPCBangRefreshUserBenefitsOnFinished onRefreshBenefitsFinished);
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
onUserLoginFinished | OnPCBangUserLoginOnFinished | Y | 로그인 결과를 받는 콜백이에요. |
onRefreshBenefitsFinished | OnPCBangRefreshUserBenefitsOnFinished | Y | 4분마다 갱신된 혜택 정보를 받는 콜백이에요. 두 콜백을 함께 지정해야 등록돼요. |
Returns
없음
Callback
로그인 결과와 혜택 갱신 정보는 서로 다른 콜백으로 구분되어 전달돼요.
로그인 결과 콜백
public delegate void OnPCBangUserLoginOnFinished(CallbackResult result, StovePCBangUserLogin stovePCBangUserLogin);
| Name | Type | Description |
|---|---|---|
result | CallbackResult | 로그인 호출 결과예요. result.result.IsSuccessful() 로 성공 여부를 확인해요. |
stovePCBangUserLogin | StovePCBangUserLogin | 로그인 결과 정보(프리미엄 상태, PC방 시리얼 번호, 남은 시간)이에요. |
혜택 갱신 콜백
public delegate void OnPCBangRefreshUserBenefitsOnFinished(CallbackResult result, StovePCRefreshUserBenefits stovePCRefreshUserBenefits);
| Name | Type | Description |
|---|---|---|
result | CallbackResult | 혜택 갱신 결과예요. |
stovePCRefreshUserBenefits | StovePCRefreshUserBenefits | 갱신된 혜택 정보(프리미엄 상태, 남은 시간)이에요. |
두 콜백 모두 Base_RunCallback() 을 호출한 스레드에서 실행돼요.
onUserLoginFinished는 로그인 요청 1회에 대해 호출돼요.onRefreshBenefitsFinished는 4분마다 반복 호출되어 갱신된 혜택 정보를 전달해요.PCBang_UserLogin을 다시 호출하면 이전에 등록된 혜택 갱신 콜백은 새 콜백으로 교체돼요.
Error Codes
로그인 결과의 result.methodCode 는 PCBangSDKMethod.USER_LOGIN, 혜택 갱신 결과의 result.methodCode 는 PCBangSDKMethod.REFRESH_USER_BENEFITS 값을 가져요.
두 콜백 모두 아래 코드를 동일하게 사용해요.
| Code | Name | Description | Show to User | In-Game Message |
|---|---|---|---|---|
| 0 | SUCCESS | 성공 | x | |
| 17 | NOT_INITIALIZED | PC방 기능이 초기화되어 있지 않음. PCBang_Initialize를 먼저 호출해야 해요 | x | |
| 22 | HTTP_ERROR | 네트워크 요청이 HTTP 오류로 실패함 | 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 | C# 래퍼 내부(마샬링 등)에서 예외가 발생함. CallbackResult.result.exceptionMessage 를 확인해야 해요 | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
전체 목록은 PCBangSDKResultCode 를 참조하세요.
Example
using static Stove.PCSDK.PCBang;
void OnUserLoginFinished(CallbackResult result, StovePCBangUserLogin login)
{
if (result.result.IsSuccessful())
{
// 성공 시 로직을 구현해 주세요.
}
else
{
// 실패 시 로직을 구현해 주세요.
}
}
void OnRefreshBenefitsFinished(CallbackResult result, StovePCRefreshUserBenefits benefits)
{
if (result.result.IsSuccessful())
{
// 성공 시 로직을 구현해 주세요.
}
else
{
// 실패 시 로직을 구현해 주세요.
}
}
PCBang_UserLogin(OnUserLoginFinished, OnRefreshBenefitsFinished);
Notes
- 이 함수는 비동기 함수이며, 두 콜백은
Base_RunCallback()을 호출하는 스레드에서 실행돼요. - 로그인을 종료할 때는 PCBang_UserLogout 을 호출해요.
- 무료 상태(
PCBangPremium.PCBANG_FREE)에서도 혜택 갱신 콜백은 계속 전달돼요.
See Also
- PCBang_UserLogout
- PCBang_CheckPCBangStatus
- StovePCBangUserLogin
- StovePCRefreshUserBenefits
- PCBangPremium
PCBang_UserLogout
종류 함수 · 모듈 PCBang · 버전 3.0.2
Description
PC방 서비스에서 게임 유저를 로그아웃해요.
PCBang_UserLogin 이 시작한 혜택 갱신 콜백의 반복 호출을 중단시켜요.
Declaration
public static void PCBang_UserLogout(OnPCBangUserLogoutOnFinished onFinished);
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
onFinished | OnPCBangUserLogoutOnFinished | Y | 로그아웃 결과를 받는 콜백이에요. |
Returns
없음
Callback
public delegate void OnPCBangUserLogoutOnFinished(CallbackResult result);
| Name | Type | Description |
|---|---|---|
result | CallbackResult | 로그아웃 호출 결과예요. result.result.IsSuccessful() 로 성공 여부를 확인해요. |
콜백은 Base_RunCallback() 을 호출한 스레드에서 실행되며, 로그아웃 결과에 대해 1회만 호출돼요.
Error Codes
| Code | Name | Description | Show to User | In-Game Message |
|---|---|---|---|---|
| 0 | SUCCESS | 성공 | x | |
| 17 | NOT_INITIALIZED | PC방 기능이 초기화되어 있지 않음. PCBang_Initialize를 먼저 호출해야 해요 | x | |
| 22 | HTTP_ERROR | 네트워크 요청이 HTTP 오류로 실패함 | O | 네트워크 연결이 원활하지 않습니다. 네트워크 상태를 확인하고 다시 실행해 주세요. [확인] |
| 23 | RESPONSE_ERROR | 서버 응답에 오류가 있음 | O | 네트워크 연결이 원활하지 않습니다. 네트워크 상태를 확인하고 다시 실행해 주세요. [확인] |
| 25 | RESPONSE_VALUE_IS_NULL | 서버 응답 데이터가 비어 있음 | O | 네트워크 연결이 원활하지 않습니다. 네트워크 상태를 확인하고 다시 실행해 주세요. [확인] |
| 249 | NETWORK_TRANSPORT_ERROR | 네트워크 전송 계층에서 오류가 발생함 | x | |
| 253 | UNMANAGED_EXCEPTION | 네이티브 SDK 내부에서 예외가 발생함 | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
| 254 | MANAGED_EXCEPTION | C# 래퍼 내부(마샬링 등)에서 예외가 발생함. CallbackResult.result.exceptionMessage 를 확인해야 해요 | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
전체 목록은 PCBangSDKResultCode 를 참조하세요.
Example
using static Stove.PCSDK.PCBang;
void OnUserLogoutFinished(CallbackResult result)
{
if (result.result.IsSuccessful())
{
// 성공 시 로직을 구현해 주세요.
}
else
{
// 실패 시 로직을 구현해 주세요.
}
}
PCBang_UserLogout(OnUserLogoutFinished);
Notes
- 이 함수는 비동기 함수이며, 콜백은
Base_RunCallback()을 호출하는 스레드에서 1회 실행돼요. - PCBang_UserLogin 의 혜택 갱신 콜백 반복 호출을 멈추려면 이 함수를 호출해야 해요.
See Also
PCBangPremium
종류 열거형 · 모듈 PCBang · 버전 3.0.2
Description
로그인한 사용자의 PC방 프리미엄(유료) 이용 상태를 나타내는 값이에요. StovePCBangUserLogin, StovePCBangStatus, StovePCRefreshUserBenefits 의 premiumStatus 필드가 이 값을 가져요.
이 열거형에는 별도의 성공/실패 판정용 코드가 없어요. PCBANG_ERROR 는 서버 오류·판단 불가 상태를 나타내는 값이며, 결과 성공 여부는 CallbackResult.result.IsSuccessful() 로 별도 확인해요.
Declaration
public enum PCBangPremium
{
PCBANG_ERROR = -1,
PCBANG_PREMIUM = 1,
PCBANG_FREE = 2,
PCBANG_FREE_OTHER = 3,
};
Enum Values
| Code | Name | Description |
|---|---|---|
| -1 | PCBANG_ERROR | 서버 오류 / 상태를 판단할 수 없어요. |
| 1 | PCBANG_PREMIUM | 프리미엄(유료) PC방 혜택을 이용 가능한 상태예요. |
| 2 | PCBANG_FREE | 무료 이용 상태예요. |
| 3 | PCBANG_FREE_OTHER | 제휴사(타사)가 제공하는 무료 이용 상태예요. |
Example
void OnUserLoginFinished(CallbackResult result, StovePCBangUserLogin login)
{
if (result.result.IsSuccessful())
{
if (login.premiumStatus == PCBangPremium.PCBANG_PREMIUM)
{
// 프리미엄 혜택 로직을 구현해 주세요.
}
}
}
Notes
- 이 값은 StovePCBangUserLogin, StovePCBangStatus, StovePCRefreshUserBenefits 세 구조체가 공통으로 반환해요.
- 무료 상태(
PCBANG_FREE)에서도 혜택 갱신 콜백은 계속 호출돼요.
See Also
PCBangSDKMethod
종류 열거형 · 모듈 PCBang · 버전 3.0.2
Description
Result.methodCode 또는 CallbackResult.result.methodCode 로 조회되는 값으로, 어떤 PC방 기능 함수가 해당 결과를 만들었는지 식별해요.
Declaration
public enum PCBangSDKMethod
{
INITIALIZE = 1,
UNINITIALIZE = 2,
INTERNAL_SEND_81PLUG = 3,
INTERNAL_UPDATE_81PLUG = 4,
GET_VERSION = 5,
USER_LOGIN = 80,
USER_LOGOUT = 81,
CHECK_PCBANG_STATUS = 82,
REFRESH_USER_BENEFITS = 83,
};
Enum Values
| Code | Name | Description |
|---|---|---|
| 1 | INITIALIZE | PCBang_Initialize 가 만든 결과예요. |
| 2 | UNINITIALIZE | PCBang_UnInitialize 가 만든 결과예요. |
| 3 | INTERNAL_SEND_81PLUG | 내부 전용 값이에요. |
| 4 | INTERNAL_UPDATE_81PLUG | 내부 전용 값이에요. |
| 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, INTERNAL_UPDATE_81PLUG)은 위 표에 이름과 번호만 남기며, 별도의 공개 API 로 노출되지 않아요.
Example
if (callbackResult.result.methodCode == Convert.ToUInt32(PCBangSDKMethod.USER_LOGIN))
{
// PCBang_UserLogin 의 로그인 결과입니다.
}
Notes
Result.methodCode는uint필드이므로, 이 열거형 값과 비교할 때는Convert.ToUInt32()등으로 변환해야 해요.USER_LOGIN과REFRESH_USER_BENEFITS는 PCBang_UserLogin 한 번의 호출에서 각각 다른 시점에 콜백으로 전달되는 두 결과를 구분하는 값이에요.
See Also
PCBangSDKResultCode
종류 결과코드 · 모듈 PCBang · 버전 3.0.2
Description
Result.resultCode 또는 CallbackResult.result.resultCode 로 조회되는 값이에요. 0(SUCCESS)이면 성공이고, 그 외 값은 실패예요.
이 코드는 SDK 를 포함한 다른 PCSDK 레거시 모듈의 SDKResultCode 계열과 번호 구간이 같은 공용 코드예요. Result.sdkName 으로 어느 모듈이 만든 결과인지 확인해야 해요.
Declaration
public enum PCBangSDKResultCode
{
SUCCESS = 0,
FAIL = 1,
// ... 이하 Values 표 참조
UNKNOWN_ERROR = 255,
}
Enum Values
| Code | Name | Description | Show to User | In-Game Message |
|---|---|---|---|---|
| 0 | SUCCESS | 성공 | x | |
| 1 | FAIL | 일반 실패예요. 상세 원인은 로그 또는 exceptionMessage 로 확인해야 해요 | x | |
| 2 | INVALID_CONFIG | 설정값이 유효하지 않아요. 설정값을 확인해야 해요 | x | |
| 3 | INVALID_LOG_LEVEL | 로그 레벨 값이 유효하지 않아요. 로그 레벨 값을 확인해야 해요 | x | |
| 4 | INVALID_LOG_PATH | 로그 경로가 유효하지 않아요. 로그 경로를 확인해야 해요 | x | |
| 5 | INVALID_PARAM | 파라미터가 유효하지 않아요. 호출부의 파라미터 값을 확인한 후 수정해야 해요 | x | |
| — | 6 ~ 15 | 사용하지 않아요 (예약 구간) | x | |
| 16 | BASE_NOT_INITIALIZED | SDK가 초기화되지 않았어요. Base_Initialize() 를 먼저 호출해야 해요 | x | |
| 17 | NOT_INITIALIZED | PC방 기능이 초기화되지 않았어요. PCBang_Initialize 를 먼저 호출해야 해요 | x | |
| 18 | ALREADY_INITIALIZED | 이미 초기화되어 있어요. 중복 초기화 호출을 제거해야 해요 | x | |
| 19 | INVALID_ACCESS_TOKEN | AccessToken 이 유효하지 않아요. 토큰 재발급이 필요해요 | O | 로그인 세션이 만료되었습니다. 게임 종료 후 다시 실행해 주세요. [확인] |
| 20 | NULL_TOKEN_ENTITY | 토큰 엔티티가 null 이에요. 토큰 발급 상태를 확인해야 해요 | x | |
| 21 | NULL_ENTITY | 엔티티가 null 이에요. 응답 객체의 null 여부를 확인해야 해요 | x | |
| 22 | HTTP_ERROR | HTTP 통신 오류가 발생했어요. 네트워크 상태를 확인한 후 재시도해야 해요 | O | 네트워크 연결이 원활하지 않습니다. 네트워크 상태를 확인하고 다시 실행해 주세요. [확인] |
| 23 | RESPONSE_ERROR | 서버 응답 오류예요. 서버 응답을 확인해야 해요 | O | 네트워크 연결이 원활하지 않습니다. 네트워크 상태를 확인하고 다시 실행해 주세요. [확인] |
| 24 | RESPONSE_INVALID_CODE | 서버 응답 코드가 유효하지 않아요. 서버 응답 코드를 확인해야 해요 | O | 네트워크 연결이 원활하지 않습니다. 네트워크 상태를 확인하고 다시 실행해 주세요. [확인] |
| 25 | RESPONSE_VALUE_IS_NULL | 서버 응답 값이 비어 있어요. 서버 응답 값을 확인해야 해요 | O | 네트워크 연결이 원활하지 않습니다. 네트워크 상태를 확인하고 다시 실행해 주세요. [확인] |
| 26 | RESPONSE_INVALID_VALUE_FORMAT | 서버 응답 값의 형식이 올바르지 않아요. 서버 응답 형식을 확인해야 해요 | O | 네트워크 연결이 원활하지 않습니다. 네트워크 상태를 확인하고 다시 실행해 주세요. [확인] |
| 27 | LOG_81PLUG_ERROR | 81 Plug 전송에 실패했어요 (Deprecated) | x | |
| 28 | UPDATE_81PLUG_FEED_ERROR | 81 Plug 업데이트에 실패했어요 (Deprecated) | 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 을 찾을 수 없어요. DLL 배치를 확인해야 해요 | x | |
| 252 | NOT_IMPLEMENTED | 구현되지 않은 기능이에요. 호출을 제거하거나 대체 API를 확인해야 해요 | x | |
| 253 | UNMANAGED_EXCEPTION | 관리되지 않는(unmanaged) 예외가 발생했어요. 예외 로그를 확인해야 해요 | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
| 254 | MANAGED_EXCEPTION | 관리되는(managed) 예외가 발생했어요. 예외 로그를 확인해야 해요 | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
| 255 | UNKNOWN_ERROR | 알 수 없는 오류예요. 상세 로그를 확인해야 해요 | x |
아래 코드를 받으면 반드시 게임을 종료해야 해요. 정상 진행이 불가능한 상태예요.
19INVALID_ACCESS_TOKEN— 로그인 세션이 만료되어 게임을 종료하고 다시 실행해야 해요
Example
Result result = PCBang_Initialize();
if (result.IsSuccessful())
{
// 성공 시 로직을 구현해 주세요.
}
else if (result.resultCode == (uint)PCBangSDKResultCode.ALREADY_INITIALIZED)
{
// 이미 초기화된 경우의 로직을 구현해 주세요.
}
Notes
28(UPDATE_81PLUG_FEED_ERROR)은 내부 연동용 코드이며 Deprecated 로 남아 있어요.Result.resultCode는uint필드이므로, 이 열거형 값과 비교할 때는(uint)캐스팅 등으로 변환해야 해요.
See Also
ProductTypeCode
종류 열거형 · 모듈 IAP · 버전 3.0.0.4
Description
StovePCProduct.productTypeCode / StovePCProductEx.productTypeCode 필드에 담겨, IAP_FetchProducts / IAP_FetchProductsEx 콜백으로 전달되는 상품이 어떤 종류인지 나타내요.
Declaration
public enum ProductTypeCode
{
NONE = 0,
INDIE_PACKAGE_GAME_ITEM = 1,
IN_GAME_ITEM,
PACKAGE_ITEM,
};
Enum Values
| Code | Name | Description |
|---|---|---|
| 0 | NONE | 종류가 지정되지 않았어요 |
| 1 | INDIE_PACKAGE_GAME_ITEM | 인디 패키지 게임 상품이에요 |
| 2 | IN_GAME_ITEM | 인게임 아이템 상품이에요 |
| 3 | PACKAGE_ITEM | 패키지 상품이에요 |
Example
using static Stove.PCSDK.IAP;
void OnFetchProductsFinished(CallbackResult callbackResult, StovePCProduct[] products)
{
if (!callbackResult.result.IsSuccessful())
{
return;
}
foreach (var product in products)
{
if (product.productTypeCode == ProductTypeCode.IN_GAME_ITEM)
{
// 인게임 아이템 상품 로직을 구현해 주세요.
}
}
}
Notes
- DiscountType, PurchaseLimitTypeCode와 함께 상품 정보를 구성하는 값 중 하나예요.
See Also
PurchaseLimitTypeCode
종류 열거형 · 모듈 IAP · 버전 3.0.0.4
Description
StovePCProduct.purchaseLimitTypeCode / StovePCProductEx.purchaseLimitTypeCode 필드에 담겨, purchaseLimitCount가 어떤 단위로 구매 개수를 제한하는지를 나타내요.
Declaration
public enum PurchaseLimitTypeCode
{
NONE = 0,
UNLIMITED = 1,
MEMBER,
CHARACTER
};
Enum Values
| Code | Name | Description |
|---|---|---|
| 0 | NONE | 제한 기준이 지정되지 않았어요 |
| 1 | UNLIMITED | 구매 제한이 없어요 |
| 2 | MEMBER | 회원(계정) 단위로 구매를 제한해요 |
| 3 | CHARACTER | 캐릭터 단위로 구매를 제한해요 |
Example
using static Stove.PCSDK.IAP;
void CheckPurchaseLimit(StovePCProduct product)
{
if (product.purchaseLimitTypeCode == PurchaseLimitTypeCode.CHARACTER)
{
// 캐릭터 단위 구매 제한 UI 로직을 구현해 주세요. purchaseLimitCount 가 제한 개수입니다.
}
}
Notes
purchaseLimitCount,saleLimitCount필드와 함께 상품의 구매 가능 개수를 판단하는 데 사용돼요.
See Also
PurchaseProgress
종류 열거형 · 모듈 IAP · 버전 3.0.0.4
Description
StovePCPurchaseResult.purchaseProgress 필드에 담겨, IAP_StartPurchase / IAP_StartPurchaseEx 콜백으로 전달돼요. 구매 요청 이후 결제창을 추가로 띄워야 하는지를 나타내요.
Declaration
public enum PurchaseProgress
{
NONE = 0,
NEED_PAYMENT_WINDOW = 1,
NOT_NEED_PAYMENT_WINDOW
};
Enum Values
| Code | Name | Description |
|---|---|---|
| 0 | NONE | 진행 상태가 지정되지 않았어요 |
| 1 | NEED_PAYMENT_WINDOW | 결제창을 추가로 띄워야 해요 |
| 2 | NOT_NEED_PAYMENT_WINDOW | 결제창을 추가로 띄울 필요가 없어요 |
Example
using static Stove.PCSDK.IAP;
void OnStartPurchaseFinished(CallbackResult callbackResult, StovePCPurchaseResult purchase)
{
if (!callbackResult.result.IsSuccessful())
{
return;
}
if (purchase.purchaseProgress == PurchaseProgress.NEED_PAYMENT_WINDOW)
{
// oneTimePaymentUrl 로 결제창을 띄우는 로직을 구현해 주세요.
}
}
Notes
NEED_PAYMENT_WINDOW일 때StovePCPurchaseResult.oneTimePaymentUrl을 함께 확인해야 해요.
See Also
Result
종류 구조체 · 모듈 Base · 버전 3.0.0.4
Description
Result 는 SDK Legacy 의 동기 API(예: Base_UnInitialize, Base_SetLanguage)가 직접 반환하는 결과이자, CallbackResult 안에 담겨 비동기 콜백으로 전달되는 결과이기도 해요.
resultCode 가 0(BaseSDKResultCode.SUCCESS)이면 성공이에요. IsSuccessful() 메서드로 판정해요.
Declaration
public struct Result
{
public string sdkName;
public uint methodCode;
public uint resultCode;
public string exceptionMessage;
}
Members
| Name | Type | Description |
|---|---|---|
sdkName | string | 결과를 만든 SDK(DLL) 이름 |
methodCode | uint | 이 결과를 만든 API 를 식별하는 BaseSDKMethod 값 |
resultCode | uint | BaseSDKResultCode 값. 0 이면 성공 |
exceptionMessage | string | 예외가 발생한 경우의 예외 메시지. 예외가 없으면 비어 있을 수 있어요 |
Example
using static Stove.PCSDK.Base;
Result result = Base_SetLanguage(StoveLanguage.ko);
if (result.IsSuccessful())
{
// 성공 시 로직을 구현해 주세요.
}
else
{
// 실패 시 로직을 구현해 주세요. result.resultCode, result.exceptionMessage 를 확인해 주세요.
}
Notes
result.IsSuccessful()은 메서드예요. 신규 C# 인터페이스(Stove.PCSDK.V3)의result.IsSuccessful프로퍼티와 혼동하지 않도록 주의해야 해요.- 필드는 모두 public camelCase 필드이며, 프로퍼티가 아니에요.
- C# 래퍼 내부에서 예외가 발생하면
resultCode가BaseSDKResultCode.MANAGED_EXCEPTION(254)로 채워져요.
See Also
StoveAPI_FreeStruct
종류 함수 · 모듈 Base · 버전 3.4.0
Description
StoveAPI_FreeStruct 는 네이티브 SDK 가 Base_GetUser, Base_GetGds, Base_GetSignin, Base_GetTraceHint 등의 조회 결과로 채운 네이티브 구조체 포인터(ptr)를 넘기면, 그 구조체가 점유하고 있는 네이티브 측 리소스를 해제하는 함수예요.
이 함수 자체는 Base_ 접두사 규칙에서 벗어난 이름이며, 소스에도 이 이름 그대로 정의되어 있어요. BaseAPI.cs 안에서는 Base_GetUser 등의 내부 구현이 네이티브 구조체에 stoveDeleter(네이티브 해제 함수 포인터)가 설정되어 있을 때만 이 함수를 호출한 뒤, 관리되는 쪽의 버퍼(Marshal.FreeHGlobal)까지 함께 해제해요.
Declaration
public static void StoveAPI_FreeStruct(IntPtr ptr);
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
ptr | IntPtr | Y | 해제할 네이티브 구조체의 포인터 |
Returns
| Type | Description |
|---|---|
void | 없음 |
Error Codes
없음. 이 함수는 Result/CallbackResult 를 반환하지 않으며, 내부에서 예외가 발생하면 C# 예외가 그대로 다시 던져져요(rethrow).
Example
using static Stove.PCSDK.Base;
// 네이티브 구조체 포인터를 직접 다루는 경우에만 사용합니다.
StoveAPI_FreeStruct(nativePtr);
Notes
- 일반적인 사용에서는 Base_GetUser, Base_GetGds, Base_GetSignin, Base_GetTraceHint 가 내부에서 이 함수를 호출하므로, 게임 코드에서 직접 호출할 일은 드뭐요.
ptr은 네이티브 구조체를 가리키는 포인터여야 해요. 관리되는(managed) 구조체 값을 그대로 넘겨서는 안 돼요.
See Also
StoveLanguage
종류 열거형 · 모듈 Base · 버전 3.0.0.4
Description
StoveLanguage 는 Base_SetLanguage 호출 시 전달하는 언어 값이에요. system 은 시스템 언어를 따르는 값이고, 나머지는 개별 언어를 가리켜요.
Declaration
public enum StoveLanguage
{
system = 0,
en = 1,
ko = 2,
ja = 3,
zh_cn = 4,
zh_tw = 5,
de = 6,
fr = 7,
es = 8,
pt = 9,
th = 10,
vi = 11,
};
Enum Values
| Code | Name | Description |
|---|---|---|
| 0 | system | 시스템 언어를 따라요 |
| 1 | en | 영어 |
| 2 | ko | 한국어 |
| 3 | ja | 일본어 |
| 4 | zh_cn | 중국어(간체) |
| 5 | zh_tw | 중국어(번체) |
| 6 | de | 독일어 |
| 7 | fr | 프랑스어 |
| 8 | es | 스페인어 |
| 9 | pt | 포르투갈어 |
| 10 | th | 태국어 |
| 11 | vi | 베트남어 |
Example
using static Stove.PCSDK.Base;
Result result = Base_SetLanguage(StoveLanguage.ko);
if (result.IsSuccessful())
{
// 성공 시 로직을 구현해 주세요.
}
else
{
// 실패 시 로직을 구현해 주세요.
}
Notes
- 값 이름이 소문자 · 언더스코어 표기예요. 다른 SDK 열거형(
BaseSDKMethod,BaseSDKResultCode등)과 표기 규칙이 다르므로 혼동하지 않도록 주의해야 해요. - 이 열거형에 없는 언어를 지정해야 하면 Base_SetLanguageEx 를 사용해야 해요. 이 함수는
StoveLanguage대신 문자열을 받아요. de·fr·es·pt4개 값은 v3.4.0 에서 추가되었어요. 나머지 값은 최초 릴리즈부터 제공되었어요.
See Also
StoveOverlayMode
종류 열거형 · 모듈 Base · 버전 3.4.1
Description
StoveOverlayMode 는 StovePCVietnamAgeRatingInfo 와 StovePCVietnamOverimmersionInfo 의 overlayMode 필드 값이에요. 베트남 연령등급 · 과몰입 오버레이를 화면에 어떻게 표시할지를 SDK 가 게임에 알려줘요.
Declaration
public enum StoveOverlayMode
{
SHOW = 0,
HIDE = 1,
EXPANDED = 2,
};
Enum Values
| Code | Name | Description |
|---|---|---|
| 0 | SHOW | 오버레이를 표시해요 |
| 1 | HIDE | 오버레이를 숨겨요 |
| 2 | EXPANDED | 오버레이를 확장된 형태로 표시해요 |
Example
using static Stove.PCSDK.Base;
void OnVietnamAgeRatingFinished(CallbackResult callbackResult, StovePCVietnamAgeRatingInfo vietnamAgeRatingInfo)
{
if (callbackResult.result.IsSuccessful())
{
if (vietnamAgeRatingInfo.overlayMode == StoveOverlayMode.SHOW)
{
// 오버레이를 표시하는 로직을 구현해 주세요.
}
}
}
Notes
- 이 값은 Base_VietnamAgeRatingNotification, Base_VietnamOverimmersionNotification 콜백으로 전달되는 값이며, 게임이 직접 생성하지 않아요.
See Also
- StovePCVietnamAgeRatingInfo
- StovePCVietnamOverimmersionInfo
- Base_VietnamAgeRatingNotification
- Base_VietnamOverimmersionNotification
StovePCBangStatus
종류 구조체 · 모듈 PCBang · 버전 3.0.2
Description
PCBang_CheckPCBangStatus 가 콜백으로 전달하는, 현재 PC방 상황과 상품 코드 정보를 담은 구조체예요.
이 구조체는 SDK 가 생성하여 콜백 인자로 전달해요.
Declaration
public struct StovePCBangStatus
{
public PCBangPremium premiumStatus;
public int pcBangSerialNumber;
public int productCode;
}
Members
| Name | Type | Access | Description |
|---|---|---|---|
premiumStatus | PCBangPremium | 읽기 | PC방 프리미엄 상태예요. |
pcBangSerialNumber | int | 읽기 | 사용자에게 할당된 PC방 좌석/세션 번호예요. |
productCode | int | 읽기 | 사용자가 현재 이용 가능한 PC방 상품 코드예요. |
Example
void OnCheckStatusFinished(CallbackResult result, StovePCBangStatus status)
{
if (result.result.IsSuccessful())
{
var premium = status.premiumStatus;
var psn = status.pcBangSerialNumber;
var productCode = status.productCode;
}
}
Notes
- PCBang_CheckPCBangStatus 의 콜백에만 전달돼요.
StovePCBangUserLogin과 필드 구성이 비슷하지만remainTime대신productCode를 가져요.- C# 구조체이므로 별도의 생성·해제 절차가 필요하지 않아요. GC 가 메모리를 관리해요.
See Also
StovePCBangUserLogin
종류 구조체 · 모듈 PCBang · 버전 3.0.2
Description
PCBang_UserLogin 이 로그인을 완료했을 때 onUserLoginFinished 콜백으로 전달되는 구조체예요.
이 구조체는 SDK 가 생성하여 콜백 인자로 전달해요.
Declaration
public struct StovePCBangUserLogin
{
public PCBangPremium premiumStatus;
public int pcBangSerialNumber;
public int remainTime;
}
Members
| Name | Type | Access | Description |
|---|---|---|---|
premiumStatus | PCBangPremium | 읽기 | PC방 프리미엄 상태예요. |
pcBangSerialNumber | int | 읽기 | 사용자에게 할당된 PC방 좌석/세션 번호예요. |
remainTime | int | 읽기 | 남은 유료 혜택 시간이에요(초 단위). |
Example
void OnUserLoginFinished(CallbackResult result, StovePCBangUserLogin login)
{
if (result.result.IsSuccessful())
{
var premium = login.premiumStatus;
var psn = login.pcBangSerialNumber;
var remainTime = login.remainTime;
}
}
Notes
- PCBang_UserLogin 의
onUserLoginFinished콜백에만 전달돼요. 이후 반복 전달되는 혜택 갱신 정보는 StovePCRefreshUserBenefits 로 별도 전달돼요. - C# 구조체이므로 별도의 생성·해제 절차가 필요하지 않아요. GC 가 메모리를 관리해요.
See Also
StovePCChargeInfo
종류 구조체 · 모듈 IAP · 버전 3.1.0
Description
StovePCPurchaseResult.chargeInfos 배열과 IAP_ConfirmPurchase 콜백의 chargeInfos 배열에 담기는 원소 타입으로, 구매 대가로 차감된 충전 재화의 종류와 금액을 나타내요.
SDK가 콜백으로 값을 채워서 돌려주는 출력 전용 구조체예요. 호출자가 직접 생성하지 않아요.
Declaration
public struct StovePCChargeInfo
Members
| Name | Type | Description |
|---|---|---|
chargeDeductVal | double | 차감된 금액이에요. |
chargeDisplayDeductVal | double | 화면에 표시할 차감 금액이에요. |
chargeType | int | 차감된 재화의 종류 코드예요. |
chargeTypeName | string | 차감된 재화의 종류 이름이에요. |
Example
using static Stove.PCSDK.IAP;
void OnConfirmPurchaseFinished(CallbackResult callbackResult, bool status, StovePCPurchasedProduct[] purchasedProducts, StovePCChargeInfo[] chargeInfos)
{
if (!callbackResult.result.IsSuccessful())
{
return;
}
foreach (var charge in chargeInfos)
{
// charge.chargeTypeName, charge.chargeDisplayDeductVal 등으로 차감 내역 표시 로직을 구현해 주세요.
}
}
Notes
- IAP_ConfirmPurchase의 콜백과 StovePCPurchaseResult 양쪽에서 공통으로 사용돼요.
See Also
StovePCFetchProductParam
종류 구조체 · 모듈 IAP · 버전 3.0.0.4
Description
IAP_FetchProducts / IAP_FetchProductsEx 호출 시 어느 카테고리의 상품을 몇 페이지 단위로 조회할지 지정하는 입력 구조체예요.
호출자가 값을 채워 API에 전달해요.
Declaration
public struct StovePCFetchProductParam
Members
| Name | Type | Required | Description |
|---|---|---|---|
categoryId | string | Y | 조회할 상품의 카테고리 ID예요. |
pageNumber | int | Y | 조회할 페이지 번호예요. |
pageSize | int | Y | 페이지당 조회할 상품 개수예요. |
Example
using static Stove.PCSDK.IAP;
StovePCFetchProductParam param = new StovePCFetchProductParam();
param.categoryId = "YOUR_CATEGORY_ID";
param.pageNumber = 1;
param.pageSize = 20;
IAP_FetchProducts(param, OnFetchProductsFinished);
Notes
- IAP_FetchProducts와 IAP_FetchProductsEx 둘 다 동일한 이 구조체를 입력으로 받아요. 두 API의 차이는 조회 결과 타입(StovePCProduct / StovePCProductEx)에 있어요.
See Also
StovePCGameProfile
종류 구조체 · 모듈 Base · 버전 3.0.0.4
Description
StovePCGameProfile 은 Base_SetGameProfile 호출 시 입력으로 전달하는 구조체예요. 게임이 값을 채워 넘겨요.
Declaration
public struct StovePCGameProfile
{
public string worldId;
public long characterNumber;
}
Members
| Name | Type | Description |
|---|---|---|
worldId | string | 월드 ID |
characterNumber | long | 캐릭터 번호 |
Example
using static Stove.PCSDK.Base;
StovePCGameProfile gameProfile = new StovePCGameProfile
{
worldId = "world_01",
characterNumber = 12345L
};
Result result = Base_SetGameProfile(gameProfile);
if (result.IsSuccessful())
{
// 성공 시 로직을 구현해 주세요.
}
else
{
// 실패 시 로직을 구현해 주세요.
}
Notes
- 없음
See Also
StovePCGds
종류 구조체 · 모듈 Base · 버전 3.0.0.4
Description
StovePCGds 는 Base_GetGds 가 채워 돌려주는 구조체예요. 호출자가 미리 선언한 변수를 ref 로 넘기면 SDK 가 값을 채워요.
Declaration
public struct StovePCGds
{
public bool isDefault;
public string nation;
public string regulation;
public string timeZone;
public int utcOffset;
public string language;
}
Members
| Name | Type | Description |
|---|---|---|
isDefault | bool | 기본값 여부 |
nation | string | 국가 |
regulation | string | 규제 |
timeZone | string | 시간대 |
utcOffset | int | UTC 오프셋 |
language | string | 언어 |
Example
using static Stove.PCSDK.Base;
StovePCGds gds = default;
Result result = Base_GetGds(ref gds);
if (result.IsSuccessful())
{
// gds.nation, gds.regulation 등을 사용하는 로직을 구현해 주세요.
}
else
{
// 실패 시 로직을 구현해 주세요.
}
Notes
- Base_GetGds 호출 전에는 값이 채워지지 않아요.
See Also
StovePCInitializeParam
종류 구조체 · 모듈 Base · 버전 3.0.0.4
Description
StovePCInitializeParam 은 Base_RestartAppIfNecessary, Base_RestartAppIfNecessaryAsync, Base_RestartAppIfNecessaryAsyncEx, Base_Initialize 호출 시 입력으로 전달하는 구조체예요. 게임이 값을 채워 넘겨요.
waitTimeMillisec, launchLauncher 등을 함께 넘겨야 하는 확장 초기화가 필요하면 StovePCInitializeParamEx2 를 사용해야 해요.
Declaration
public struct StovePCInitializeParam
{
public string environment;
public string gameId;
public string applicationKey;
}
Members
| Name | Type | Description |
|---|---|---|
environment | string | 접속할 서비스 환경 |
gameId | string | 게임 ID |
applicationKey | string | 애플리케이션 키 |
Example
using static Stove.PCSDK.Base;
StovePCInitializeParam initParam = new StovePCInitializeParam
{
environment = "real",
gameId = "your_game_id",
applicationKey = "your_application_key"
};
Base_Initialize(initParam, OnInitializeFinished);
Notes
- Base_InitializeEx 는 이 구조체를 받지 않아요. 콜백만 받아요.
- Base_RestartAppIfNecessaryAsyncEx2 는 이 구조체 대신 StovePCInitializeParamEx2 를 받아요.
See Also
StovePCInitializeParamEx2
종류 구조체 · 모듈 Base · 버전 3.4.1
Description
StovePCInitializeParamEx2 는 Base_RestartAppIfNecessaryAsyncEx2 가 받는 입력 구조체예요. StovePCInitializeParam 의 세 필드에 더해, 기존에 별도 매개변수로 넘기던 waitTimeMillisec · launchLauncher 와 platformName, 예약 필드 5개를 한 구조체로 통합해요.
Declaration
public struct StovePCInitializeParamEx2
{
public string environment;
public string gameId;
public string applicationKey;
public uint waitTimeMillisec;
public bool launchLauncher;
public string platformName;
public ulong reserved1;
public ulong reserved2;
public ulong reserved3;
public ulong reserved4;
public ulong reserved5;
}
Members
| Name | Type | Description |
|---|---|---|
environment | string | 접속할 서비스 환경 |
gameId | string | 게임 ID |
applicationKey | string | 애플리케이션 키 |
waitTimeMillisec | uint | 대기 시간(밀리초) |
launchLauncher | bool | 런처 실행 여부 |
platformName | string | 플랫폼 이름 |
reserved1 | ulong | 예약 필드. 사용하지 않아요 |
reserved2 | ulong | 예약 필드. 사용하지 않아요 |
reserved3 | ulong | 예약 필드. 사용하지 않아요 |
reserved4 | ulong | 예약 필드. 사용하지 않아요 |
reserved5 | ulong | 예약 필드. 사용하지 않아요 |
Example
using static Stove.PCSDK.Base;
StovePCInitializeParamEx2 initParam = new StovePCInitializeParamEx2
{
environment = "real",
gameId = "your_game_id",
applicationKey = "your_application_key",
waitTimeMillisec = 3000,
launchLauncher = true,
platformName = "your_platform_name"
};
Base_RestartAppIfNecessaryAsyncEx2(initParam, OnRestartAppIfNecessaryAsyncFinished);
Notes
reserved1~reserved5는 이름으로 보아 향후 확장을 위한 예약 필드이며, 현재 값을 채울 필요가 없어요.- Base_RestartAppIfNecessaryAsync, Base_RestartAppIfNecessaryAsyncEx 는 이 구조체 대신 StovePCInitializeParam 과 별도 매개변수(
waitTimeMillisec,launchLauncher)를 받아요.
See Also
StovePCInventoryItem
종류 구조체 · 모듈 IAP · 버전 3.0.0.4
Description
IAP_FetchInventory의 콜백으로 전달되는 StovePCInventoryItem[] 배열의 원소 타입이에요. 사용자가 보유한 인벤토리 아이템 하나를 나타내요.
SDK가 콜백으로 값을 채워서 돌려주는 출력 전용 구조체예요. 호출자가 직접 생성하지 않아요.
Declaration
public struct StovePCInventoryItem
Members
| Name | Type | Description |
|---|---|---|
transactionMasterNumber | long | 거래 마스터 번호예요. |
transactionDetailNumber | long | 거래 상세 번호예요. |
productId | long | 아이템에 대응하는 상품 ID예요. |
gameItemId | string | 게임 아이템 ID예요. |
productName | string | 상품 이름이에요. |
quantity | int | 보유 수량이에요. |
thumbnailUrl | string | 썸네일 이미지 URL이에요. |
Example
using static Stove.PCSDK.IAP;
void OnFetchInventoryFinished(CallbackResult callbackResult, StovePCInventoryItem[] inventoryItems)
{
if (!callbackResult.result.IsSuccessful())
{
return;
}
foreach (var item in inventoryItems)
{
// item.productName, item.quantity 등으로 인벤토리 UI 로직을 구현해 주세요.
}
}
Notes
- 없음.
See Also
StovePCLogSendParam
종류 구조체 · 모듈 Log · 버전 3.4.1
Description
Log_Send() 호출에 사용하는 파라미터예요. 사용자 식별 정보, 마케팅 연동 정보, 게임·서버 컨텍스트, 로그 그룹·본문까지 로그 한 건에 필요한 값을 담아요.
호출자가 값을 채운 뒤 Log_Send() 에 그대로 전달하는 구조체예요.
특정 로그 항목에서 값을 알 수 없는 필드는 기본값(숫자 0, 문자열
null/빈 값)으로 남겨 둘 수 있어요.
Declaration
public struct StovePCLogSendParam
{
public long auid;
public long cuid;
public string mktType1;
public string mktId1;
public string mktType2;
public string mktId2;
public string gameVersion;
public string logGroupId;
public string serverCd;
public string serverCdDet;
public string lvCd;
public string lvCdDet;
public string contents;
}
Members
사용자 식별
| Name | Type | Access | Description |
|---|---|---|---|
auid | long | 읽기·쓰기 | 계정 UID (STOVE 계정 식별자)예요. |
cuid | long | 읽기·쓰기 | 캐릭터 UID (게임 내 캐릭터 식별자)예요. |
마케팅 연동 정보
| Name | Type | Access | Description |
|---|---|---|---|
mktType1 | string | 읽기·쓰기 | 연동된 3rd-party 마케팅 서비스 이름 (슬롯 1)이에요. |
mktId1 | string | 읽기·쓰기 | 슬롯 1 마케팅 서비스가 발급한 식별자 (캠페인/리퍼러 ID)예요. |
mktType2 | string | 읽기·쓰기 | 연동된 3rd-party 마케팅 서비스 이름 (슬롯 2)예요. |
mktId2 | string | 읽기·쓰기 | 슬롯 2 마케팅 서비스가 발급한 식별자 (캠페인/리퍼러 ID)예요. |
mktType1/mktId1과mktType2/mktId2는 서로 독립된 두 슬롯이에요. 주/보조(fallback) 관계가 아니므로, 해당하는 슬롯만 채워요.
게임 · 서버 컨텍스트
| Name | Type | Access | Description |
|---|---|---|---|
gameVersion | string | 읽기·쓰기 | 게임 클라이언트 버전 문자열이에요 (예: "1.2.3"). |
serverCd | string | 읽기·쓰기 | 서버 코드 (사용자가 접속한 월드/지역 서버)예요. |
serverCdDet | string | 읽기·쓰기 | 서버 코드 상세 (serverCd 하위의 서브서버/채널/샤드)예요. |
lvCd | string | 읽기·쓰기 | 로그 기록 시점의 계정 레벨 값이에요. |
lvCdDet | string | 읽기·쓰기 | 로그 기록 시점의 캐릭터 레벨 값이에요. |
lvCdDet은 이름의 "Det" 접미사와 달리lvCd의 하위 항목이 아니에요.lvCd(계정 범위)와 대응하는 캐릭터 범위의 값이에요.
로그 그룹 · 본문
| Name | Type | Access | Description |
|---|---|---|---|
logGroupId | string | 읽기·쓰기 | 연관된 로그 항목들을 하나의 그룹으로 묶는 상관관계 ID예요. 같은 값을 가진 항목들은 로그 백엔드에서 하나의 논리적 집합으로 취급돼요. |
contents | string | 읽기·쓰기 | 위 타입 필드로 다루지 않는 값을 담는 자유 형식 로그 페이로드(보통 JSON 문서 문자열)이에요. 레거시 81plug 의 action_param 필드에 대응해요. |
Example
var logSendParam = new StovePCLogSendParam
{
auid = auid,
cuid = cuid,
gameVersion = "1.2.3",
contents = "{\"event\":\"login\"}"
};
Log_Send(logSendParam, OnLogSendFinished);
Notes
- Log_Send() 의 입력 파라미터로만 사용돼요.
- 값을 모르는 필드는 기본값(숫자 0, 문자열
null/빈 값)으로 남겨 둘 수 있어요. - C# 구조체이므로 별도의 생성·해제 절차가 필요하지 않아요. GC 가 메모리를 관리해요.
- 로그 기능은 모듈 전체가 3.4.1 에 추가되었어요.
See Also
StovePCOrderProduct
종류 구조체 · 모듈 IAP · 버전 3.0.0.4
Description
StovePCStartPurchaseParam.products 배열의 원소 타입으로, 구매를 요청할 상품 ID와 개수, 판매가를 지정하는 입력 구조체예요.
호출자가 값을 채워 IAP_StartPurchase / IAP_StartPurchaseEx에 전달해요.
Declaration
public struct StovePCOrderProduct
Members
| Name | Type | Required | Description |
|---|---|---|---|
productId | long | Y | 구매할 상품의 ID예요. |
salePrice | double | Y | 상품의 판매가예요. |
quantity | int | Y | 구매할 개수예요. |
Example
using static Stove.PCSDK.IAP;
StovePCOrderProduct orderProduct = new StovePCOrderProduct();
orderProduct.productId = 123456;
orderProduct.salePrice = 1000;
orderProduct.quantity = 1;
Notes
salePrice는 상품 조회 결과인 StovePCProduct.salePrice와 동일한 값을 전달해야 서버 측 가격 검증을 통과해요.
See Also
StovePCOverImmersion
종류 구조체 · 모듈 Base · 버전 3.0.0.4
Description
StovePCOverImmersion 은 Base_OverImmersionNotification 으로 등록한 OnOverImmersionFinished 콜백이 전달하는 구조체예요. SDK 가 값을 채워 콜백으로 넘겨요.
Declaration
public struct StovePCOverImmersion
{
public string warningMessage;
public int elapsedTimeInHours;
public int minExposureTimeInSeconds;
}
Members
| Name | Type | Description |
|---|---|---|
warningMessage | string | 경고 메시지 |
elapsedTimeInHours | int | 누적 이용 시간(시간 단위) |
minExposureTimeInSeconds | int | 최소 노출 시간(초 단위) |
Example
using static Stove.PCSDK.Base;
void OnOverImmersionFinished(CallbackResult callbackResult, StovePCOverImmersion overImmersion)
{
if (callbackResult.result.IsSuccessful())
{
// overImmersion.warningMessage 등을 사용해 경고를 표시하는 로직을 구현해 주세요.
}
}
Base_OverImmersionNotification(OnOverImmersionFinished);
Notes
- 이 구조체는 게임이 직접 생성하지 않고, Base_OverImmersionNotification 콜백으로만 전달돼요.
See Also
StovePCPaymentOperation
종류 열거형 · 모듈 IAP · 버전 3.0.0.4 · 폐기 예정
Description
폐기(deprecated)된
IAP_StartPayment전용 값이에요.IAP_StartPayment를 사용하지 않는다면 이 값도 사용하지 않아요.
StovePCPaymentOption.operation 필드에 대입해, IAP_StartPayment / IAP_StartPaymentEx 호출 시 결제 웹뷰 팝업의 동작 방식을 지정하는 값이에요.
성공/실패를 나타내는 값이 아니라 동작 모드를 나타내는 값이에요.
Declaration
public enum StovePCPaymentOperation
{
DEFAULT = 0,
WITH_WEBVIEW,
_MAX_COUNT
}
Enum Values
| Code | Name | Description |
|---|---|---|
| 0 | DEFAULT | 기본 동작으로 결제를 진행해요 |
| 1 | WITH_WEBVIEW | 웹뷰를 사용해 결제를 진행해요 |
| 2 | _MAX_COUNT | 사용하지 않아요 (값 개수를 나타내는 내부 경계값) |
Example
using static Stove.PCSDK.IAP;
StovePCPaymentOption option = new StovePCPaymentOption();
option.operation = StovePCPaymentOperation.WITH_WEBVIEW;
Notes
- StovePCPurchaseOperation, StovePCTermsOperation도 동일한 형태의 값을 가지지만 서로 다른 열거형이므로 섞어 쓸 수 없어요.
See Also
StovePCPaymentOption
종류 구조체 · 모듈 IAP · 버전 3.0.0.4 · 폐기 예정
Description
폐기(deprecated)된
IAP_StartPayment전용 구조체예요. 대신 StovePCPurchaseOption 을 사용하는 IAP_StartPurchase 를 사용하세요.
IAP_StartPayment / IAP_StartPaymentEx 호출 시 결제 웹뷰 팝업의 동작 방식과 위치·크기를 지정하는 입력 구조체예요.
호출자가 값을 채워 전달해요.
Declaration
public struct StovePCPaymentOption
Members
| Name | Type | Required | Description |
|---|---|---|---|
operation | StovePCPaymentOperation | Y | 결제 팝업의 동작 방식이에요. |
webviewMode | WebViewMode | Y | 웹뷰를 외부/내부 중 어떤 방식으로 띄울지 지정해요. |
webviewPosX | int | Y | 웹뷰 팝업의 X 좌표예요. |
webviewPosY | int | Y | 웹뷰 팝업의 Y 좌표예요. |
webviewWidth | int | Y | 웹뷰 팝업의 너비예요. |
webviewHeight | int | Y | 웹뷰 팝업의 높이예요. |
Example
using static Stove.PCSDK.Base;
using static Stove.PCSDK.IAP;
StovePCPaymentOption option = new StovePCPaymentOption();
option.operation = StovePCPaymentOperation.WITH_WEBVIEW;
option.webviewMode = WebViewMode.INTERNAL;
option.webviewPosX = 0;
option.webviewPosY = 0;
option.webviewWidth = 800;
option.webviewHeight = 600;
Notes
- StovePCPurchaseOption, StovePCTermsOption, StovePCWithdrawGameOption도 동일한 웹뷰 위치·크기 필드 구성을 가져요.
See Also
StovePCPopupDisallowed
종류 구조체 · 모듈 View · 버전 3.0.0.4
Description
View_SetPopupDisallowed의 입력 파라미터예요. 어떤 팝업을 며칠 동안 숨길지를 지정해요.
호출자가 필드를 채운 값을 만들어 View_SetPopupDisallowed에 그대로 전달해요. 값 타입(struct)이므로 GC가 관리하며, 별도로 생성·해제하는 API는 없어요.
Declaration
public struct StovePCPopupDisallowed
{
public uint popupId;
public uint days;
}
Members
| Name | Type | Description |
|---|---|---|
popupId | uint | 숨길 팝업의 식별자예요. |
days | uint | 팝업을 숨길 기간(일)이에요. |
Example
var popupDisallowed = new StovePCPopupDisallowed
{
popupId = 1001,
days = 7,
};
// View_SetPopupDisallowed(popupDisallowed, ...); 를 호출합니다.
Notes
- 값 타입(struct)이므로 API 호출이 끝난 뒤 별도로 해제할 필요가 없어요.
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의 콜백으로 전달되는 StovePCProduct[] 배열의 원소 타입이에요. 상품의 기본 정보, 가격·할인 정보, 수량·구매 제한 정보를 담아요. 31개 필드를 가져요.
StovePCProductEx는 이 구조체의 모든 필드에 구매 가능 여부 코드(purchaseAvailabilityCode)를 추가한 확장판이에요. IAP_FetchProducts는 StovePCProduct를, IAP_FetchProductsEx는 StovePCProductEx를 사용해요. 두 API 모두 입력 파라미터(StovePCFetchProductParam)는 동일하며 반환 타입만 달라요. IAP_FetchProducts는 폐기(deprecated)되었으므로, 실제 연동에는 항상 IAP_FetchProductsEx를 사용해 주세요.
SDK가 콜백으로 값을 채워서 돌려주는 출력 전용 구조체예요. 호출자가 직접 생성하지 않아요.
Declaration
public struct StovePCProduct
Members
기본 정보
| Name | Type | Description |
|---|---|---|
productId | long | 상품 ID예요. |
gameItemId | string | 게임 아이템 ID예요. |
name | string | 상품 이름이에요. |
description | string | 상품 설명이에요. |
quantity | int | 상품 하나당 지급 수량이에요. |
productTypeCode | ProductTypeCode | 상품 종류예요. |
categoryId | string | 상품이 속한 카테고리 ID예요. |
categoryName | string | 상품이 속한 카테고리 이름이에요. |
thumbnailUrl | string | 썸네일 이미지 URL이에요. |
가격·할인 정보
| Name | Type | Description |
|---|---|---|
currencyCode | string | 통화 코드예요. |
price | double | 정가예요. |
displayPrice | double | 화면에 표시할 정가예요. |
displayPriceString | string | 화면에 표시할 정가 문자열이에요. |
salePrice | double | 판매가예요. |
displaySalePrice | double | 화면에 표시할 판매가예요. |
displaySalePriceString | string | 화면에 표시할 판매가 문자열이에요. |
isDiscount | bool | 할인 중인지 여부예요. |
discountType | DiscountType | 할인 방식(정률/정액)이에요. |
discountTypeValue | int | 할인율 또는 할인 금액이에요. |
discountBeginDate | long | 할인 시작 시각이에요. |
discountEndDate | long | 할인 종료 시각이에요. |
수량·구매 제한 정보
| Name | Type | Description |
|---|---|---|
totalQuantity | int | 총 판매 가능 수량이에요. |
memberQuantity | int | 회원(계정) 단위 판매 가능 수량이에요. |
guidQuantity | int | GUID(캐릭터) 단위 판매 가능 수량이에요. |
canWithdraw | bool | 환불(취소) 가능한 상품인지 여부예요. |
purchasedAtLeastOnce | bool | 이 사용자가 한 번이라도 구매한 적이 있는지 여부예요. |
purchaseLimitTypeCode | PurchaseLimitTypeCode | 구매 제한 기준(회원/캐릭터 등)이에요. |
purchaseLimitCount | int | 구매 제한 개수예요. |
saleLimitCount | int | 판매 제한 개수예요. |
saleBeginDate | long | 판매 시작 시각이에요. |
saleEndDate | long | 판매 종료 시각이에요. |
Example
using static Stove.PCSDK.IAP;
void OnFetchProductsFinished(CallbackResult callbackResult, StovePCProduct[] products)
{
if (!callbackResult.result.IsSuccessful())
{
return;
}
foreach (var product in products)
{
// product.name, product.displaySalePriceString 등으로 상품 목록 UI 로직을 구현해 주세요.
}
}
Notes
isDiscount가true일 때만discountType,discountTypeValue,discountBeginDate,discountEndDate가 유효해요.- 구매 요청 시(StovePCOrderProduct)
salePrice를 그대로 전달해야 해요.
See Also
StovePCProductEx
종류 구조체 · 모듈 IAP · 버전 3.4.1
Description
IAP_FetchProductsEx의 콜백으로 전달되는 StovePCProductEx[] 배열의 원소 타입이에요. StovePCProduct의 31개 필드를 모두 그대로 가지며, purchaseAvailabilityCode 필드가 추가되어 총 32개 필드를 가져요.
StovePCProduct와 StovePCProductEx는 서로 다른 구조체이며 상호 변환되지 않아요. IAP_FetchProducts는 StovePCProduct를, IAP_FetchProductsEx는 StovePCProductEx를 사용해요. 두 API의 입력 파라미터(StovePCFetchProductParam)는 동일해요.
SDK가 콜백으로 값을 채워서 돌려주는 출력 전용 구조체예요. 호출자가 직접 생성하지 않아요.
Declaration
public struct StovePCProductEx
Members
기본 정보
| Name | Type | Description |
|---|---|---|
productId | long | 상품 ID예요. |
gameItemId | string | 게임 아이템 ID예요. |
name | string | 상품 이름이에요. |
description | string | 상품 설명이에요. |
quantity | int | 상품 하나당 지급 수량이에요. |
productTypeCode | ProductTypeCode | 상품 종류예요. |
categoryId | string | 상품이 속한 카테고리 ID예요. |
categoryName | string | 상품이 속한 카테고리 이름이에요. |
thumbnailUrl | string | 썸네일 이미지 URL이에요. |
가격·할인 정보
| Name | Type | Description |
|---|---|---|
currencyCode | string | 통화 코드예요. |
price | double | 정가예요. |
displayPrice | double | 화면에 표시할 정가예요. |
displayPriceString | string | 화면에 표시할 정가 문자열이에요. |
salePrice | double | 판매가예요. |
displaySalePrice | double | 화면에 표시할 판매가예요. |
displaySalePriceString | string | 화면에 표시할 판매가 문자열이에요. |
isDiscount | bool | 할인 중인지 여부예요. |
discountType | DiscountType | 할인 방식(정률/정액)이에요. |
discountTypeValue | int | 할인율 또는 할인 금액이에요. |
discountBeginDate | long | 할인 시작 시각이에요. |
discountEndDate | long | 할인 종료 시각이에요. |
수량·구매 제한 정보
| Name | Type | Description |
|---|---|---|
totalQuantity | int | 총 판매 가능 수량이에요. |
memberQuantity | int | 회원(계정) 단위 판매 가능 수량이에요. |
guidQuantity | int | GUID(캐릭터) 단위 판매 가능 수량이에요. |
canWithdraw | bool | 환불(취소) 가능한 상품인지 여부예요. |
purchasedAtLeastOnce | bool | 이 사용자가 한 번이라도 구매한 적이 있는지 여부예요. |
purchaseLimitTypeCode | PurchaseLimitTypeCode | 구매 제한 기준(회원/캐릭터 등)이에요. |
purchaseLimitCount | int | 구매 제한 개수예요. |
saleLimitCount | int | 판매 제한 개수예요. |
saleBeginDate | long | 판매 시작 시각이에요. |
saleEndDate | long | 판매 종료 시각이에요. |
구매 가능 여부 (Ex 확장 필드)
| Name | Type | Description |
|---|---|---|
purchaseAvailabilityCode | short | 이 상품을 현재 구매할 수 있는지 나타내는 코드예요. |
Example
using static Stove.PCSDK.IAP;
void OnFetchProductsExFinished(CallbackResult callbackResult, StovePCProductEx[] products)
{
if (!callbackResult.result.IsSuccessful())
{
return;
}
foreach (var product in products)
{
// product.purchaseAvailabilityCode 로 구매 가능 여부를 먼저 확인한 뒤
// product.name, product.displaySalePriceString 등으로 상품 목록 UI 로직을 구현해 주세요.
}
}
Notes
purchaseAvailabilityCode를 제외한 나머지 필드의 의미는 StovePCProduct와 동일해요.isDiscount가true일 때만discountType,discountTypeValue,discountBeginDate,discountEndDate가 유효해요.
See Also
StovePCPurchasedProduct
종류 구조체 · 모듈 IAP · 버전 3.1.0
Description
StovePCPurchaseResult.purchasedProducts 배열과 IAP_ConfirmPurchase 콜백의 purchasedProducts 배열에 담기는 원소 타입으로, 실제로 구매 처리된 상품의 상세 수량 정보를 나타내요.
SDK가 콜백으로 값을 채워서 돌려주는 출력 전용 구조체예요. 호출자가 직접 생성하지 않아요.
Declaration
public struct StovePCPurchasedProduct
Members
| Name | Type | Description |
|---|---|---|
transactionDetailNumber | long | 거래 상세 번호예요. |
productId | long | 구매된 상품의 ID예요. |
categoryId | string | 상품이 속한 카테고리 ID예요. |
totalQuantity | int | 지급된 총 수량이에요. |
memberQuantity | int | 회원(계정) 단위로 지급된 수량이에요. |
guidQuantity | int | GUID(캐릭터) 단위로 지급된 수량이에요. |
Example
using static Stove.PCSDK.IAP;
void OnConfirmPurchaseFinished(CallbackResult callbackResult, bool status, StovePCPurchasedProduct[] purchasedProducts, StovePCChargeInfo[] chargeInfos)
{
if (!callbackResult.result.IsSuccessful())
{
return;
}
foreach (var purchased in purchasedProducts)
{
// purchased.productId, purchased.totalQuantity 등으로 지급 처리 로직을 구현해 주세요.
}
}
Notes
- IAP_ConfirmPurchase의 콜백과 StovePCPurchaseResult 양쪽에서 공통으로 사용돼요.
See Also
StovePCPurchaseOperation
종류 열거형 · 모듈 IAP · 버전 3.0.0.4
Description
StovePCPurchaseOption.operation 필드에 대입해, IAP_StartPurchase / IAP_StartPurchaseEx 호출 시 구매 웹뷰 팝업의 동작 방식을 지정하는 값이에요.
성공/실패를 나타내는 값이 아니라 동작 모드를 나타내는 값이에요.
Declaration
public enum StovePCPurchaseOperation
{
DEFAULT = 0,
WITH_WEBVIEW,
WITH_WEBVIEW_AND_CONFIRM_RESULT,
_MAX_COUNT
}
Enum Values
| Code | Name | Description |
|---|---|---|
| 0 | DEFAULT | 기본 동작으로 구매를 진행해요 |
| 1 | WITH_WEBVIEW | 웹뷰를 사용해 구매를 진행해요 |
| 2 | WITH_WEBVIEW_AND_CONFIRM_RESULT | 웹뷰를 사용하고, 결과 확인 단계까지 포함해 구매를 진행해요 |
| 3 | _MAX_COUNT | 사용하지 않아요 (값 개수를 나타내는 내부 경계값) |
Example
using static Stove.PCSDK.IAP;
StovePCPurchaseOption option = new StovePCPurchaseOption();
option.operation = StovePCPurchaseOperation.WITH_WEBVIEW;
Notes
- StovePCPaymentOperation, StovePCTermsOperation도 동일한 형태(
DEFAULT/WITH_WEBVIEW/_MAX_COUNT)의 값을 가지지만 서로 다른 열거형이므로 섞어 쓸 수 없어요.
See Also
StovePCPurchaseOption
종류 구조체 · 모듈 IAP · 버전 3.0.0.4
Description
StovePCStartPurchaseParam.option 필드에 담겨, IAP_StartPurchase / IAP_StartPurchaseEx 호출 시 구매 웹뷰 팝업의 동작 방식과 위치·크기를 지정하는 입력 구조체예요.
호출자가 값을 채워 전달해요.
Declaration
public struct StovePCPurchaseOption
Members
| Name | Type | Required | Description |
|---|---|---|---|
operation | StovePCPurchaseOperation | Y | 구매 팝업의 동작 방식이에요. |
webviewMode | WebViewMode | Y | 웹뷰를 외부/내부 중 어떤 방식으로 띄울지 지정해요. |
webviewPosX | int | Y | 웹뷰 팝업의 X 좌표예요. |
webviewPosY | int | Y | 웹뷰 팝업의 Y 좌표예요. |
webviewWidth | int | Y | 웹뷰 팝업의 너비예요. |
webviewHeight | int | Y | 웹뷰 팝업의 높이예요. |
Example
using static Stove.PCSDK.Base;
using static Stove.PCSDK.IAP;
StovePCPurchaseOption option = new StovePCPurchaseOption();
option.operation = StovePCPurchaseOperation.WITH_WEBVIEW;
option.webviewMode = WebViewMode.INTERNAL;
option.webviewPosX = 0;
option.webviewPosY = 0;
option.webviewWidth = 800;
option.webviewHeight = 600;
Notes
- StovePCTermsOption, StovePCPaymentOption, StovePCWithdrawGameOption도 동일한 웹뷰 위치·크기 필드 구성을 가져요.
See Also
StovePCPurchaseResult
종류 구조체 · 모듈 IAP · 버전 3.0.0.4
Description
IAP_StartPurchase / IAP_StartPurchaseEx의 콜백으로 전달되는 구매 처리 결과예요. 거래 번호, 추가 결제창 필요 여부, 실제로 지급된 상품·차감된 재화 내역을 담아요.
SDK가 콜백으로 값을 채워서 돌려주는 출력 전용 구조체예요. 호출자가 직접 생성하지 않아요.
Declaration
public struct StovePCPurchaseResult
Members
| Name | Type | Description |
|---|---|---|
transactionMasterNumber | long | 거래 마스터 번호예요. |
transactionDetailNumbers | long[] | 거래 상세 번호 목록이에요. |
oneTimePaymentUrl | string | 추가 결제창을 띄워야 할 때 사용하는 1회용 결제 URL이에요. |
purchaseProgress | PurchaseProgress | 결제창을 추가로 띄워야 하는지를 나타내요. |
purchased | bool | 구매가 완료되었는지 여부예요. |
extraData | string | StovePCStartPurchaseParam.extraData로 전달했던 값이 그대로 되돌아와요. |
purchasedProducts | StovePCPurchasedProduct[] | 실제로 지급된 상품 목록이에요. |
chargeInfos | StovePCChargeInfo[] | 구매 대가로 차감된 재화 내역이에요. |
Example
using static Stove.PCSDK.IAP;
void OnStartPurchaseFinished(CallbackResult callbackResult, StovePCPurchaseResult purchase)
{
if (!callbackResult.result.IsSuccessful())
{
return;
}
if (purchase.purchaseProgress == PurchaseProgress.NEED_PAYMENT_WINDOW)
{
// purchase.oneTimePaymentUrl 로 결제창을 띄우는 로직을 구현해 주세요.
}
else if (purchase.purchased)
{
// purchase.purchasedProducts 로 지급 처리 로직을 구현해 주세요.
}
}
Notes
purchaseProgress가NEED_PAYMENT_WINDOW이면oneTimePaymentUrl을 확인해야 해요.- 이 구조체는 IAP_ConfirmPurchase의 결과와는 별개예요.
IAP_ConfirmPurchase는purchasedProducts,chargeInfos를 별도의 콜백 인자로 돌려줘요.
See Also
StovePCRefreshUserBenefits
종류 구조체 · 모듈 PCBang · 버전 3.0.2
Description
PCBang_UserLogin 의 로그인이 성공한 이후, 4분마다 onRefreshBenefitsFinished 콜백에 전달되는 구조체예요.
이 구조체는 SDK 가 생성하여 콜백 인자로 전달해요.
최초 로그인 결과(StovePCBangUserLogin)와는 별개의 구조체예요.
Declaration
public struct StovePCRefreshUserBenefits
{
public PCBangPremium premiumStatus;
public int remainTime;
}
Members
| Name | Type | Access | Description |
|---|---|---|---|
premiumStatus | PCBangPremium | 읽기 | PC방 프리미엄 상태예요. |
remainTime | int | 읽기 | 남은 유료 혜택 시간이에요(초 단위). |
Example
void OnRefreshBenefitsFinished(CallbackResult result, StovePCRefreshUserBenefits benefits)
{
if (result.result.IsSuccessful())
{
var premium = benefits.premiumStatus;
var remainTime = benefits.remainTime;
}
}
Notes
- PCBang_UserLogin 의
onRefreshBenefitsFinished콜백에만 4분마다 반복 전달돼요. StovePCBangUserLogin과 필드 구성이 비슷하지만pcBangSerialNumber필드는 없어요.- C# 구조체이므로 별도의 생성·해제 절차가 필요하지 않아요. GC 가 메모리를 관리해요.
See Also
StovePCShopCategory
종류 구조체 · 모듈 IAP · 버전 3.0.0.4
Description
IAP_FetchShopCategories의 콜백으로 전달되는 StovePCShopCategory[] 배열의 원소 타입이에요. 상점에 등록된 카테고리 하나를 나타내요.
SDK가 콜백으로 값을 채워서 돌려주는 출력 전용 구조체예요. 호출자가 직접 생성하지 않아요.
Declaration
public struct StovePCShopCategory
Members
| Name | Type | Description |
|---|---|---|
categoryId | string | 카테고리 ID예요. |
parentCategoryId | string | 상위 카테고리 ID예요. 최상위 카테고리이면 값이 없을 수 있어요. |
displayNumber | int | 카테고리 표시 순서예요. |
name | string | 카테고리 이름이에요. |
depth | int | 카테고리 트리에서의 깊이예요. |
Example
using static Stove.PCSDK.IAP;
void OnFetchShopCategoriesFinished(CallbackResult callbackResult, StovePCShopCategory[] shopCategories)
{
if (!callbackResult.result.IsSuccessful())
{
return;
}
foreach (var category in shopCategories)
{
// category.categoryId, category.name 등을 활용하는 로직을 구현해 주세요.
}
}
Notes
parentCategoryId와depth로 카테고리 트리 구조를 구성할 수 있어요.
See Also
StovePCShutdown
종류 구조체 · 모듈 Base · 버전 3.0.0.4
Description
StovePCShutdown 은 Base_ShutdownNotification 으로 등록한 OnShutdownFinished 콜백이 전달하는 구조체예요. SDK 가 값을 채워 콜백으로 넘겨요.
Declaration
public struct StovePCShutdown
{
public string shutdownMessage;
public int exposureTimeInSeconds;
public int inadvanceTimeInMinutes;
}
Members
| Name | Type | Description |
|---|---|---|
shutdownMessage | string | 셧다운 안내 메시지 |
exposureTimeInSeconds | int | 노출 시간(초 단위) |
inadvanceTimeInMinutes | int | 셧다운까지 남은 사전 안내 시간(분 단위) |
Example
using static Stove.PCSDK.Base;
void OnShutdownFinished(CallbackResult callbackResult, StovePCShutdown shutdown)
{
if (callbackResult.result.IsSuccessful())
{
// shutdown.shutdownMessage 등을 사용해 안내를 표시하는 로직을 구현해 주세요.
}
}
Base_ShutdownNotification(OnShutdownFinished);
Notes
- 이 구조체는 게임이 직접 생성하지 않고, Base_ShutdownNotification 콜백으로만 전달돼요.
- 셧다운 적용 대상 계정이면 해외에서도 이 콜백이 호출돼요. 한국 전용 기능이 아니에요.
See Also
StovePCSignin
종류 구조체 · 모듈 Base · 버전 3.0.0.4
Description
StovePCSignin 은 Base_GetSignin 이 채워 돌려주는 구조체예요. 호출자가 미리 선언한 변수를 ref 로 넘기면 SDK 가 값을 채워요.
Declaration
public struct StovePCSignin
{
public bool personVerify;
public bool emailVerify;
public string nationality;
public string providerCode;
public int accountType;
}
Members
| Name | Type | Description |
|---|---|---|
personVerify | bool | 본인 인증 여부 |
emailVerify | bool | 이메일 인증 여부 |
nationality | string | 국적 |
providerCode | string | 로그인 제공자 코드 |
accountType | int | 계정 유형 |
Example
using static Stove.PCSDK.Base;
StovePCSignin signin = default;
Result result = Base_GetSignin(ref signin);
if (result.IsSuccessful())
{
// signin.personVerify, signin.nationality 등을 사용하는 로직을 구현해 주세요.
}
else
{
// 실패 시 로직을 구현해 주세요.
}
Notes
- Base_GetSignin 호출 전에는 값이 채워지지 않아요.
See Also
StovePCStartPurchaseParam
종류 구조체 · 모듈 IAP · 버전 3.0.0.4
Description
IAP_StartPurchase / IAP_StartPurchaseEx 호출 시 구매할 상품 목록, 팝업 옵션, 서비스 거래 번호, 부가 데이터를 지정하는 입력 구조체예요.
호출자가 값을 채워 전달해요.
Declaration
public struct StovePCStartPurchaseParam
Members
| Name | Type | Required | Description |
|---|---|---|---|
products | StovePCOrderProduct[] | Y | 구매할 상품 목록이에요. |
productsSize | uint | Y | products 배열의 개수예요. |
option | StovePCPurchaseOption | Y | 구매 팝업의 동작 방식과 위치·크기예요. |
serviceTxnNo | string | Y | 게임(서비스) 측에서 발급한 거래 번호예요. |
extraData | string | Y | 게임에서 자유롭게 사용할 부가 데이터예요. 구매 완료 시 StovePCPurchaseResult.extraData로 그대로 되돌아와요. |
Example
using static Stove.PCSDK.Base;
using static Stove.PCSDK.IAP;
StovePCOrderProduct orderProduct = new StovePCOrderProduct();
orderProduct.productId = 123456;
orderProduct.salePrice = 1000;
orderProduct.quantity = 1;
StovePCPurchaseOption option = new StovePCPurchaseOption();
option.operation = StovePCPurchaseOperation.WITH_WEBVIEW;
option.webviewMode = WebViewMode.INTERNAL;
option.webviewWidth = 800;
option.webviewHeight = 600;
StovePCStartPurchaseParam purchaseParam = new StovePCStartPurchaseParam();
purchaseParam.products = new StovePCOrderProduct[] { orderProduct };
purchaseParam.productsSize = 1;
purchaseParam.option = option;
purchaseParam.serviceTxnNo = "YOUR_SERVICE_TXN_NO";
purchaseParam.extraData = "";
IAP_StartPurchase(purchaseParam, OnStartPurchaseFinished);
Notes
productsSize는products배열의 실제 길이와 일치해야 해요.extraData는 구매 완료 콜백까지 그대로 유지되어 되돌아오므로, 요청과 결과를 연결하는 용도로 활용할 수 있어요.
See Also
StovePCTermsOperation
종류 열거형 · 모듈 IAP · 버전 3.0.0.4
Description
StovePCTermsOption.operation 필드에 대입해, IAP_FetchTermsAgreement / IAP_FetchTermsAgreementEx 호출 시 약관 동의 웹뷰 팝업의 동작 방식을 지정하는 값이에요.
성공/실패를 나타내는 값이 아니라 동작 모드를 나타내는 값이에요.
Declaration
public enum StovePCTermsOperation
{
DEFAULT = 0,
WITH_WEBVIEW,
_MAX_COUNT
}
Enum Values
| Code | Name | Description |
|---|---|---|
| 0 | DEFAULT | 기본 동작으로 약관 동의 여부를 조회해요 |
| 1 | WITH_WEBVIEW | 웹뷰를 사용해 약관 동의를 진행해요 |
| 2 | _MAX_COUNT | 사용하지 않아요 (값 개수를 나타내는 내부 경계값) |
Example
using static Stove.PCSDK.IAP;
StovePCTermsOption option = new StovePCTermsOption();
option.operation = StovePCTermsOperation.WITH_WEBVIEW;
Notes
- StovePCPurchaseOperation, StovePCPaymentOperation도 동일한 형태의 값을 가지지만 서로 다른 열거형이므로 섞어 쓸 수 없어요.
See Also
StovePCTermsOption
종류 구조체 · 모듈 IAP · 버전 3.0.0.4
Description
IAP_FetchTermsAgreement / IAP_FetchTermsAgreementEx 호출 시 약관 동의 웹뷰 팝업의 동작 방식과 위치·크기를 지정하는 입력 구조체예요.
호출자가 값을 채워 전달해요.
Declaration
public struct StovePCTermsOption
Members
| Name | Type | Required | Description |
|---|---|---|---|
operation | StovePCTermsOperation | Y | 약관 동의 팝업의 동작 방식이에요. |
webviewMode | WebViewMode | Y | 웹뷰를 외부/내부 중 어떤 방식으로 띄울지 지정해요. |
webviewPosX | int | Y | 웹뷰 팝업의 X 좌표예요. |
webviewPosY | int | Y | 웹뷰 팝업의 Y 좌표예요. |
webviewWidth | int | Y | 웹뷰 팝업의 너비예요. |
webviewHeight | int | Y | 웹뷰 팝업의 높이예요. |
Example
using static Stove.PCSDK.Base;
using static Stove.PCSDK.IAP;
StovePCTermsOption option = new StovePCTermsOption();
option.operation = StovePCTermsOperation.WITH_WEBVIEW;
option.webviewMode = WebViewMode.INTERNAL;
option.webviewPosX = 0;
option.webviewPosY = 0;
option.webviewWidth = 800;
option.webviewHeight = 600;
Notes
- StovePCPurchaseOption, StovePCPaymentOption, StovePCWithdrawGameOption도 동일한 웹뷰 위치·크기 필드 구성을 가져요.
See Also
StovePCToken
종류 구조체 · 모듈 Base · 버전 3.0.0.4
Description
StovePCToken 은 Base_AccessTokenRenewed 로 등록한 OnRenewTokenFinished 콜백이 전달하는 구조체예요. SDK 가 값을 채워 콜백으로 넘겨요.
Declaration
public struct StovePCToken
{
public string accessToken;
public int expireIn;
}
Members
| Name | Type | Description |
|---|---|---|
accessToken | string | 갱신된 액세스 토큰 |
expireIn | int | 만료 시간 |
Example
using static Stove.PCSDK.Base;
void OnRenewTokenFinished(CallbackResult callbackResult, StovePCToken token)
{
if (callbackResult.result.IsSuccessful())
{
// token.accessToken, token.expireIn 을 사용하는 로직을 구현해 주세요.
}
}
Base_AccessTokenRenewed(OnRenewTokenFinished);
Notes
- Base_GetAccessToken 은 이 구조체가 아니라 문자열을 직접 돌려줘요.
StovePCToken은 토큰이 갱신되는 시점에 콜백으로만 전달돼요.
See Also
StovePCTraceHint
종류 구조체 · 모듈 Base · 버전 3.0.0.4 · 폐기 예정
Description
폐기(deprecated)된 기능이에요. 신규 인터페이스에서도 제공하지 않아요.
StovePCTraceHint 는 Base_GetTraceHint 가 채워 돌려주는 구조체예요. 호출자가 미리 선언한 변수를 ref 로 넘기면 SDK 가 값을 채워요.
Declaration
public struct StovePCTraceHint
{
public string sessionId;
public string refSessionId;
public string uuid;
public string serviceProtocol;
public string refSourceType;
}
Members
| Name | Type | Description |
|---|---|---|
sessionId | string | 세션 ID |
refSessionId | string | 참조 세션 ID |
uuid | string | UUID |
serviceProtocol | string | 서비스 프로토콜 |
refSourceType | string | 참조 소스 타입 |
Example
using static Stove.PCSDK.Base;
StovePCTraceHint traceHint = default;
Result result = Base_GetTraceHint(ref traceHint);
if (result.IsSuccessful())
{
// traceHint.sessionId 등을 로그에 남기는 로직을 구현해 주세요.
}
else
{
// 실패 시 로직을 구현해 주세요.
}
Notes
- Base_GetTraceHint 호출 전에는 값이 채워지지 않아요.
See Also
StovePCUser
종류 구조체 · 모듈 Base · 버전 3.0.0.4
Description
StovePCUser 는 Base_GetUser 가 채워 돌려주는 구조체예요. 호출자가 미리 선언한 변수를 ref 로 넘기면 SDK 가 값을 채워요.
Declaration
public struct StovePCUser
{
public string nickname;
public ulong gameUserId;
}
Members
| Name | Type | Description |
|---|---|---|
nickname | string | 닉네임 |
gameUserId | ulong | 게임 유저 ID |
Example
using static Stove.PCSDK.Base;
StovePCUser user = default;
Result result = Base_GetUser(ref user);
if (result.IsSuccessful())
{
// user.nickname, user.gameUserId 를 사용하는 로직을 구현해 주세요.
}
else
{
// 실패 시 로직을 구현해 주세요.
}
Notes
- Base_GetUser 호출 전에는 값이 채워지지 않아요.
See Also
StovePCVietnamAgeRatingInfo
종류 구조체 · 모듈 Base · 버전 3.4.1
Description
StovePCVietnamAgeRatingInfo 는 Base_VietnamAgeRatingNotification 으로 등록한 OnVietnamAgeRatingFinished 콜백이 전달하는 구조체예요. SDK 가 값을 채워 콜백으로 넘겨요.
Declaration
public struct StovePCVietnamAgeRatingInfo
{
public StoveOverlayMode overlayMode;
public int overlayType;
public float overlayScale;
public float overlayOpacity;
public int ageRating;
public string message;
public float displayPositionX;
public float displayPositionY;
public string language;
}
Members
| Name | Type | Description |
|---|---|---|
overlayMode | StoveOverlayMode | 오버레이 표시 모드 |
overlayType | int | 오버레이 타입 |
overlayScale | float | 오버레이 크기 비율 |
overlayOpacity | float | 오버레이 투명도 |
ageRating | int | 연령등급 |
message | string | 표시 메시지 |
displayPositionX | float | 표시 위치 X 좌표 |
displayPositionY | float | 표시 위치 Y 좌표 |
language | string | 언어 |
Example
using static Stove.PCSDK.Base;
void OnVietnamAgeRatingFinished(CallbackResult callbackResult, StovePCVietnamAgeRatingInfo vietnamAgeRatingInfo)
{
if (callbackResult.result.IsSuccessful())
{
// vietnamAgeRatingInfo.message, vietnamAgeRatingInfo.ageRating 등으로
// 오버레이를 그리는 로직을 구현해 주세요.
}
}
Base_VietnamAgeRatingNotification(OnVietnamAgeRatingFinished);
Notes
- 이 구조체는 게임이 직접 생성하지 않고, Base_VietnamAgeRatingNotification 콜백으로만 전달돼요.
- 이 콜백은 렌더링이 가능한 시점 이후에 등록해야 해요.
See Also
StovePCVietnamOverimmersionInfo
종류 구조체 · 모듈 Base · 버전 3.4.1
Description
StovePCVietnamOverimmersionInfo 는 Base_VietnamOverimmersionNotification 으로 등록한 OnVietnamOverimmersionFinished 콜백이 전달하는 구조체예요. SDK 가 값을 채워 콜백으로 넘겨요.
Declaration
public struct StovePCVietnamOverimmersionInfo
{
public StoveOverlayMode overlayMode;
public int overlayType;
public float overlayScale;
public float overlayOpacity;
public int ageRating;
public string message;
public string styledMessage;
public int elapsedTime;
public int exposureTime;
public float expandAnimationTime;
public float displayPositionX;
public float displayPositionY;
public string language;
}
Members
| Name | Type | Description |
|---|---|---|
overlayMode | StoveOverlayMode | 오버레이 표시 모드 |
overlayType | int | 오버레이 타입 |
overlayScale | float | 오버레이 크기 비율 |
overlayOpacity | float | 오버레이 투명도 |
ageRating | int | 연령등급 |
message | string | 표시 메시지 |
styledMessage | string | 스타일이 적용된 표시 메시지 |
elapsedTime | int | 누적 이용 시간 |
exposureTime | int | 노출 시간 |
expandAnimationTime | float | 확장 애니메이션 시간 |
displayPositionX | float | 표시 위치 X 좌표 |
displayPositionY | float | 표시 위치 Y 좌표 |
language | string | 언어 |
Example
using static Stove.PCSDK.Base;
void OnVietnamOverimmersionFinished(CallbackResult callbackResult, StovePCVietnamOverimmersionInfo vietnamOverimmersionInfo)
{
if (callbackResult.result.IsSuccessful())
{
// vietnamOverimmersionInfo.message, vietnamOverimmersionInfo.styledMessage 등으로
// 오버레이를 그리는 로직을 구현해 주세요.
}
}
Base_VietnamOverimmersionNotification(OnVietnamOverimmersionFinished);
Notes
- 이 구조체는 게임이 직접 생성하지 않고, Base_VietnamOverimmersionNotification 콜백으로만 전달돼요.
- 이 콜백은 렌더링이 가능한 시점 이후에 등록해야 해요.
See Also
StovePCVoidedPurchase
종류 구조체 · 모듈 IAP · 버전 3.0.0.4 · 폐기 예정
Description
환불 조회 기능은 폐기(deprecated)된 기능이에요. 신규 인터페이스에서는 제공하지 않아요.
IAP_FetchVoidedPurchases의 콜백으로 전달되는 StovePCVoidedPurchase[] 배열의 원소 타입이에요. 마켓에서 취소(환불) 처리된 구매 내역 하나를 나타내요.
SDK가 콜백으로 값을 채워서 돌려주는 출력 전용 구조체예요. 호출자가 직접 생성하지 않아요.
Declaration
public struct StovePCVoidedPurchase
Members
| Name | Type | Description |
|---|---|---|
tid | long | 거래 ID예요. |
marketCode | string | 구매가 발생한 마켓 코드예요. |
productId | string | 상품 ID예요. |
marketProductId | string | 마켓에서 사용하는 상품 ID예요. |
userId | string | 사용자 ID예요. |
characterNo | long | 캐릭터 번호예요. |
purchaseMillis | long | 구매 시각(밀리초)예요. |
voidedMillis | long | 취소 처리된 시각(밀리초)예요. |
Example
using static Stove.PCSDK.IAP;
void OnFetchVoidedPurchasesFinished(CallbackResult callbackResult, StovePCVoidedPurchase[] voidedPurchase)
{
if (!callbackResult.result.IsSuccessful())
{
return;
}
foreach (var voided in voidedPurchase)
{
// voided.productId, voided.voidedMillis 등으로 취소된 지급 회수 로직을 구현해 주세요.
}
}
Notes
- 마켓별 필터링과 추가 필드 조회를 제공하던 IAP_FetchVoidedPurchasesEx · StovePCVoidedPurchasesEx는 현재 SDK 에서 제공하지 않아요.
See Also
StovePCVoidedPurchasesEx
종류 구조체 · 모듈 IAP · 버전 3.4.1 · 폐기 예정
Description
이 타입은 현재 SDK 에서 제공하지 않아요. 이 구조체를 사용하던
IAP_FetchVoidedPurchasesEx()도 함께 제공되지 않아요. 환불 조회 기능 자체도 폐기(deprecated)된 기능이에요.
IAP_FetchVoidedPurchasesEx의 콜백으로 전달되는 StovePCVoidedPurchasesEx[] 배열의 원소 타입이에요. StovePCVoidedPurchase와 같은 역할을 하지만, 회원 번호(memberNo)·GUID·마켓 거래 ID 등 더 많은 필드를 제공해요.
SDK가 콜백으로 값을 채워서 돌려주는 출력 전용 구조체예요. 호출자가 직접 생성하지 않아요.
Declaration
public struct StovePCVoidedPurchasesEx
Members
| Name | Type | Description |
|---|---|---|
tid | long | 거래 ID예요. |
marketCode | string | 구매가 발생한 마켓 코드예요. |
memberNo | long | 회원 번호예요. |
guid | string | GUID(캐릭터 식별자)예요. |
characterNo | long | 캐릭터 번호예요. |
inserviceItemId | string | 서비스 내 아이템 ID예요. |
marketItemId | string | 마켓에서 사용하는 아이템 ID예요. |
marketTid | string | 마켓 측 거래 ID예요. |
marketUserId | string | 마켓 측 사용자 ID예요. |
purchaseDt | long | 구매 시각이에요. |
voidedDt | long | 취소 처리된 시각이에요. |
Example
using static Stove.PCSDK.IAP;
void OnFetchVoidedPurchasesExFinished(CallbackResult callbackResult, StovePCVoidedPurchasesEx[] voidedPurchase)
{
if (!callbackResult.result.IsSuccessful())
{
return;
}
foreach (var voided in voidedPurchase)
{
// voided.marketTid, voided.voidedDt 등으로 취소된 지급 회수 로직을 구현해 주세요.
}
}
Notes
- StovePCVoidedPurchase와 필드 구성이 다르며 상호 변환되지 않아요. IAP_FetchVoidedPurchasesEx 전용이에요.
See Also
StovePCVoidedPurchasesMarketType
종류 열거형 · 모듈 IAP · 버전 3.4.1 · 폐기 예정
Description
이 타입은 현재 SDK 에서 제공하지 않아요. 이 값을 사용하던
IAP_FetchVoidedPurchasesEx()도 함께 제공되지 않아요. 환불 조회 기능 자체도 폐기(deprecated)된 기능이에요.
IAP_FetchVoidedPurchasesEx의 marketType 파라미터에 전달해, 어느 마켓에서 발생한 구매 취소 내역을 조회할지를 지정해요.
Declaration
public enum StovePCVoidedPurchasesMarketType
{
ALL = 0,
STEAM = 1,
GOOGLE_PLAY = 2,
APPLE_APP_STORE = 3
}
Enum Values
| Code | Name | Description |
|---|---|---|
| 0 | ALL | 모든 마켓의 취소 내역을 조회해요 |
| 1 | STEAM | Steam 마켓의 취소 내역만 조회해요 |
| 2 | GOOGLE_PLAY | Google Play 마켓의 취소 내역만 조회해요 |
| 3 | APPLE_APP_STORE | Apple App Store 마켓의 취소 내역만 조회해요 |
Example
using static Stove.PCSDK.IAP;
IAP_FetchVoidedPurchasesEx(StovePCVoidedPurchasesMarketType.STEAM, OnFetchVoidedPurchasesExFinished);
Notes
- 3.4.1 이전의 IAP_FetchVoidedPurchases는 마켓을 구분하지 않고 전체 내역만 조회해요.
See Also
View_AutoPopup
종류 함수 · 모듈 View · 버전 3.0.0.4
Description
WebView를 이용하여 AutoPopup을 실행해요. mode로 지정한 방식(외부 브라우저 또는 Internal Style)으로 WebView가 표시돼요.
호출 전에 View_Initialize 또는 View_InitializeWithWndInfo로 초기화가 되어 있어야 해요.
Declaration
public static void View_AutoPopup(WebViewMode mode, OnPopupFinished onFinished);
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
mode | WebViewMode | Y | WebView를 실행하는 모드예요. |
onFinished | OnPopupFinished | Y | WebView 실행에 대한 결과를 넘겨받는 콜백 함수예요. |
Returns
없음
Callback
public delegate void OnPopupFinished(CallbackResult result);
| Name | Type | Description |
|---|---|---|
result | CallbackResult | 콜백 결과 값이에요. |
onFinished는 WebView 실행 결과가 나왔을 때 1회 전달돼요. 콜백은 Base_RunCallback()을 호출한 스레드에서 실행돼요.
Error Codes
| Code | Name | Description | Show to User | In-Game Message |
|---|---|---|---|---|
| 0 | SUCCESS | 성공 | x | |
| 17 | NOT_INITIALIZED | 팝업 기능이 초기화되어 있지 않음. View_Initialize를 먼저 호출해야 해요 | x | |
| 80 | VIEWUI_NOT_INITIALIZED | 팝업을 표시할 웹뷰 초기화에 실패함 | x | |
| 82 | WEBVIEW_CREATE_FAIL | 팝업 웹뷰 생성에 실패함 | x | |
| 83 | WEBVIEW_LOAD_URL_FAIL | 팝업 웹뷰에서 페이지를 불러오지 못함 | x | |
| 84 | WEBVIEW_CLOSE_ALL_FAIL | 팝업 생성 전 기존에 열려 있던 팝업을 모두 닫는 데 실패함 | x | |
| 87 | NO_POPUP_DATA | 표시할 팝업 설정 정보가 없음 | O | 팝업 설정 정보가 존재하지 않아 표시할 창이 없습니다. [확인] |
| 253 | UNMANAGED_EXCEPTION | 네이티브 SDK 내부에서 예외가 발생함 | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
| 254 | MANAGED_EXCEPTION | C# 래퍼 내부(마샬링 등)에서 예외가 발생함. CallbackResult.result.exceptionMessage 를 확인해야 해요 | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
전체 목록은 ViewSDKResultCode 를 참조하세요.
Example
using static Stove.PCSDK.View;
using static Stove.PCSDK.Base;
void OnAutoPopupFinished(CallbackResult callbackResult)
{
if (callbackResult.result.IsSuccessful())
{
// 성공 시 로직을 구현해 주세요.
}
else
{
// 실패 시 로직을 구현해 주세요.
}
}
View_AutoPopup(WebViewMode.INTERNAL, OnAutoPopupFinished);
Notes
- 팝업의 네이티브 리소스가 해제되는 시점까지 함께 통지받으려면 View_AutoPopupEx를 사용해요.
- 화면에 표시된 팝업(들)을 한꺼번에 닫으려면 View_CloseAllPopups를 사용해요.
See Also
View_AutoPopupEx
종류 함수 · 모듈 View · 버전 3.3.4
Description
WebView를 이용하여 AutoPopup을 실행해요. View_AutoPopup과 동작은 같지만, 팝업의 네이티브 리소스가 완전히 해제되었을 때 전달되는 onDestroy 콜백을 추가로 받을 수 있어요.
호출 전에 View_Initialize 또는 View_InitializeWithWndInfo로 초기화가 되어 있어야 해요.
Declaration
public static void View_AutoPopupEx(WebViewMode mode, OnPopupFinished onFinished, OnViewPopupDestroyFinished onDestroy);
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
mode | WebViewMode | Y | WebView를 실행하는 모드예요. |
onFinished | OnPopupFinished | Y | WebView 실행에 대한 결과를 넘겨받는 콜백 함수예요. |
onDestroy | OnViewPopupDestroyFinished | N | 팝업을 닫을 시 응답받는 콜백 함수예요. |
Returns
없음
Callback
public delegate void OnPopupFinished(CallbackResult result);
public delegate void OnViewPopupDestroyFinished(CallbackResult result);
| Name | Type | Description |
|---|---|---|
result | CallbackResult | 콜백 결과 값이에요. |
onFinished는 WebView 실행 결과가 나왔을 때 1회 전달돼요. onDestroy는 팝업의 네이티브 리소스가 완전히 해제되었을 때 1회 전달돼요. 두 콜백 모두 Base_RunCallback()을 호출한 스레드에서 실행돼요.
Error Codes
| Code | Name | Description | Show to User | In-Game Message |
|---|---|---|---|---|
| 0 | SUCCESS | 성공 | x | |
| 17 | NOT_INITIALIZED | 팝업 기능이 초기화되어 있지 않음. View_Initialize를 먼저 호출해야 해요 | x | |
| 80 | VIEWUI_NOT_INITIALIZED | 팝업을 표시할 웹뷰 초기화에 실패함 | x | |
| 82 | WEBVIEW_CREATE_FAIL | 팝업 웹뷰 생성에 실패함 | x | |
| 83 | WEBVIEW_LOAD_URL_FAIL | 팝업 웹뷰에서 페이지를 불러오지 못함 | x | |
| 84 | WEBVIEW_CLOSE_ALL_FAIL | 팝업 생성 전 기존에 열려 있던 팝업을 모두 닫는 데 실패함 | x | |
| 85 | WEBVIEW_CLOSE_FAIL | 팝업을 닫는 데 실패함(onDestroy 콜백으로 전달됨) | x | |
| 87 | NO_POPUP_DATA | 표시할 팝업 설정 정보가 없음 | O | 팝업 설정 정보가 존재하지 않아 표시할 창이 없습니다. [확인] |
| 253 | UNMANAGED_EXCEPTION | 네이티브 SDK 내부에서 예외가 발생함 | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
| 254 | MANAGED_EXCEPTION | C# 래퍼 내부(마샬링 등)에서 예외가 발생함. CallbackResult.result.exceptionMessage 를 확인해야 해요 | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
전체 목록은 ViewSDKResultCode 를 참조하세요.
Example
using static Stove.PCSDK.View;
using static Stove.PCSDK.Base;
void OnAutoPopupFinished(CallbackResult callbackResult)
{
if (callbackResult.result.IsSuccessful())
{
// 성공 시 로직을 구현해 주세요.
}
else
{
// 실패 시 로직을 구현해 주세요.
}
}
void OnAutoPopupDestroyed(CallbackResult callbackResult)
{
// 팝업 리소스 해제가 끝난 뒤 로직을 구현해 주세요.
}
View_AutoPopupEx(WebViewMode.INTERNAL, OnAutoPopupFinished, OnAutoPopupDestroyed);
Notes
- View_AutoPopup과 달리 팝업 종료(destroy) 통지를 받는
onDestroy콜백을 추가로 받아요. - 화면에 표시된 팝업(들)을 한꺼번에 닫으려면 View_CloseAllPopups를 사용해요.
See Also
View_CloseAllPopups
종류 함수 · 모듈 View · 버전 3.1.3
Description
팝업 기능을 통해 열린 모든 팝업을 닫아요.
Declaration
public static Result View_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 | 팝업 기능이 초기화되어 있지 않음 | x | |
| 80 | VIEWUI_NOT_INITIALIZED | 닫을 팝업의 웹뷰가 초기화되어 있지 않음 | x | |
| 84 | WEBVIEW_CLOSE_ALL_FAIL | 열려 있는 팝업을 모두 닫는 데 실패함 | x | |
| 253 | UNMANAGED_EXCEPTION | 네이티브 SDK 내부에서 예외가 발생함 | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
| 254 | MANAGED_EXCEPTION | C# 래퍼 내부(마샬링 등)에서 예외가 발생함. Result.exceptionMessage 를 확인해야 해요 | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
전체 목록은 ViewSDKResultCode 를 참조하세요.
Example
using static Stove.PCSDK.View;
Result result = View_CloseAllPopups();
if (result.IsSuccessful())
{
// 성공 시 로직을 구현해 주세요.
}
else
{
// 실패 시 로직을 구현해 주세요.
}
Notes
- 이 함수는 동기 함수이며 콜백을 받지 않아요.
- View_AutoPopup, View_ManualPopup, View_NewsPopup, View_CouponPopup 등으로 열린 팝업을 한꺼번에 닫는 용도로 사용해요.
See Also
View_CouponPopup
종류 함수 · 모듈 View · 버전 3.0.0.4
Description
WebView를 이용하여 CouponPopup을 실행해요.
호출 전에 View_Initialize 또는 View_InitializeWithWndInfo로 초기화가 되어 있어야 해요.
Declaration
public static void View_CouponPopup(WebViewMode mode, OnPopupFinished onFinished);
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
mode | WebViewMode | Y | WebView를 실행하는 모드예요. |
onFinished | OnPopupFinished | Y | WebView 실행에 대한 결과를 넘겨받는 콜백 함수예요. |
Returns
없음
Callback
public delegate void OnPopupFinished(CallbackResult result);
| Name | Type | Description |
|---|---|---|
result | CallbackResult | 콜백 결과 값이에요. |
onFinished는 WebView 실행 결과가 나왔을 때 1회 전달돼요. 콜백은 Base_RunCallback()을 호출한 스레드에서 실행돼요.
Error Codes
| Code | Name | Description | Show to User | In-Game Message |
|---|---|---|---|---|
| 0 | SUCCESS | 성공 | x | |
| 5 | INVALID_PARAM | 게임 서버 월드 접속 정보(worldId)가 비어 있음(월드 미접속 상태) | x | |
| 17 | NOT_INITIALIZED | 팝업 기능이 초기화되어 있지 않음. View_Initialize를 먼저 호출해야 해요 | x | |
| 80 | VIEWUI_NOT_INITIALIZED | 팝업을 표시할 웹뷰 초기화에 실패함 | x | |
| 82 | WEBVIEW_CREATE_FAIL | 팝업 웹뷰 생성에 실패함 | x | |
| 83 | WEBVIEW_LOAD_URL_FAIL | 팝업 웹뷰에서 페이지를 불러오지 못함 | x | |
| 84 | WEBVIEW_CLOSE_ALL_FAIL | 팝업 생성 전 기존에 열려 있던 팝업을 모두 닫는 데 실패함 | x | |
| 87 | NO_POPUP_DATA | 표시할 팝업 설정 정보가 없음 | O | 팝업 설정 정보가 존재하지 않아 표시할 창이 없습니다. [확인] |
| 253 | UNMANAGED_EXCEPTION | 네이티브 SDK 내부에서 예외가 발생함 | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
| 254 | MANAGED_EXCEPTION | C# 래퍼 내부(마샬링 등)에서 예외가 발생함. CallbackResult.result.exceptionMessage 를 확인해야 해요 | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
전체 목록은 ViewSDKResultCode 를 참조하세요.
Example
using static Stove.PCSDK.View;
using static Stove.PCSDK.Base;
void OnCouponPopupFinished(CallbackResult callbackResult)
{
if (callbackResult.result.IsSuccessful())
{
// 성공 시 로직을 구현해 주세요.
}
else
{
// 실패 시 로직을 구현해 주세요.
}
}
View_CouponPopup(WebViewMode.INTERNAL, OnCouponPopupFinished);
Notes
- 팝업의 네이티브 리소스가 해제되는 시점까지 함께 통지받으려면 View_CouponPopupEx를 사용해요.
- 화면에 표시된 팝업(들)을 한꺼번에 닫으려면 View_CloseAllPopups를 사용해요.
See Also
View_CouponPopupEx
종류 함수 · 모듈 View · 버전 3.3.4
Description
WebView를 이용하여 CouponPopup을 실행해요. View_CouponPopup과 동작은 같지만, 팝업의 네이티브 리소스가 완전히 해제되었을 때 전달되는 onDestroy 콜백을 추가로 받을 수 있어요.
호출 전에 View_Initialize 또는 View_InitializeWithWndInfo로 초기화가 되어 있어야 해요.
Declaration
public static void View_CouponPopupEx(WebViewMode mode, OnPopupFinished onFinished, OnViewPopupDestroyFinished onDestroy);
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
mode | WebViewMode | Y | WebView를 실행하는 모드예요. |
onFinished | OnPopupFinished | Y | WebView 실행에 대한 결과를 넘겨받는 콜백 함수예요. |
onDestroy | OnViewPopupDestroyFinished | N | 팝업을 닫을 시 응답받는 콜백 함수예요. |
Returns
없음
Callback
public delegate void OnPopupFinished(CallbackResult result);
public delegate void OnViewPopupDestroyFinished(CallbackResult result);
| Name | Type | Description |
|---|---|---|
result | CallbackResult | 콜백 결과 값이에요. |
onFinished는 WebView 실행 결과가 나왔을 때 1회 전달돼요. onDestroy는 팝업의 네이티브 리소스가 완전히 해제되었을 때 1회 전달돼요. 두 콜백 모두 Base_RunCallback()을 호출한 스레드에서 실행돼요.
Error Codes
| Code | Name | Description | Show to User | In-Game Message |
|---|---|---|---|---|
| 0 | SUCCESS | 성공 | x | |
| 5 | INVALID_PARAM | 게임 서버 월드 접속 정보(worldId)가 비어 있음(월드 미접속 상태) | x | |
| 17 | NOT_INITIALIZED | 팝업 기능이 초기화되어 있지 않음. View_Initialize를 먼저 호출해야 해요 | x | |
| 80 | VIEWUI_NOT_INITIALIZED | 팝업을 표시할 웹뷰 초기화에 실패함 | x | |
| 82 | WEBVIEW_CREATE_FAIL | 팝업 웹뷰 생성에 실패함 | x | |
| 83 | WEBVIEW_LOAD_URL_FAIL | 팝업 웹뷰에서 페이지를 불러오지 못함 | x | |
| 84 | WEBVIEW_CLOSE_ALL_FAIL | 팝업 생성 전 기존에 열려 있던 팝업을 모두 닫는 데 실패함 | x | |
| 85 | WEBVIEW_CLOSE_FAIL | 팝업을 닫는 데 실패함(onDestroy 콜백으로 전달됨) | x | |
| 87 | NO_POPUP_DATA | 표시할 팝업 설정 정보가 없음 | O | 팝업 설정 정보가 존재하지 않아 표시할 창이 없습니다. [확인] |
| 253 | UNMANAGED_EXCEPTION | 네이티브 SDK 내부에서 예외가 발생함 | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
| 254 | MANAGED_EXCEPTION | C# 래퍼 내부(마샬링 등)에서 예외가 발생함. CallbackResult.result.exceptionMessage 를 확인해야 해요 | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
전체 목록은 ViewSDKResultCode 를 참조하세요.
Example
using static Stove.PCSDK.View;
using static Stove.PCSDK.Base;
void OnCouponPopupFinished(CallbackResult callbackResult)
{
if (callbackResult.result.IsSuccessful())
{
// 성공 시 로직을 구현해 주세요.
}
else
{
// 실패 시 로직을 구현해 주세요.
}
}
void OnCouponPopupDestroyed(CallbackResult callbackResult)
{
// 팝업 리소스 해제가 끝난 뒤 로직을 구현해 주세요.
}
View_CouponPopupEx(WebViewMode.INTERNAL, OnCouponPopupFinished, OnCouponPopupDestroyed);
Notes
- View_CouponPopup과 달리 팝업 종료(destroy) 통지를 받는
onDestroy콜백을 추가로 받아요. - 화면에 표시된 팝업(들)을 한꺼번에 닫으려면 View_CloseAllPopups를 사용해요.
See Also
View_FetchWebOpenKey
종류 함수 · 모듈 View · 버전 3.3.0 · 폐기 예정
Description
폐기(deprecated)된 기능이에요. 신규 인터페이스에서도 제공하지 않아요.
Web Open in Game 기능을 이용하기 위한 일회성 key를 획득해요. 외부 브라우저를 통한 Stove 커뮤니티, 고객센터 노출이 필요한 경우에만 사용해요.
호출 전에 View_Initialize 또는 View_InitializeWithWndInfo로 초기화가 되어 있어야 해요.
Declaration
public static void View_FetchWebOpenKey(OnFetchWebOpenKeyFinished onFinished);
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
onFinished | OnFetchWebOpenKeyFinished | Y | FetchWebOpenKey 실행에 대한 결과를 넘겨받는 콜백 함수예요. |
Returns
없음
Callback
public delegate void OnFetchWebOpenKeyFinished(CallbackResult result, string key);
| Name | Type | Description |
|---|---|---|
result | CallbackResult | 콜백 결과 값이에요. |
key | string | 발급된 일회성 key예요. |
onFinished는 key 발급 결과가 나왔을 때 1회 전달돼요. 콜백은 Base_RunCallback()을 호출한 스레드에서 실행돼요.
Error Codes
| Code | Name | Description | Show to User | In-Game Message |
|---|---|---|---|---|
| 0 | SUCCESS | 성공 | x | |
| 17 | NOT_INITIALIZED | 팝업 기능이 초기화되어 있지 않음. View_Initialize를 먼저 호출해야 해요 | x | |
| 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 | C# 래퍼 내부(마샬링 등)에서 예외가 발생함. CallbackResult.result.exceptionMessage 를 확인해야 해요 | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
전체 목록은 ViewSDKResultCode 를 참조하세요.
Example
using static Stove.PCSDK.View;
using static Stove.PCSDK.Base;
void OnFetchWebOpenKeyFinished(CallbackResult callbackResult, string key)
{
if (callbackResult.result.IsSuccessful())
{
// key를 사용해 외부 브라우저로 Stove 커뮤니티, 고객센터 등을 여는 로직을 구현해 주세요.
}
else
{
// 실패 시 로직을 구현해 주세요.
}
}
View_FetchWebOpenKey(OnFetchWebOpenKeyFinished);
Notes
- 외부 브라우저를 통한 Stove 커뮤니티, 고객센터 노출이 필요한 경우에만 사용해요.
See Also
View_GetVersion
종류 함수 · 모듈 View · 버전 3.4.1
Description
팝업 기능의 버전 정보를 조회해요.
Declaration
public static Result View_GetVersion(ref string version, uint length);
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
version | ref string | Y | 버전 문자열을 받을 변수예요. 호출 전 값은 무시되고, 호출 후 결과 문자열로 대체돼요. |
length | uint | Y | 내부적으로 사용하는 문자열 버퍼의 길이예요. |
Returns
| Type | Description |
|---|---|
Result | 함수 호출 결과예요. result.IsSuccessful()로 성공 여부를 확인해요. |
Error Codes
| Code | Name | Description | Show to User | In-Game Message |
|---|---|---|---|---|
| 0 | SUCCESS | 성공 | x | |
| 5 | INVALID_PARAM | version 버퍼가 없거나 length가 0, 또는 버퍼 크기가 문자열을 담기에 부족함 | x | |
| 251 | PCSDK_DLL_NOT_FOUND | SDK 파일 경로를 찾지 못해 버전 조회에 실패함 | x | |
| 253 | UNMANAGED_EXCEPTION | 네이티브 SDK 내부에서 예외가 발생함 | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
| 254 | MANAGED_EXCEPTION | C# 래퍼 내부(마샬링 등)에서 예외가 발생함. Result.exceptionMessage 를 확인해야 해요 | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
이 함수는 실제로는 ViewSDK 자체 버전이 아닌 BaseSDK 통합 버전을 그대로 반환해요. 전체 목록은 ViewSDKResultCode 를 참조하세요.
Example
using static Stove.PCSDK.View;
string version = null;
Result result = View_GetVersion(ref version, 64);
if (result.IsSuccessful())
{
// 성공 시 로직을 구현해 주세요. version을 사용합니다.
}
else
{
// 실패 시 로직을 구현해 주세요.
}
Notes
- 이 함수는 동기 함수이며 콜백을 받지 않아요.
See Also
View_Initialize
종류 함수 · 모듈 View · 버전 3.0.0.4
Description
팝업 기능을 초기화해요. Internal Style 팝업의 부모 윈도우 핸들이 필요 없는 경우에 사용해요. 부모 윈도우 핸들을 지정해야 한다면 View_InitializeWithWndInfo를 사용해요.
팝업 기능이 제공하는 다른 함수를 호출하기 전에 먼저 호출해야 해요.
Declaration
public static 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를 먼저 호출해야 해요 | x | |
| 18 | ALREADY_INITIALIZED | 팝업 기능이 이미 초기화되어 있음 | x | |
| 80 | VIEWUI_NOT_INITIALIZED | 팝업을 표시할 웹뷰 초기화에 실패함 | x | |
| 251 | PCSDK_DLL_NOT_FOUND | SDK 파일 경로를 찾지 못해 버전 확인에 실패함 | x | |
| 253 | UNMANAGED_EXCEPTION | 네이티브 SDK 내부에서 예외가 발생함 | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
| 254 | MANAGED_EXCEPTION | C# 래퍼 내부(마샬링 등)에서 예외가 발생함. Result.exceptionMessage 를 확인해야 해요 | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
전체 목록은 ViewSDKResultCode 를 참조하세요.
Example
using static Stove.PCSDK.View;
Result result = View_Initialize();
if (result.IsSuccessful())
{
// 성공 시 로직을 구현해 주세요.
}
else
{
// 실패 시 로직을 구현해 주세요.
}
Notes
- 이 함수는 동기 함수이며 콜백을 받지 않아요.
- Internal Style 팝업의 부모 윈도우 핸들을 지정하려면 View_InitializeWithWndInfo를 사용해요.
- 사용이 끝나면 View_UnInitialize로 자원을 해제해요.
See Also
View_InitializeWithWndInfo
종류 함수 · 모듈 View · 버전 3.3.3
Description
팝업 기능을 초기화해요. Internal Style 팝업의 부모 윈도우가 될 메인 윈도우 핸들이 필요한 경우에 사용해요.
팝업 기능이 제공하는 다른 함수를 호출하기 전에 먼저 호출해야 해요.
Declaration
public static Result View_InitializeWithWndInfo(IntPtr mainWndHandle);
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
mainWndHandle | IntPtr | 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 | BaseSDK가 초기화되지 않음. Base_Initialize를 먼저 호출해야 해요 | x | |
| 18 | ALREADY_INITIALIZED | 팝업 기능이 이미 초기화되어 있음 | x | |
| 80 | VIEWUI_NOT_INITIALIZED | 팝업을 표시할 웹뷰 초기화에 실패함 | x | |
| 251 | PCSDK_DLL_NOT_FOUND | SDK 파일 경로를 찾지 못해 버전 확인에 실패함 | x | |
| 253 | UNMANAGED_EXCEPTION | 네이티브 SDK 내부에서 예외가 발생함 | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
| 254 | MANAGED_EXCEPTION | C# 래퍼 내부(마샬링 등)에서 예외가 발생함. Result.exceptionMessage 를 확인해야 해요 | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
전체 목록은 ViewSDKResultCode 를 참조하세요.
Example
using static Stove.PCSDK.View;
Result result = View_InitializeWithWndInfo(mainWndHandle);
if (result.IsSuccessful())
{
// 성공 시 로직을 구현해 주세요.
}
else
{
// 실패 시 로직을 구현해 주세요.
}
Notes
- 이 함수는 동기 함수이며 콜백을 받지 않아요.
- Internal Style 팝업의 부모 윈도우 핸들이 필요하지 않다면 View_Initialize를 사용해요.
- 사용이 끝나면 View_UnInitialize로 자원을 해제해요.
See Also
View_ManualPopup
종류 함수 · 모듈 View · 버전 3.0.0.4
Description
WebView를 이용하여 resourceKey로 지정한 ManualPopup을 실행해요.
호출 전에 View_Initialize 또는 View_InitializeWithWndInfo로 초기화가 되어 있어야 해요.
Declaration
public static void View_ManualPopup(string resourceKey, WebViewMode mode, OnPopupFinished onFinished);
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
resourceKey | string | Y | Manual Popup에 대한 ResourceKey예요. |
mode | WebViewMode | Y | WebView를 실행하는 모드예요. |
onFinished | OnPopupFinished | Y | WebView 실행에 대한 결과를 넘겨받는 콜백 함수예요. |
Returns
없음
Callback
public delegate void OnPopupFinished(CallbackResult result);
| Name | Type | Description |
|---|---|---|
result | CallbackResult | 콜백 결과 값이에요. |
onFinished는 WebView 실행 결과가 나왔을 때 1회 전달돼요. 콜백은 Base_RunCallback()을 호출한 스레드에서 실행돼요.
Error Codes
| Code | Name | Description | Show to User | In-Game Message |
|---|---|---|---|---|
| 0 | SUCCESS | 성공 | x | |
| 5 | INVALID_PARAM | resourceKey가 빈 문자열임 | x | |
| 17 | NOT_INITIALIZED | 팝업 기능이 초기화되어 있지 않음. View_Initialize를 먼저 호출해야 해요 | x | |
| 80 | VIEWUI_NOT_INITIALIZED | 팝업을 표시할 웹뷰 초기화에 실패함 | x | |
| 82 | WEBVIEW_CREATE_FAIL | 팝업 웹뷰 생성에 실패함 | x | |
| 83 | WEBVIEW_LOAD_URL_FAIL | 팝업 웹뷰에서 페이지를 불러오지 못함 | x | |
| 84 | WEBVIEW_CLOSE_ALL_FAIL | 팝업 생성 전 기존에 열려 있던 팝업을 모두 닫는 데 실패함 | x | |
| 87 | NO_POPUP_DATA | 표시할 팝업 설정 정보가 없음 | O | 팝업 설정 정보가 존재하지 않아 표시할 창이 없습니다. [확인] |
| 253 | UNMANAGED_EXCEPTION | 네이티브 SDK 내부에서 예외가 발생함 | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
| 254 | MANAGED_EXCEPTION | C# 래퍼 내부(마샬링 등)에서 예외가 발생함. CallbackResult.result.exceptionMessage 를 확인해야 해요 | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
전체 목록은 ViewSDKResultCode 를 참조하세요.
Example
using static Stove.PCSDK.View;
using static Stove.PCSDK.Base;
void OnManualPopupFinished(CallbackResult callbackResult)
{
if (callbackResult.result.IsSuccessful())
{
// 성공 시 로직을 구현해 주세요.
}
else
{
// 실패 시 로직을 구현해 주세요.
}
}
View_ManualPopup("YOUR_RESOURCE_KEY", WebViewMode.INTERNAL, OnManualPopupFinished);
Notes
- 팝업의 네이티브 리소스가 해제되는 시점까지 함께 통지받으려면 View_ManualPopupEx를 사용해요.
- 화면에 표시된 팝업(들)을 한꺼번에 닫으려면 View_CloseAllPopups를 사용해요.
See Also
View_ManualPopupEx
종류 함수 · 모듈 View · 버전 3.3.4
Description
WebView를 이용하여 resourceKey로 지정한 ManualPopup을 실행해요. View_ManualPopup과 동작은 같지만, 팝업의 네이티브 리소스가 완전히 해제되었을 때 전달되는 onDestroy 콜백을 추가로 받을 수 있어요.
호출 전에 View_Initialize 또는 View_InitializeWithWndInfo로 초기화가 되어 있어야 해요.
Declaration
public static void View_ManualPopupEx(string resourceKey, WebViewMode mode, OnPopupFinished onFinished, OnViewPopupDestroyFinished onDestroy);
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
resourceKey | string | Y | Manual Popup에 대한 ResourceKey예요. |
mode | WebViewMode | Y | WebView를 실행하는 모드예요. |
onFinished | OnPopupFinished | Y | WebView 실행에 대한 결과를 넘겨받는 콜백 함수예요. |
onDestroy | OnViewPopupDestroyFinished | N | 팝업을 닫을 시 응답받는 콜백 함수예요. |
Returns
없음
Callback
public delegate void OnPopupFinished(CallbackResult result);
public delegate void OnViewPopupDestroyFinished(CallbackResult result);
| Name | Type | Description |
|---|---|---|
result | CallbackResult | 콜백 결과 값이에요. |
onFinished는 WebView 실행 결과가 나왔을 때 1회 전달돼요. onDestroy는 팝업의 네이티브 리소스가 완전히 해제되었을 때 1회 전달돼요. 두 콜백 모두 Base_RunCallback()을 호출한 스레드에서 실행돼요.
Error Codes
| Code | Name | Description | Show to User | In-Game Message |
|---|---|---|---|---|
| 0 | SUCCESS | 성공 | x | |
| 5 | INVALID_PARAM | resourceKey가 빈 문자열임 | x | |
| 17 | NOT_INITIALIZED | 팝업 기능이 초기화되어 있지 않음. View_Initialize를 먼저 호출해야 해요 | x | |
| 80 | VIEWUI_NOT_INITIALIZED | 팝업을 표시할 웹뷰 초기화에 실패함 | x | |
| 82 | WEBVIEW_CREATE_FAIL | 팝업 웹뷰 생성에 실패함 | x | |
| 83 | WEBVIEW_LOAD_URL_FAIL | 팝업 웹뷰에서 페이지를 불러오지 못함 | x | |
| 84 | WEBVIEW_CLOSE_ALL_FAIL | 팝업 생성 전 기존에 열려 있던 팝업을 모두 닫는 데 실패함 | x | |
| 85 | WEBVIEW_CLOSE_FAIL | 팝업을 닫는 데 실패함(onDestroy 콜백으로 전달됨) | x | |
| 87 | NO_POPUP_DATA | 표시할 팝업 설정 정보가 없음 | O | 팝업 설정 정보가 존재하지 않아 표시할 창이 없습니다. [확인] |
| 253 | UNMANAGED_EXCEPTION | 네이티브 SDK 내부에서 예외가 발생함 | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
| 254 | MANAGED_EXCEPTION | C# 래퍼 내부(마샬링 등)에서 예외가 발생함. CallbackResult.result.exceptionMessage 를 확인해야 해요 | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
전체 목록은 ViewSDKResultCode 를 참조하세요.
Example
using static Stove.PCSDK.View;
using static Stove.PCSDK.Base;
void OnManualPopupFinished(CallbackResult callbackResult)
{
if (callbackResult.result.IsSuccessful())
{
// 성공 시 로직을 구현해 주세요.
}
else
{
// 실패 시 로직을 구현해 주세요.
}
}
void OnManualPopupDestroyed(CallbackResult callbackResult)
{
// 팝업 리소스 해제가 끝난 뒤 로직을 구현해 주세요.
}
View_ManualPopupEx("YOUR_RESOURCE_KEY", WebViewMode.INTERNAL, OnManualPopupFinished, OnManualPopupDestroyed);
Notes
- View_ManualPopup과 달리 팝업 종료(destroy) 통지를 받는
onDestroy콜백을 추가로 받아요. - 화면에 표시된 팝업(들)을 한꺼번에 닫으려면 View_CloseAllPopups를 사용해요.
See Also
View_NewsPopup
종류 함수 · 모듈 View · 버전 3.0.0.4
Description
WebView를 이용하여 NewsPopup을 실행해요.
호출 전에 View_Initialize 또는 View_InitializeWithWndInfo로 초기화가 되어 있어야 해요.
Declaration
public static void View_NewsPopup(WebViewMode mode, OnPopupFinished onFinished);
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
mode | WebViewMode | Y | WebView를 실행하는 모드예요. |
onFinished | OnPopupFinished | Y | WebView 실행에 대한 결과를 넘겨받는 콜백 함수예요. |
Returns
없음
Callback
public delegate void OnPopupFinished(CallbackResult result);
| Name | Type | Description |
|---|---|---|
result | CallbackResult | 콜백 결과 값이에요. |
onFinished는 WebView 실행 결과가 나왔을 때 1회 전달돼요. 콜백은 Base_RunCallback()을 호출한 스레드에서 실행돼요.
Error Codes
| Code | Name | Description | Show to User | In-Game Message |
|---|---|---|---|---|
| 0 | SUCCESS | 성공 | x | |
| 17 | NOT_INITIALIZED | 팝업 기능이 초기화되어 있지 않음. View_Initialize를 먼저 호출해야 해요 | x | |
| 80 | VIEWUI_NOT_INITIALIZED | 팝업을 표시할 웹뷰 초기화에 실패함 | x | |
| 82 | WEBVIEW_CREATE_FAIL | 팝업 웹뷰 생성에 실패함 | x | |
| 83 | WEBVIEW_LOAD_URL_FAIL | 팝업 웹뷰에서 페이지를 불러오지 못함 | x | |
| 84 | WEBVIEW_CLOSE_ALL_FAIL | 팝업 생성 전 기존에 열려 있던 팝업을 모두 닫는 데 실패함 | x | |
| 87 | NO_POPUP_DATA | 표시할 팝업 설정 정보가 없음 | O | 팝업 설정 정보가 존재하지 않아 표시할 창이 없습니다. [확인] |
| 253 | UNMANAGED_EXCEPTION | 네이티브 SDK 내부에서 예외가 발생함 | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
| 254 | MANAGED_EXCEPTION | C# 래퍼 내부(마샬링 등)에서 예외가 발생함. CallbackResult.result.exceptionMessage 를 확인해야 해요 | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
전체 목록은 ViewSDKResultCode 를 참조하세요.
Example
using static Stove.PCSDK.View;
using static Stove.PCSDK.Base;
void OnNewsPopupFinished(CallbackResult callbackResult)
{
if (callbackResult.result.IsSuccessful())
{
// 성공 시 로직을 구현해 주세요.
}
else
{
// 실패 시 로직을 구현해 주세요.
}
}
View_NewsPopup(WebViewMode.INTERNAL, OnNewsPopupFinished);
Notes
- 팝업의 네이티브 리소스가 해제되는 시점까지 함께 통지받으려면 View_NewsPopupEx를 사용해요.
- 화면에 표시된 팝업(들)을 한꺼번에 닫으려면 View_CloseAllPopups를 사용해요.
See Also
View_NewsPopupEx
종류 함수 · 모듈 View · 버전 3.3.4
Description
WebView를 이용하여 NewsPopup을 실행해요. View_NewsPopup과 동작은 같지만, 팝업의 네이티브 리소스가 완전히 해제되었을 때 전달되는 onDestroy 콜백을 추가로 받을 수 있어요.
호출 전에 View_Initialize 또는 View_InitializeWithWndInfo로 초기화가 되어 있어야 해요.
Declaration
public static void View_NewsPopupEx(WebViewMode mode, OnPopupFinished onFinished, OnViewPopupDestroyFinished onDestroy);
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
mode | WebViewMode | Y | WebView를 실행하는 모드예요. |
onFinished | OnPopupFinished | Y | WebView 실행에 대한 결과를 넘겨받는 콜백 함수예요. |
onDestroy | OnViewPopupDestroyFinished | N | 팝업을 닫을 시 응답받는 콜백 함수예요. |
Returns
없음
Callback
public delegate void OnPopupFinished(CallbackResult result);
public delegate void OnViewPopupDestroyFinished(CallbackResult result);
| Name | Type | Description |
|---|---|---|
result | CallbackResult | 콜백 결과 값이에요. |
onFinished는 WebView 실행 결과가 나왔을 때 1회 전달돼요. onDestroy는 팝업의 네이티브 리소스가 완전히 해제되었을 때 1회 전달돼요. 두 콜백 모두 Base_RunCallback()을 호출한 스레드에서 실행돼요.
Error Codes
| Code | Name | Description | Show to User | In-Game Message |
|---|---|---|---|---|
| 0 | SUCCESS | 성공 | x | |
| 17 | NOT_INITIALIZED | 팝업 기능이 초기화되어 있지 않음. View_Initialize를 먼저 호출해야 해요 | x | |
| 80 | VIEWUI_NOT_INITIALIZED | 팝업을 표시할 웹뷰 초기화에 실패함 | x | |
| 82 | WEBVIEW_CREATE_FAIL | 팝업 웹뷰 생성에 실패함 | x | |
| 83 | WEBVIEW_LOAD_URL_FAIL | 팝업 웹뷰에서 페이지를 불러오지 못함 | x | |
| 84 | WEBVIEW_CLOSE_ALL_FAIL | 팝업 생성 전 기존에 열려 있던 팝업을 모두 닫는 데 실패함 | x | |
| 85 | WEBVIEW_CLOSE_FAIL | 팝업을 닫는 데 실패함(onDestroy 콜백으로 전달됨) | x | |
| 87 | NO_POPUP_DATA | 표시할 팝업 설정 정보가 없음 | O | 팝업 설정 정보가 존재하지 않아 표시할 창이 없습니다. [확인] |
| 253 | UNMANAGED_EXCEPTION | 네이티브 SDK 내부에서 예외가 발생함 | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
| 254 | MANAGED_EXCEPTION | C# 래퍼 내부(마샬링 등)에서 예외가 발생함. CallbackResult.result.exceptionMessage 를 확인해야 해요 | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
전체 목록은 ViewSDKResultCode 를 참조하세요.
Example
using static Stove.PCSDK.View;
using static Stove.PCSDK.Base;
void OnNewsPopupFinished(CallbackResult callbackResult)
{
if (callbackResult.result.IsSuccessful())
{
// 성공 시 로직을 구현해 주세요.
}
else
{
// 실패 시 로직을 구현해 주세요.
}
}
void OnNewsPopupDestroyed(CallbackResult callbackResult)
{
// 팝업 리소스 해제가 끝난 뒤 로직을 구현해 주세요.
}
View_NewsPopupEx(WebViewMode.INTERNAL, OnNewsPopupFinished, OnNewsPopupDestroyed);
Notes
- View_NewsPopup과 달리 팝업 종료(destroy) 통지를 받는
onDestroy콜백을 추가로 받아요. - 화면에 표시된 팝업(들)을 한꺼번에 닫으려면 View_CloseAllPopups를 사용해요.
See Also
View_SetPopupDisallowed
종류 함수 · 모듈 View · 버전 3.0.0.4
Description
popupDisallowed에 지정한 팝업 식별자를, 지정한 일수(days) 동안 표시되지 않도록 억제해요.
호출 전에 View_Initialize 또는 View_InitializeWithWndInfo로 초기화가 되어 있어야 해요.
Declaration
public static void View_SetPopupDisallowed(StovePCPopupDisallowed popupDisallowed, OnSetPopupDisallowedFinished onFinished);
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
popupDisallowed | StovePCPopupDisallowed | Y | 팝업 노출을 하지 않을 때 필요한 정보(팝업 식별자, 억제 기간)이에요. |
onFinished | OnSetPopupDisallowedFinished | Y | PopupDisallowed 실행에 대한 결과를 넘겨받는 콜백 함수예요. |
Returns
없음
Callback
public delegate void OnSetPopupDisallowedFinished(CallbackResult result);
| Name | Type | Description |
|---|---|---|
result | CallbackResult | 콜백 결과 값이에요. |
onFinished는 처리 결과가 나왔을 때 1회 전달돼요. 콜백은 Base_RunCallback()을 호출한 스레드에서 실행돼요.
Error Codes
| Code | Name | Description | Show to User | In-Game Message |
|---|---|---|---|---|
| 0 | SUCCESS | 성공 | x | |
| 1 | FAIL | 팝업 노출 제한 정보를 로컬에 기록하는 데 실패함 | x | |
| 17 | NOT_INITIALIZED | 팝업 기능이 초기화되어 있지 않음. View_Initialize를 먼저 호출해야 해요 | x | |
| 253 | UNMANAGED_EXCEPTION | 네이티브 SDK 내부에서 예외가 발생함 | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
| 254 | MANAGED_EXCEPTION | C# 래퍼 내부(마샬링 등)에서 예외가 발생함. CallbackResult.result.exceptionMessage 를 확인해야 해요 | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
전체 목록은 ViewSDKResultCode 를 참조하세요.
Example
using static Stove.PCSDK.View;
using static Stove.PCSDK.Base;
void OnSetPopupDisallowedFinished(CallbackResult callbackResult)
{
if (callbackResult.result.IsSuccessful())
{
// 성공 시 로직을 구현해 주세요.
}
else
{
// 실패 시 로직을 구현해 주세요.
}
}
var popupDisallowed = new StovePCPopupDisallowed
{
popupId = 1001,
days = 7,
};
View_SetPopupDisallowed(popupDisallowed, OnSetPopupDisallowedFinished);
Notes
- 이 함수는 팝업을 닫는 API가 아니라, 이후 지정한 기간 동안 해당 팝업이 다시 표시되지 않도록 억제하는 API예요.
- 화면에 표시되어 있는 팝업을 즉시 닫으려면 View_CloseAllPopups를 사용해요.
See Also
View_UnInitialize
종류 함수 · 모듈 View · 버전 3.0.0.4
Description
팝업 기능의 자원을 해제해요. View_Initialize 또는 View_InitializeWithWndInfo와 짝을 이루는 함수예요.
Declaration
public static Result View_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 | 팝업 기능이 초기화되어 있지 않음 | x | |
| 81 | VIEWUI_UNINIT_FAILED | 팝업 웹뷰 종료 처리에 실패함 | x | |
| 253 | UNMANAGED_EXCEPTION | 네이티브 SDK 내부에서 예외가 발생함 | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
| 254 | MANAGED_EXCEPTION | C# 래퍼 내부(마샬링 등)에서 예외가 발생함. Result.exceptionMessage 를 확인해야 해요 | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
전체 목록은 ViewSDKResultCode 를 참조하세요.
Example
using static Stove.PCSDK.View;
Result result = View_UnInitialize();
if (result.IsSuccessful())
{
// 성공 시 로직을 구현해 주세요.
}
else
{
// 실패 시 로직을 구현해 주세요.
}
Notes
- 이 함수는 동기 함수이며 콜백을 받지 않아요.
- View_Initialize / View_InitializeWithWndInfo와 짝을 이루는 종료 함수예요.
See Also
View_VerifyIdentificationPopup
종류 함수 · 모듈 View · 버전 3.3.4
Description
WebView를 이용하여 본인인증 팝업을 실행해요. compareIdentifier로 SDI를 이용한 검증 여부를 지정하며, false인 경우 onDestroy로 simKey가 제공돼요.
호출 전에 View_Initialize 또는 View_InitializeWithWndInfo로 초기화가 되어 있어야 해요.
3.4.1부터 한국 전용 기능으로 제한되었어요.
Declaration
public static void View_VerifyIdentificationPopup(bool compareIdentifier, WebViewMode mode,
OnPopupFinished onFinished, OnVerifyIdentificationPopupDestroyFinished onDestroy);
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
compareIdentifier | bool | Y | SDI를 이용한 검증 여부예요. false일 경우 simKey를 제공해요. |
mode | WebViewMode | Y | WebView를 실행하는 모드예요. |
onFinished | OnPopupFinished | Y | WebView 실행에 대한 결과를 넘겨받는 콜백 함수예요. |
onDestroy | OnVerifyIdentificationPopupDestroyFinished | Y | 팝업을 닫을 시 응답받는 콜백 함수예요. |
Returns
없음
Callback
public delegate void OnPopupFinished(CallbackResult result);
public delegate void OnVerifyIdentificationPopupDestroyFinished(CallbackResult result, string simKey);
| Name | Type | Description |
|---|---|---|
result | CallbackResult | 콜백 결과 값이에요. |
simKey | string | 인증 성공 시 발급된 SIM 키예요. |
onFinished는 WebView 실행 결과가 나왔을 때 1회 전달돼요. onDestroy는 본인인증 팝업이 종료되었을 때 1회 전달되며, 인증에 성공하면 simKey가 함께 전달돼요. 두 콜백 모두 Base_RunCallback()을 호출한 스레드에서 실행돼요.
Error Codes
| Code | Name | Description | Show to User | In-Game Message |
|---|---|---|---|---|
| 0 | SUCCESS | 성공 | x | |
| 17 | NOT_INITIALIZED | 팝업 기능이 초기화되어 있지 않음. View_Initialize를 먼저 호출해야 해요 | x | |
| 31 | NOT_SUPPORTED_COUNTRY | 한국 외 지역에서 호출되어 지원하지 않는 기능임 | x | |
| 80 | VIEWUI_NOT_INITIALIZED | 팝업을 표시할 웹뷰 초기화에 실패함 | x | |
| 82 | WEBVIEW_CREATE_FAIL | 팝업 웹뷰 생성에 실패함 | x | |
| 83 | WEBVIEW_LOAD_URL_FAIL | 팝업 웹뷰에서 페이지를 불러오지 못함 | x | |
| 84 | WEBVIEW_CLOSE_ALL_FAIL | 팝업 생성 전 기존에 열려 있던 팝업을 모두 닫는 데 실패함 | x | |
| 85 | WEBVIEW_CLOSE_FAIL | 팝업을 닫는 데 실패함(onDestroy 콜백으로 전달됨) | x | |
| 87 | NO_POPUP_DATA | 표시할 팝업 설정 정보가 없음 | O | 팝업 설정 정보가 존재하지 않아 표시할 창이 없습니다. [확인] |
| 253 | UNMANAGED_EXCEPTION | 네이티브 SDK 내부에서 예외가 발생함 | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
| 254 | MANAGED_EXCEPTION | C# 래퍼 내부(마샬링 등)에서 예외가 발생함. CallbackResult.result.exceptionMessage 를 확인해야 해요 | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
전체 목록은 ViewSDKResultCode 를 참조하세요.
Example
using static Stove.PCSDK.View;
using static Stove.PCSDK.Base;
void OnVerifyIdentificationPopupFinished(CallbackResult callbackResult)
{
if (callbackResult.result.IsSuccessful())
{
// 성공 시 로직을 구현해 주세요.
}
else
{
// 실패 시 로직을 구현해 주세요.
}
}
void OnVerifyIdentificationPopupDestroyed(CallbackResult callbackResult, string simKey)
{
if (!string.IsNullOrEmpty(simKey))
{
// simKey를 필요한 곳에 사용해 주세요.
}
}
View_VerifyIdentificationPopup(false, WebViewMode.INTERNAL,
OnVerifyIdentificationPopupFinished, OnVerifyIdentificationPopupDestroyed);
Notes
- 다른 팝업 API들과 달리
onDestroy콜백 타입이OnVerifyIdentificationPopupDestroyFinished로,simKey인자를 추가로 전달해요. onFinished가null이면compareIdentifier가 강제로false로 처리되어 내부 함수가 호출돼요.- 화면에 표시된 팝업(들)을 한꺼번에 닫으려면 View_CloseAllPopups를 사용해요.
Changelog
| Version | Change |
|---|---|
| 3.3.4 | 최초 제공 |
| 3.4.1 | 한국 전용 기능으로 제한 |
See Also
ViewSDKMethod
종류 열거형 · 모듈 View · 버전 3.0.0.4
Description
Result.methodCode로 조회하는 값으로, 팝업 기능의 어떤 메서드가 이 결과를 생성했는지 식별해요.
Declaration
public enum ViewSDKMethod
{
INITIALIZE = 1,
UNINITIALIZE = 2,
// ... 이하 Values 표 참조
FETCH_WEB_OPEN_KEY = 162,
};
Enum Values
| Code | Name | Description |
|---|---|---|
| 1 | INITIALIZE | View_Initialize / View_InitializeWithWndInfo |
| 2 | UNINITIALIZE | View_UnInitialize |
| 5 | GET_VERSION | View_GetVersion |
| — | 6 ~ 79 | 사용하지 않아요 (예약 구간) |
| 80 | FETCH_AUTO | 이름으로 보아 AutoPopup 콘텐츠를 조회(Fetch)하는 내부 단계로 보이며, 별도의 공개 API는 제공되지 않아요 |
| 81 | AUTO_POPUP | View_AutoPopup / View_AutoPopupEx |
| 82 | FETCH_MANUAL | 이름으로 보아 ManualPopup 콘텐츠를 조회(Fetch)하는 내부 단계로 보이며, 별도의 공개 API는 제공되지 않아요 |
| 83 | MANUAL_POPUP | View_ManualPopup / View_ManualPopupEx |
| 84 | FETCH_NEWS | 이름으로 보아 NewsPopup 콘텐츠를 조회(Fetch)하는 내부 단계로 보이며, 별도의 공개 API는 제공되지 않아요 |
| 85 | NEWS_POPUP | View_NewsPopup / View_NewsPopupEx |
| 86 | FETCH_COUPON | 이름으로 보아 CouponPopup 콘텐츠를 조회(Fetch)하는 내부 단계로 보이며, 별도의 공개 API는 제공되지 않아요 |
| 87 | COUPON_POPUP | View_CouponPopup / View_CouponPopupEx |
| 88 | FETCH_COMMUNITY | 이름으로 보아 커뮤니티 콘텐츠를 조회(Fetch)하는 내부 단계로 보이며, 별도의 공개 API는 제공되지 않아요 |
| 89 | COMMUNITY_POPUP | 이름으로 보아 커뮤니티 팝업에 대응하는 것으로 보이며, 별도의 공개 API는 제공되지 않아요 |
| 90 | FETCH_VERIFY_IDENTIFICATION | 이름으로 보아 본인인증 콘텐츠를 조회(Fetch)하는 내부 단계로 보이며, 별도의 공개 API는 제공되지 않아요 |
| 91 | VERIFY_IDENTIFICATION_POPUP | View_VerifyIdentificationPopup |
| 92 | FETCH_CS | 이름으로 보아 고객센터 콘텐츠를 조회(Fetch)하는 내부 단계로 보이며, 별도의 공개 API는 제공되지 않아요 |
| 93 | CS_POPUP | 이름으로 보아 고객센터 팝업에 대응하는 것으로 보이며, 별도의 공개 API는 제공되지 않아요 |
| — | 94 ~ 159 | 사용하지 않아요 (예약 구간) |
| 160 | SET_POPUP_DISALLOWED | View_SetPopupDisallowed |
| 161 | CLOSE_ALL_POPUPS | View_CloseAllPopups |
| 162 | FETCH_WEB_OPEN_KEY | View_FetchWebOpenKey |
이름에 INTERNAL이 들어간 값(3, 4)은 표에서 제외해요. 내부 전용 값은 문서에 포함하지 않아요.
Example
using static Stove.PCSDK.View;
Result result = View_Initialize();
if (result.methodCode == (uint)ViewSDKMethod.INITIALIZE)
{
// 이 결과가 View_Initialize() 호출로 생성되었음을 확인하는 로직을 구현해 주세요.
}
Notes
- 같은 팝업이라도 신규 인터페이스와 값이 달라요. 신규 인터페이스(
Stove_AutoPopup등)는EStoveViewMethodCode의1000번대 값을 돌려줘요. 구 인터페이스는 이 문서의 값을 그대로 유지해요. 두 벌을 함께 쓰는 동안에는 로그 집계 기준을 벌마다 나누어 두세요. FETCH_*,COMMUNITY_POPUP,CS_POPUP값에는 대응하는 공개 API가 없어요.Result.methodCode는uint타입이므로 이 열거형 값과 비교할 때는(uint)ViewSDKMethod....로 형변환해요.
See Also
ViewSDKResultCode
종류 결과코드 · 모듈 View · 버전 3.0.0.4
Description
Result.resultCode / CallbackResult.result.resultCode로 조회하는 값이에요. 0(SUCCESS)이면 성공이에요.
Declaration
public enum ViewSDKResultCode
{
SUCCESS = 0,
FAIL = 1,
// ... 이하 Values 표 참조
NO_POPUP_DATA = 87,
}
Enum Values
일반 결과
| Code | Name | Description | Show to User | In-Game Message |
|---|---|---|---|---|
| 0 | SUCCESS | 성공 | x | |
| 1 | FAIL | 일반 실패. 상세 원인은 로그/errorMessage로 확인해요 | x |
설정/파라미터 검증 실패
| Code | Name | Description | Show to User | In-Game Message |
|---|---|---|---|---|
| 2 | INVALID_CONFIG | 설정값이 유효하지 않아요. 설정값을 확인해요 | x | |
| 3 | INVALID_LOG_LEVEL | 로그 레벨 값이 유효하지 않아요. 로그 레벨 값을 확인해요 | x | |
| 4 | INVALID_LOG_PATH | 로그 경로가 유효하지 않아요. 로그 경로를 확인해요 | x | |
| 5 | INVALID_PARAM | 파라미터가 유효하지 않아요. 호출부 파라미터 값을 확인 후 수정해요 | x | |
| — | 6 ~ 15 | 사용하지 않아요 (예약 구간) |
초기화 상태 오류
| Code | Name | Description | Show to User | In-Game Message |
|---|---|---|---|---|
| 16 | BASE_NOT_INITIALIZED | SDK가 초기화되지 않았어요. Base_Initialize()를 선행 호출해요 | x | |
| 17 | NOT_INITIALIZED | 팝업 기능이 초기화되지 않았어요. View_Initialize를 선행 호출해요 | x | |
| 18 | ALREADY_INITIALIZED | 이미 초기화되어 있어요. 중복 초기화 호출을 제거해요 | x |
토큰/엔티티 오류
| Code | Name | Description | Show to User | In-Game Message |
|---|---|---|---|---|
| 19 | INVALID_ACCESS_TOKEN | AccessToken이 유효하지 않아요. 토큰을 재발급해요 | O | 로그인 세션이 만료되었습니다. 게임 종료 후 다시 실행해 주세요. [확인] |
| 20 | NULL_TOKEN_ENTITY | 토큰 엔티티가 null이에요. 토큰 발급 상태를 확인해요 | x | |
| 21 | NULL_ENTITY | 엔티티가 null이에요. 응답 객체의 null 여부를 확인해요 | x |
HTTP/응답 오류
| Code | Name | Description | Show to User | In-Game Message |
|---|---|---|---|---|
| 22 | HTTP_ERROR | HTTP 오류가 발생했어요. 네트워크 상태를 확인 후 재시도해요 | O | 네트워크 연결이 원활하지 않습니다. 네트워크 상태를 확인하고 다시 실행해 주세요. [확인] |
| 23 | RESPONSE_ERROR | 서버 응답 오류예요. 서버 응답을 확인해요 | O | 네트워크 연결이 원활하지 않습니다. 네트워크 상태를 확인하고 다시 실행해 주세요. [확인] |
| 24 | RESPONSE_INVALID_CODE | 서버 응답 코드가 유효하지 않아요. 서버 응답 코드를 확인해요 | O | 네트워크 연결이 원활하지 않습니다. 네트워크 상태를 확인하고 다시 실행해 주세요. [확인] |
| 25 | RESPONSE_VALUE_IS_NULL | 서버 응답 값이 null이에요. 서버 응답 값을 확인해요 | O | 네트워크 연결이 원활하지 않습니다. 네트워크 상태를 확인하고 다시 실행해 주세요. [확인] |
| 26 | RESPONSE_INVALID_VALUE_FORMAT | 서버 응답 값의 형식이 유효하지 않아요. 서버 응답 형식을 확인해요 | O | 네트워크 연결이 원활하지 않습니다. 네트워크 상태를 확인하고 다시 실행해 주세요. [확인] |
81Plug 관련 오류
| Code | Name | Description | Show to User | In-Game Message |
|---|---|---|---|---|
| 27 | LOG_81PLUG_ERROR | 81Plug 로그 처리 중 오류가 발생했어요. 로그·네트워크 상태를 확인해요 | x | |
| 28 | UPDATE_81PLUG_FEED_ERROR | 81Plug 피드 갱신 중 오류가 발생했어요. 로그·네트워크 상태를 확인해요 | x |
기타 상태
| Code | Name | Description | Show to User | In-Game Message |
|---|---|---|---|---|
| 29 | ASYNC_OPERATION_IN_PROGRESS | 비동기 작업이 이미 진행 중이에요. 진행 중인 비동기 작업을 완료한 뒤 재호출해요 | x | |
| 30 | BASE_UNINITIALIZED | SDK가 이미 해제(UnInitialize)되었어요. Base_Initialize()를 재호출해요 | x | |
| 31 | NOT_SUPPORTED_COUNTRY | 지원하지 않는 국가/지역이에요. 국가/지역 제한을 확인 후 호출을 중단해요 | x | |
| — | 32 ~ 79 | 사용하지 않아요 (예약 구간) |
팝업 전용 오류
| Code | Name | Description | Show to User | In-Game Message |
|---|---|---|---|---|
| 80 | VIEWUI_NOT_INITIALIZED | View UI가 초기화되지 않았어요. View_Initialize / View_InitializeWithWndInfo 선행 호출을 확인해요 | x | |
| 81 | VIEWUI_UNINIT_FAILED | View UI 해제(UnInit)에 실패했어요 | x | |
| 82 | WEBVIEW_CREATE_FAIL | 웹뷰 생성에 실패했어요 | x | |
| 83 | WEBVIEW_LOAD_URL_FAIL | 웹뷰에서 URL 로드에 실패했어요 | x | |
| 84 | WEBVIEW_CLOSE_ALL_FAIL | 웹뷰 전체 닫기에 실패했어요 | x | |
| 85 | WEBVIEW_CLOSE_FAIL | 웹뷰 닫기에 실패했어요 | x | |
| 86 | WEBVIEW_CREATE_COOKIE_FAIL | 웹뷰 쿠키 생성에 실패했어요 | O | 페이지를 불러올 수 없습니다. 다시 시도해 주세요. [확인] |
| 87 | NO_POPUP_DATA | 표시할 팝업 데이터가 없어요 | O | 팝업 설정 정보가 존재하지 않아 표시할 창이 없습니다. [확인] |
| — | 88 ~ 250 | 사용하지 않아요 (예약 구간) |
시스템/런타임 실패
| Code | Name | Description | Show to User | In-Game Message |
|---|---|---|---|---|
| 251 | PCSDK_DLL_NOT_FOUND | PCSDK DLL을 찾을 수 없어요. PCSDK DLL 배치를 확인해요 | x | |
| 252 | NOT_IMPLEMENTED | 구현되지 않은 기능이에요. 호출을 제거하거나 대체 API를 확인해요 | x | |
| 253 | UNMANAGED_EXCEPTION | 관리되지 않는(unmanaged) 예외가 발생했어요. 예외 로그를 확인해요 | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
| 254 | MANAGED_EXCEPTION | 관리되는(managed) 예외가 발생했어요. 예외 로그를 확인해요 | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
| 255 | UNKNOWN_ERROR | 알 수 없는 오류예요. 상세 로그를 확인해요 | x |
아래 코드를 받으면 반드시 게임을 종료해야 해요. 정상 진행이 불가능한 상태예요.
19INVALID_ACCESS_TOKEN— 로그인 세션이 만료되어 게임을 종료하고 다시 실행해야 해요
Example
using static Stove.PCSDK.View;
using static Stove.PCSDK.Base;
void OnAutoPopupFinished(CallbackResult callbackResult)
{
if (callbackResult.result.IsSuccessful())
{
// 성공 시 로직을 구현해 주세요.
}
else if (callbackResult.result.resultCode == (uint)ViewSDKResultCode.NO_POPUP_DATA)
{
// 표시할 팝업 데이터가 없는 경우의 로직을 구현해 주세요.
}
else
{
// 그 외 실패 시 로직을 구현해 주세요.
}
}
Notes
- 0 ~ 31, 251 ~ 255 구간은 다른 모듈의
*SDKResultCode와 값·의미가 동일해요. resultCode는uint타입이므로, 이 열거형 값과 비교할 때는 형변환이 필요해요.
See Also
WebViewMode
종류 열거형 · 모듈 Base · 버전 3.0.0.4
Description
WebViewMode 는 값 이름(EXTERNAL, INTERNAL)으로 보아 웹뷰를 외부 브라우저로 열지, SDK 내부 뷰로 열지를 구분하는 값으로 추정돼요.
Declaration
public enum WebViewMode
{
EXTERNAL,
INTERNAL
};
Enum Values
| Code | Name | Description |
|---|---|---|
| 0 | EXTERNAL | 외부 방식으로 웹뷰를 열어요 |
| 1 | INTERNAL | 내부 방식으로 웹뷰를 열어요 |
Example
using static Stove.PCSDK.Base;
WebViewMode mode = WebViewMode.EXTERNAL;
Notes
- 없음
See Also
- 없음