- 마지막 업데이트
PC SDK unity 레퍼런스
SDK 버전 3.5.0 기준이에요. 항목 100개를 이름순으로 모은 통합 문서예요.
Contents
기본 연동 안내
종류 연동 안내 · 모듈 Base · 버전 3.5.0
Description
이 가이드의 C# API 는 .NET (Mono / IL2CPP) 환경에서 SDK 의 모든 기능을 호출하기 위한 매니지드 래퍼예요. 내부적으로는 P/Invoke 를 통해 Native DLL 의 C flat 함수를 호출하지만, 호출자는 매니지드 타입(readonly struct, struct, enum, delegate) 만 다루면 돼요.
호환성: C# 7.3 (.NET Framework 4.6, Unity 2019 Mono) 이상.
| Category | Form |
|---|---|
| SDK API 메서드 | public static 메서드 (모듈별 static partial class) |
| 결과 / 데이터 타입 | readonly struct — 불변, get-only property, GC 자동 관리 |
| 파라미터 타입 | 일반 struct — get/set property, 호출자가 직접 채워서 전달 |
| 열거형 | enum (값 접두사 k_E...) |
| 콜백 | delegate (lambda 캡처로 컨텍스트 전달) |
Declaration Forms
모든 타입은 Stove.PCSDK.V3 네임스페이스 아래에 정의되며, 모듈마다 static partial class (Base, IAP, Log, PCBang, View) 가 존재해요. 동일 클래스 안에 메서드 · 구조체 · 콜백 delegate · 열거형이 함께 선언돼요. GamingServices 모듈은 신규 인터페이스에서 제공하지 않아요.
using Stove.PCSDK.V3;
// 또는 모듈별로 정적 import:
using static Stove.PCSDK.V3.Base;
using static Stove.PCSDK.V3.IAP;
using static 을 사용하면 클래스 접두사 없이 Stove_Initialize() 처럼 직접 호출할 수 있어요.
Naming Rules
| Category | Pattern | Example |
|---|---|---|
| SDK 메서드 | Stove_<Method> (모듈 토큰 없는 메서드. 단 PC방 모듈은 Stove_PCBang<Method> 유지) | Stove_Initialize, Stove_StartPurchase, Stove_FetchProducts, Stove_PCBangLogin |
| 결과 / 데이터 구조체 | IStove<Name> | IStoveResult, IStoveCallbackResult, IStoveUser |
| 파라미터 구조체 | IStove<Name>Param 또는 IStove<Name>Params | IStoveInitializeParam, IStoveSetGameProfileParam |
| 콜백 delegate | On<Action>Callback | OnRestartAppIfNecessaryCallback, OnAccessTokenRenewedCallback |
| 열거형 | EStove<Module><Name> | EStoveBaseMethodCode, EStoveCommonResultCode, EStoveLocale |
| 열거형 값 | k_E<Enum><Value> | k_EStoveCommonResultCode_Success, k_EStoveLocale_Ko |
Memory Lifetime
본 가이드의 모든 타입은 매니지드 (C#) 타입이며 GC 가 관리해요. Native API 처럼 Destroy() 를 명시적으로 호출할 필요가 없어요.
| Item | C# | Native (ref.) |
|---|---|---|
| 결과 / 데이터 객체 | readonly struct 값 복사, GC 관리 | IStove* 포인터, 호출자 Destroy |
| 파라미터 객체 | 일반 struct 직접 생성 후 값 전달 | Factory 함수로 생성, 호출자 Destroy |
| 콜백 결과 | IStoveCallbackResult (struct), 콜백 종료 후 자동 소멸 | IStoveCallbackResult* SDK 소유 |
| 콜백 컨텍스트 전달 | 람다 캡처 | void* userData 매개변수 |
본 API 의 비동기 메서드는 별도의 userData 매개변수를 받지 않아요. 콜백 안에서 사용할 게임 측 컨텍스트는 람다 캡처((cr, t) => { myCtx.Apply(t); }) 로 전달하세요.
콜백에 전달된 모든 매개변수는 매니지드 struct (값 복사) 이므로 콜백 종료 후에도 캡처해 두고 안전하게 사용할 수 있어요. Native API 의 "콜백 동안만 유효" 제약은 본 가이드에 적용되지 않아요.
Initialization Order
IStoveRestartAppIfNecessaryParam구조체를 생성하고Environment,GameId,AppKey,WaitTimeMilliSec,LaunchStoveLauncher,PlatformName을 설정해요. (IStoveRestartAppIfNecessaryParam)- Stove_RestartAppIfNecessary(restartParam, onFinished) 를 호출해요 — 비동기. 콜백은
Stove_RunCallback()이 호출되는 시점에 디스패치돼요. - 게임 메인 루프(메인/UI 스레드)에서 매 프레임 Stove_RunCallback() 을 호출하기 시작해요.
Stove_RestartAppIfNecessary()호출 직후부터 이 루프가 돌아야 위 (2)의 콜백이 디스패치되어 (4)의 초기화로 이어져요. - 콜백의
outcome.IsRestartRequired == false분기에서IStoveInitializeParam구조체를 생성해요. View 를 함께 사용하려면MainWndHandle, IAP 를 함께 사용하려면ShopKey도 설정해요. (IsRestartRequired == true면 SDK 가 런처를 통해 재실행을 처리하므로 현재 프로세스는 종료됨. IStoveInitializeParam) - 같은 분기에서 Stove_Initialize(initParam) 를 호출해요 — 동기,
IStoveResult를 즉시 반환해요.result.IsSuccessful로 성공 여부를 확인해요. - 종료 시 Stove_Uninitialize() 를 호출해요.
신규 인터페이스는 모듈별 초기화·종료가 없어요. Stove_Initialize() 한 번으로 결제·팝업·PC방·로그 등 모든 기능이 함께 동작해요.
using Stove.PCSDK.V3;
using static Stove.PCSDK.V3.Base;
// 1) 런처 확인 / 재실행 파라미터 구조체 생성 및 설정
var restartParam = new IStoveRestartAppIfNecessaryParam
{
Environment = "LIVE", // "QA" / "SANDBOX" / "LIVE"
GameId = "my_game_id",
AppKey = "my_app_key",
WaitTimeMilliSec = 5000,
LaunchStoveLauncher = true,
PlatformName = "stove",
};
// 2) 런처 실행 확인 (비동기). 콜백은 Stove_RunCallback() 이 호출되는 시점에 디스패치됩니다.
Stove_RestartAppIfNecessary(restartParam, (callbackResult, outcome) =>
{
if (outcome.IsRestartRequired)
return; // SDK 가 런처를 통해 재실행 처리, 현재 프로세스는 종료됨
// 4) SDK 초기화 (동기). initParam 의 MainWndHandle/ShopKey 설정에 따라 View·IAP 도 함께 초기화
var initParam = new IStoveInitializeParam
{
// View 를 함께 사용하려면 MainWndHandle, IAP 를 함께 사용하려면 ShopKey 도 설정
// MainWndHandle = myWindowHandle,
// ShopKey = "my_shop_key",
};
var result = Stove_Initialize(initParam);
if (result.IsSuccessful)
{
// 초기화 완료, SDK 사용 가능
}
else
{
// 실패 처리: result.ResultCode, result.ExceptionMessage
}
});
// 3) 매 프레임 / 매 tick 에서 콜백 실행 (메인 / UI 스레드)
// Stove_RestartAppIfNecessary() 호출 직후부터 이 루프가 돌아야 위 (2)의 콜백이 디스패치되어 (4) 초기화로 이어집니다.
void OnUpdate()
{
Stove_RunCallback();
}
// 5) 종료 시
Stove_Uninitialize();
Callback Execution Rules
- 모든 비동기 메서드의 콜백은
Stove_RunCallback()또는Stove_RunCallbackWithTimeout(timeoutMillisec)가 호출되는 스레드(메인 / UI 스레드) 에서 실행돼요. SDK 내부 스레드가 아니에요. - 콜백 시그니처는
delegate void On<Action>Callback(IStoveCallbackResult callbackResult, ...)형태이며, 성공 여부는callbackResult.Result.IsSuccessful로 판정해요. - 1회성 콜백(
Stove_VietnamAgeRatingNotification,Stove_VietnamOverimmersionNotification등) 은 렌더링이 가능한 시점 이후에 호출되어야 해요. 게임 시작 후 첫 프레임이 그려진 뒤 등록 / 호출하세요. - 반복 호출 콜백(
Stove_AccessTokenRenewed,Stove_OverImmersionNotification등) 에 등록한 delegate 는 SDK 가 종료되거나 등록이 해제될 때까지 참조돼요. 캡처한 객체의 수명에 주의하세요. - 1회성 비동기 메서드의
onFinished콜백은 필수 매개변수예요. 지정하지 않으면k_EStoveCommonResultCode_InvalidParam(5) 이 발생해요.
Common Interface
모든 모듈이 공유하는 타입은 각 문서로 링크만 해요. 내용은 각 문서에서 확인하세요.
- IStoveResult — 동기 메서드의 호출 결과예요. 메서드 코드, 결과 코드, 매니지드 예외 메시지를 담는 불변 구조체예요.
- IStoveCallbackResult — 비동기 콜백으로 전달되는 결과예요.
IStoveResult와 외부 에러 정보(HTTP 코드 등) 를 함께 담아요.
| Type | Document |
|---|---|
IStoveResult | IStoveResult |
IStoveCallbackResult | IStoveCallbackResult |
C# 에는 Native 의 IStoveTypeBase 에 대응하는 공개 타입이 없어요. 런타임 타입 식별은 내부 marshaling(네이티브 DLL 과의 상호운용) 과정에서만 쓰이며 API 표면에 노출되지 않아요. 자세한 내용은 EStoveBaseTypeKind 문서를 참고하세요.
Notes
Stove_RestartAppIfNecessary()는 반드시Stove_Initialize()보다 먼저 호출해야 하며, 그 콜백을 받으려면 호출 직후부터Stove_RunCallback()을 게임 루프에서 돌리고 있어야 해요.Stove_Initialize()는 동기 메서드라 콜백을 받지 않지만,Stove_RestartAppIfNecessary()의 콜백 안(outcome.IsRestartRequired == false분기)에서 호출해야 해요.- 본 API 의 비동기 메서드는
userData매개변수를 받지 않아요. 콜백 안에서 사용할 컨텍스트는 람다 캡처로 전달하세요.
See Also
| Document | Content |
|---|---|
| IStoveRestartAppIfNecessaryOutcome | Stove_RestartAppIfNecessary() 콜백으로 전달되는 결과 (IsRestartRequired) |
EStoveBaseMethodCode
종류 열거형 · 모듈 Base · 버전 3.5.0
Description
IStoveResult.MethodCode 로 조회하는 값으로, 어떤 SDK 메서드가 이 결과를 생성했는지 식별해요. 로깅과 오류 라우팅에 사용해요.
Declaration
public enum EStoveBaseMethodCode
{
k_EStoveBaseMethodCode_Invalid = -1,
k_EStoveBaseMethodCode_BaseInitialize = 1,
// ... 이하 열거값 표 참조
k_EStoveBaseMethodCode_GetTranslateLanguage = 119,
k_EStoveBaseMethodCode_Max = 0x7fffffff
}
Enum Values
Lifecycle / Versioning
| Code | Name | Description |
|---|---|---|
| -1 | k_EStoveBaseMethodCode_Invalid | 사용하지 않아요 |
| 1 | k_EStoveBaseMethodCode_BaseInitialize | Stove_Initialize |
| 2 | k_EStoveBaseMethodCode_BaseUninitialize | Stove_Uninitialize |
| 5 | k_EStoveBaseMethodCode_BaseGetVersion | Stove_GetVersion |
| — | 6 ~ 63 | 사용하지 않아요 (예약 구간) |
Public APIs
| Code | Name | Description |
|---|---|---|
| 64 | k_EStoveBaseMethodCode_GetAccessToken | Stove_GetAccessToken |
| 65 | k_EStoveBaseMethodCode_AccessTokenRenewed | Stove_AccessTokenRenewed |
| 66 | k_EStoveBaseMethodCode_GetUser | Stove_GetUser |
| 67 | k_EStoveBaseMethodCode_SetLanguage | Stove_SetLanguage / Stove_SetLanguageEx |
| 68 | k_EStoveBaseMethodCode_OverImmersionNotification | Stove_OverImmersionNotification |
| 69 | k_EStoveBaseMethodCode_ShutdownNotification | Stove_ShutdownNotification |
| — | 70, 71 | 사용하지 않아요 (폐기된 내부 메서드) |
| 72 | k_EStoveBaseMethodCode_SetGameProfile | Stove_SetGameProfile |
| 73 | k_EStoveBaseMethodCode_GetGds | Stove_GetGds |
| 74 | k_EStoveBaseMethodCode_GetSignin | Stove_GetSignin |
| 75 | k_EStoveBaseMethodCode_RestartAppIfNecessary | Stove_RestartAppIfNecessary(폐기 예정) |
| 76 | k_EStoveBaseMethodCode_RestartAppIfNecessaryAsync | Stove_RestartAppIfNecessary 의 비동기 처리 경로 |
| 77 | k_EStoveBaseMethodCode_OpenExternalUrl | Stove_OpenExternalUrl |
| 78 | k_EStoveBaseMethodCode_GetCloudSavingPath | Stove_GetCloudSavingPath — 스토어인디 전용 |
| 79 | k_EStoveBaseMethodCode_VietnamAgeRatingNotification | Stove_VietnamAgeRatingNotification |
| 80 | k_EStoveBaseMethodCode_VietnamOverimmersionNotification | Stove_VietnamOverimmersionNotification |
| 81 | k_EStoveBaseMethodCode_CloseAllPopups | Stove_CloseAllPopups(단일 바이너리 통합 — IAP+View 팝업을 함께 닫아요) |
| — | 82 ~ 95 | 사용하지 않아요 (예약 구간) |
Private getters (다른 SDK 모듈에 노출되는 비공개 게터 — 게임에는 노출되지 않음)
| Code | Name | Description |
|---|---|---|
| 115 | k_EStoveBaseMethodCode_GetEnvPrivate | 비공개 게터 — 다른 SDK 모듈 전용, 게임에는 노출되지 않아요 |
| 116 | k_EStoveBaseMethodCode_GetGameIdPrivate | 비공개 게터 — 다른 SDK 모듈 전용, 게임에는 노출되지 않아요 |
| 117 | k_EStoveBaseMethodCode_GetMemberNoPrivate | 비공개 게터 — 다른 SDK 모듈 전용, 게임에는 노출되지 않아요 |
| 118 | k_EStoveBaseMethodCode_GetPublicIp | 비공개 게터 — 다른 SDK 모듈 전용, 게임에는 노출되지 않아요 |
| 119 | k_EStoveBaseMethodCode_GetTranslateLanguage | 비공개 게터 — 다른 SDK 모듈 전용, 게임에는 노출되지 않아요 |
기타
| Code | Name | Description |
|---|---|---|
| — | 120 ~ 0x7ffffffe | 사용하지 않아요 (예약 구간) |
| 0x7fffffff | k_EStoveBaseMethodCode_Max | 사용하지 않아요 |
이름에 Internal 이 들어간 값(3, 4, 96 ~ 108, 110 ~ 114)은 표에서 제외해요. 109 는 소스에 이름 없이 "Deprecated" 주석만 있는 예약 번호예요.
Example
using static Stove.PCSDK.V3.Base;
IStoveResult result = Stove_Initialize();
if (result.MethodCode == (uint)EStoveBaseMethodCode.k_EStoveBaseMethodCode_BaseInitialize)
{
// 이 결과가 Stove_Initialize() 호출로 생성되었음을 확인하는 로직을 구현해 주세요.
}
Notes
- 96번대 이후의 Internal 메서드 코드는 재생시간 보고, 서버 설정, 토큰 처리 등 SDK 내부 동작에 사용되며 게임에서 직접 호출하는 API 와 대응하지 않아요.
- 115~119번의 Private 게터는 이름에
Internal이 없어 표에 포함했지만, 다른 SDK 모듈에만 노출되는 비공개 API 이며 게임에는 제공되지 않아요. IStoveResult.MethodCode는uint타입이므로 이 열거형 값과 비교할 때는(uint)EStoveBaseMethodCode.k_...로 형변환해요.- 이전 형상에서는 값 이름에 밑줄이 없었어요(
k_EStoveBaseMethodCodeBaseInitialize). 현재 소스는k_EStoveBaseMethodCode_BaseInitialize처럼 열거형 이름과 값 이름 사이에 밑줄이 들어가요.
Changelog
| Version | Change |
|---|---|
| 3.5.0 | 최초 제공 |
See Also
EStoveBaseTypeKind
종류 열거형 · 모듈 Base · 버전 3.5.0
Description
SDK 구조체의 구체적인 타입을 식별하는 값이에요. 신규 flat C 인터페이스에서는 Stove_CreateParam() 에 특정 파라미터 객체를 요청할 때, 그리고 IStoveTypeBase::GetTypeKind() 로 런타임 타입을 식별할 때 사용해요.
C# 인터페이스에는 Stove_CreateParam() 에 대응하는 공개 함수가 없어요. IStoveInitializeParam, IStoveSetGameProfileParam 같은 파라미터 구조체는 게임 코드가 new IStoveXxx { ... } 로 직접 생성하며, 이 열거형은 내부 marshaling(네이티브 DLL 과의 상호운용) 과정에서 SDK 내부적으로만 사용돼요.
값 범위는 0 ~ 999 예요.
Declaration
public enum EStoveBaseTypeKind
{
k_EStoveBaseTypeKind_Invalid = -1,
k_EStoveBaseTypeKind_Base = 0,
// ... 이하 열거값 표 참조
k_EStoveBaseTypeKind_SetGameProfileParam = 502,
k_EStoveBaseTypeKind_Max = 0x7fffffff,
}
Enum Values
Result / Data types (SDK 가 반환하거나 콜백으로 전달)
| Code | Name | Description |
|---|---|---|
| -1 | k_EStoveBaseTypeKind_Invalid | 사용하지 않아요 |
| 0 | k_EStoveBaseTypeKind_Base | 내부 기준 타입이에요. C# 인터페이스에는 대응하는 공개 구조체가 없어요. |
| 1 | k_EStoveBaseTypeKind_StoveResult | IStoveResult |
| 2 | k_EStoveBaseTypeKind_StoveCallbackResult | IStoveCallbackResult |
| 3 | k_EStoveBaseTypeKind_StoveUser | IStoveUser |
| 4 | k_EStoveBaseTypeKind_StoveAccessToken | IStoveAccessToken |
| 5 | k_EStoveBaseTypeKind_StoveGds | IStoveGds |
| 6 | k_EStoveBaseTypeKind_StoveSignin | IStoveSignin |
| 7 | k_EStoveBaseTypeKind_StoveOverImmersionInfo | IStoveOverImmersionInfo |
| 8 | k_EStoveBaseTypeKind_StoveVietnamAgeRatingInfo | IStoveVietnamAgeRatingInfo |
| 9 | k_EStoveBaseTypeKind_StoveVietnamOverimmersionInfo | IStoveVietnamOverimmersionInfo |
| 10 | k_EStoveBaseTypeKind_StoveShutdownInfo | IStoveShutdownInfo |
| 11 | k_EStoveBaseTypeKind_StoveRestartAppIfNecessaryOutcome | IStoveRestartAppIfNecessaryOutcome |
| — | 12 ~ 499 | 사용하지 않아요 (결과/데이터 타입과 파라미터 타입 구간 사이의 예약 구간) |
Parameter types (내부적으로 파라미터 marshaling 에 사용)
| Code | Name | Description |
|---|---|---|
| 500 | k_EStoveBaseTypeKind_RestartAppIfNecessaryParam | IStoveRestartAppIfNecessaryParam |
| 501 | k_EStoveBaseTypeKind_InitializeParam | IStoveInitializeParam |
| 502 | k_EStoveBaseTypeKind_SetGameProfileParam | IStoveSetGameProfileParam |
| — | 503 ~ 0x7ffffffe | 사용하지 않아요 (예약 구간) |
| 0x7fffffff | k_EStoveBaseTypeKind_Max | 사용하지 않아요 |
Example
// C# 게임 코드는 이 열거형을 직접 다루지 않습니다.
// 파라미터는 아래와 같이 값 타입을 직접 생성해서 사용합니다.
IStoveSetGameProfileParam gameProfileParam = new IStoveSetGameProfileParam
{
WorldId = "world_01",
CharacterNo = 123456789L,
};
Notes
- 신규 flat C 인터페이스에서는 이 열거형을
Stove_CreateParam()호출에 직접 사용하지만, C# 인터페이스는 대응하는 공개 생성 함수가 없어 게임 코드에서 이 열거형을 참조할 일이 거의 없어요. - 값 500(
k_EStoveBaseTypeKind_RestartAppIfNecessaryParam)이 신설되고InitializeParam/SetGameProfileParam이 501/502 로 한 칸씩 밀리는 등, 이전 형상(InitializeParam=500,GameProfileParams=501) 과 번호가 달라졌어요. StoveOverImmersionInfo(7),StoveShutdownInfo(10) 는 이전 형상에서StoveOverImmersion,StoveShutdown이라는 이름이었어요.
Changelog
| Version | Change |
|---|---|
| 3.5.0 | 최초 제공 |
See Also
EStoveCommonResultCode
종류 결과코드 · 모듈 Base · 버전 3.5.0
Description
모든 Stove SDK 모듈이 공통으로 사용하는 결과 코드예요. IStoveResult.ResultCode 로 조회하며, 0(Success)이면 성공이에요. 값 범위는 0~299 예요.
모듈별 대역으로 재배치된 전용 코드는 EStoveResultCode(300~503)를 참조하세요.
Declaration
public enum EStoveCommonResultCode
{
k_EStoveCommonResultCode_Success = 0,
k_EStoveCommonResultCode_Fail = 1,
// ... 이하 열거값 표 참조
k_EStoveCommonResultCode_UnknownError = 255,
k_EStoveCommonResultCode_Max = 0x7fffffff
}
Enum Values
일반 결과
| Code | Name | Description | Show to User | In-Game Message |
|---|---|---|---|---|
| 0 | k_EStoveCommonResultCode_Success | 성공 | x | |
| 1 | k_EStoveCommonResultCode_Fail | 일반 실패 (상세 원인은 로그/ErrorMessage 로 확인) | x |
설정/파라미터 검증 실패
| Code | Name | Description | Show to User | In-Game Message |
|---|---|---|---|---|
| 2 | k_EStoveCommonResultCode_InvalidConfig | 설정값이 유효하지 않아요 (설정값 확인) | x | |
| 3 | k_EStoveCommonResultCode_InvalidLogLevel | 로그 레벨 값이 유효하지 않아요 (로그 레벨 값 확인) | x | |
| 4 | k_EStoveCommonResultCode_InvalidLogPath | 로그 경로가 유효하지 않아요 (로그 경로 확인) | x | |
| 5 | k_EStoveCommonResultCode_InvalidParam | 파라미터가 유효하지 않아요 (호출부 파라미터 값 확인 후 수정) | x | |
| — | 6 ~ 15 | 사용하지 않아요 (예약 구간) | x |
초기화 상태 오류
| Code | Name | Description | Show to User | In-Game Message |
|---|---|---|---|---|
| 16 | k_EStoveCommonResultCode_BaseNotInitialized | SDK 가 초기화되지 않았어요 (Stove_Initialize() 선행 호출) | x | |
| 17 | k_EStoveCommonResultCode_NotInitialized | 해당 모듈이 초기화되지 않았어요 (해당 모듈 초기화 선행) | x | |
| 18 | k_EStoveCommonResultCode_AlreadyInitialized | 이미 초기화되어 있어요 (중복 초기화 호출 제거) | x |
토큰/엔티티 오류
| Code | Name | Description | Show to User | In-Game Message |
|---|---|---|---|---|
| 19 | k_EStoveCommonResultCode_InvalidAccessToken | AccessToken 이 유효하지 않아요 (Stove_GetAccessToken() 등으로 토큰 재발급) | O | 로그인 세션이 만료되었습니다. 게임 종료 후 다시 실행해 주세요. [확인] |
| 20 | k_EStoveCommonResultCode_NullTokenEntity | 토큰 엔티티가 null 이에요 (토큰 발급 상태 확인) | x | |
| 21 | k_EStoveCommonResultCode_NullEntity | 엔티티가 null 이에요 (응답 객체 null 여부 확인) | x |
HTTP/응답 오류
| Code | Name | Description | Show to User | In-Game Message |
|---|---|---|---|---|
| 22 | k_EStoveCommonResultCode_HttpError | HTTP 오류가 발생했어요 (네트워크 상태 확인 후 재시도) | O | 네트워크 연결이 원활하지 않습니다. 네트워크 상태를 확인하고 다시 실행해 주세요. [확인] |
| 23 | k_EStoveCommonResultCode_ResponseError | 서버 응답 오류예요 (서버 응답 확인) | O | 네트워크 연결이 원활하지 않습니다. 네트워크 상태를 확인하고 다시 실행해 주세요. [확인] |
| 24 | k_EStoveCommonResultCode_ResponseInvalidCode | 서버 응답 코드가 유효하지 않아요 (서버 응답 코드 확인) | O | 네트워크 연결이 원활하지 않습니다. 네트워크 상태를 확인하고 다시 실행해 주세요. [확인] |
| 25 | k_EStoveCommonResultCode_ResponseValueIsNull | 서버 응답 값이 null 이에요 (서버 응답 값 확인) | O | 네트워크 연결이 원활하지 않습니다. 네트워크 상태를 확인하고 다시 실행해 주세요. [확인] |
| 26 | k_EStoveCommonResultCode_ResponseInvalidValueFormat | 서버 응답 값의 형식이 유효하지 않아요 (서버 응답 형식 확인) | O | 네트워크 연결이 원활하지 않습니다. 네트워크 상태를 확인하고 다시 실행해 주세요. [확인] |
기타 상태
| Code | Name | Description | Show to User | In-Game Message |
|---|---|---|---|---|
| — | 27, 28 | 사용하지 않아요 (폐기된 번호) | x | |
| 29 | k_EStoveCommonResultCode_AsyncOperationInProgress | 비동기 작업이 이미 진행 중이에요 (진행 중인 비동기 작업 완료 후 재호출) | x | |
| 30 | k_EStoveCommonResultCode_BaseUninitialized | SDK 가 이미 해제(Stove_Uninitialize)되었어요 (Stove_Initialize() 재호출) | x | |
| 31 | k_EStoveCommonResultCode_NotSupportedCountry | 지원하지 않는 국가/지역이에요 (국가/지역 제한 확인 후 호출 중단) | x | |
| 33 | k_EStoveCommonResultCode_PopupNotCreated | 팝업이 생성되지 않고 종료되었어요. 내부 정리 전용 코드로, onDestroy 콜백으로만 전달되며 래퍼가 가로채 사용자 delegate 를 호출하지 않아요(게임 코드에는 전달되지 않아요) | x | |
| 34 | k_EStoveCommonResultCode_WebviewClosedBeforeComplete | 작업이 끝나기 전에 웹뷰가 닫혔어요 (사용자의 취소로 간주하고 재시도 여부 판단) | O | 구매가 정상적으로 완료되지 않았습니다. 다시 시도해 주세요. [확인] |
| — | 32, 35 ~ 39 | 사용하지 않아요 (예약 구간) | x |
Local DB 실패 (모든 Stove SDK 모듈 공통)
| Code | Name | Description | Show to User | In-Game Message |
|---|---|---|---|---|
| 40 | k_EStoveCommonResultCode_LocalDbCreateWorkingDirectoryFailed | 로컬 DB 작업 디렉터리 생성에 실패했어요 (디렉터리 권한/경로 확인) | x | |
| 41 | k_EStoveCommonResultCode_LocalDbConnectFailed | 로컬 DB 연결에 실패했어요 (재시도) | x | |
| 42 | k_EStoveCommonResultCode_LocalDbCreateTableFailed | 로컬 DB 테이블 생성에 실패했어요 (재시도) | x | |
| 43 | k_EStoveCommonResultCode_LocalDbDisconnectFailed | 로컬 DB 연결 해제에 실패했어요 (재시도) | x | |
| 44 | k_EStoveCommonResultCode_LocalDbWriteFailed | 로컬 DB 쓰기에 실패했어요 (재시도) | x | |
| — | 45 ~ 59 | 사용하지 않아요 (Local DB/페이로드/저장소 대역을 위한 예약 구간) | x |
웹뷰/팝업 UI 실패 (모듈 공통)
| Code | Name | Description | Show to User | In-Game Message |
|---|---|---|---|---|
| 60 | k_EStoveCommonResultCode_ViewUiNotInitialized | 팝업/웹뷰 UI 서브시스템이 초기화되지 않았어요 (View/IAP 초기화 여부 확인) | x | |
| 61 | k_EStoveCommonResultCode_ViewUiUninitFailed | 팝업/웹뷰 UI 서브시스템 종료에 실패했어요 (로그 확인) | x | |
| 62 | k_EStoveCommonResultCode_WebviewCreateFail | 웹뷰 생성에 실패했어요 (재시도) | x | |
| 63 | k_EStoveCommonResultCode_WebviewLoadUrlFail | 웹뷰에서 URL 로드에 실패했어요 (URL/네트워크 상태 확인) | x | |
| 64 | k_EStoveCommonResultCode_WebviewCreateCookieFail | 웹뷰 쿠키 설정에 실패했어요 (재시도) | O | (View) 페이지를 불러올 수 없습니다. 다시 시도해 주세요. [확인] (IAP) 구매를 위해서는 약관 동의가 필요합니다. 현재 약관 동의 화면을 불러오지 못했습니다. 다시 시도해 주세요. [확인] |
| 65 | k_EStoveCommonResultCode_WebviewCloseAllFail | 모든 웹뷰/팝업 닫기에 실패했어요 (재시도) | x | |
| 66 | k_EStoveCommonResultCode_WebviewCloseFail | 웹뷰/팝업 닫기에 실패했어요 (재시도) | x | |
| 67 | k_EStoveCommonResultCode_NoPopupData | 표시할 팝업 데이터가 없어요 (정상 상태로 처리(팝업 표시 대상 없음)) | O | 팝업 설정 정보가 존재하지 않아 표시할 창이 없습니다. [확인] |
| 68 | k_EStoveCommonResultCode_CloseAllPopupsFailed | Stove_CloseAllPopups() 가 하나 이상의 팝업을 닫지 못했어요(IAP+View 통합 호출) (재시도) | x | |
| — | 69 ~ 79 | 사용하지 않아요 (웹뷰/팝업 UI 코드를 위한 예약 구간) | x |
파라미터/페이로드 검증 (모듈 공통)
| Code | Name | Description | Show to User | In-Game Message |
|---|---|---|---|---|
| 80 | k_EStoveCommonResultCode_ParameterLengthExceeded | 요청 파라미터가 최대 길이를 초과했어요 (파라미터 길이 확인) | O | 결제 정보가 유효하지 않아 결제를 진행할 수 없습니다. 다시 시도해 주세요. [확인] |
| 81 | k_EStoveCommonResultCode_InvalidJsonString | JSON 문자열 형식이 유효하지 않아요 (요청 페이로드 확인) | O | 결제 정보가 유효하지 않아 결제를 진행할 수 없습니다. 다시 시도해 주세요. [확인] |
| 82 | k_EStoveCommonResultCode_PayloadSizeExceeded | 페이로드가 허용 최대 크기를 초과했어요 (페이로드 크기 확인) | x | |
| — | 83 ~ 248 | 사용하지 않아요 (예약 구간) | x |
네트워크 전송 실패
| Code | Name | Description | Show to User | In-Game Message |
|---|---|---|---|---|
| 249 | k_EStoveCommonResultCode_NetworkTransportError | 네트워크 전송 오류예요. IStoveCallbackResult.ExternalError 로 HTTP 백엔드의 네이티브 오류 코드가 전달돼요(예: WinHTTP 12002/12007/12029) (ExternalError 값을 확인 후 재시도) | x | |
| — | 250 | 사용하지 않아요 (예약 구간) | x |
시스템/런타임 실패
| Code | Name | Description | Show to User | In-Game Message |
|---|---|---|---|---|
| 251 | k_EStoveCommonResultCode_PcsdkDllNotFound | PCSDK DLL 을 찾을 수 없어요 (PCSDK DLL 배치 확인) | x | |
| 252 | k_EStoveCommonResultCode_NotImplemented | 구현되지 않은 기능이에요 (호출 제거 또는 대체 API 확인) | x | |
| 253 | k_EStoveCommonResultCode_UnmanagedException | 관리되지 않는(unmanaged) 예외가 발생했어요 (예외 로그 확인) | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
| 254 | k_EStoveCommonResultCode_ManagedException | 관리되는(managed) 예외가 발생했어요 (예외 로그 확인) | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
| 255 | k_EStoveCommonResultCode_UnknownError | 알 수 없는 오류예요 (상세 로그 확인) | x | |
| — | 256 ~ 0x7ffffffe | 사용하지 않아요 (예약 구간) | x | |
| 0x7fffffff | k_EStoveCommonResultCode_Max | 사용하지 않아요 | x |
아래 코드를 받으면 반드시 게임을 종료해야 해요. 정상 진행이 불가능한 상태예요.
19k_EStoveCommonResultCode_InvalidAccessToken— 로그인 세션 만료로 게임 종료 후 재실행이 필요해요
Example
using static Stove.PCSDK.V3.Base;
IStoveResult result = Stove_Uninitialize();
if (result.IsSuccessful)
{
// 성공 시 로직을 구현해 주세요.
}
else
{
// 실패 시 로직을 구현해 주세요.
}
Notes
- 모든 SDK API 및 다른 SDK 모듈이 공통으로 사용하는 결과 코드예요.
- 모듈별 대역으로 재배치된 전용 코드는 EStoveResultCode(300~503)로 정의되며, 번호가 이 열거형과 겹치지 않아요.
- 단일 바이너리 통합으로 대역이 크게 늘었어요. 이전 형상에서는 이 열거형이 32번대까지만 정의되어 있었지만, 현재는 웹뷰/팝업 UI 코드(60 ~ 68), 파라미터/페이로드 검증 코드(80 ~ 82) 등이 새로 이 열거형에 흡수되어 0 ~ 255 전 구간에 값이 분포해요.
k_EStoveCommonResultCode_PopupNotCreated(33)는 내부 정리 전용이며 사용자 delegate 로 전달되지 않지만, 이름에Internal이 포함되어 있지 않아 표에는 포함했어요.
Changelog
| Version | Change |
|---|---|
| 3.5.0 | 최초 제공 (구 형상 대비 웹뷰/팝업 UI, 파라미터/페이로드 검증 코드 흡수) |
See Also
EStoveDiscountType
종류 열거형 · 모듈 IAP · 버전 3.5.0
Description
IStoveProduct.DiscountType 으로 반환되는 값이에요. IStoveProduct.DiscountTypeValue 의 값을 퍼센트로 해석할지, 정액으로 해석할지를 결정해요.
Declaration
public enum EStoveDiscountType
{
k_EStoveDiscountType_None = 0,
k_EStoveDiscountType_FixedRate = 1,
k_EStoveDiscountType_FlatRate = 2,
k_EStoveDiscountType_Max = 0x7fffffff
}
Enum Values
| Code | Name | Description |
|---|---|---|
| 0 | k_EStoveDiscountType_None | 할인 없음 |
| 1 | k_EStoveDiscountType_FixedRate | 비율 할인 (예: DiscountTypeValue 가 10이면 10% 할인) |
| 2 | k_EStoveDiscountType_FlatRate | 정액 할인 (예: DiscountTypeValue 가 상품 화폐 단위의 정액 할인 금액) |
| 0x7fffffff | k_EStoveDiscountType_Max | 사용하지 않아요 |
Example
if (product.DiscountType == EStoveDiscountType.k_EStoveDiscountType_FixedRate)
{
// product.DiscountTypeValue 를 퍼센트로 해석하는 로직을 구현해 주세요.
}
Notes
IStoveProduct.IsDiscounted가true인 상품에서만 이 값이 유효해요.
See Also
EStoveIAPMethodCode
종류 열거형 · 모듈 IAP · 버전 3.5.0
Description
IStoveResult.MethodCode 로 조회하며, 어떤 결제 API 가 이 결과를 만들었는지 식별해요. 로깅이나 오류 처리 분기에 사용해요.
값은 IAP 모듈 블록(2000번대) 안에서 순번으로 부여돼요.
Declaration
public enum EStoveIAPMethodCode
{
k_EStoveIAPMethodCode_Invalid = -1,
k_EStoveIAPMethodCode_FetchShopCategories = 2000,
// ... 이하 열거값 표 참조
k_EStoveIAPMethodCode_Max = 0x7fffffff
}
Enum Values
| Code | Name | Description |
|---|---|---|
| -1 | k_EStoveIAPMethodCode_Invalid | 사용하지 않아요 |
| 2000 | k_EStoveIAPMethodCode_FetchShopCategories | Stove_FetchShopCategories |
| 2001 | k_EStoveIAPMethodCode_FetchProducts | Stove_FetchProducts |
| 2002 | k_EStoveIAPMethodCode_StartPurchase | Stove_StartPurchase |
| 2003 | k_EStoveIAPMethodCode_ConfirmPurchase | Stove_ConfirmPurchase |
| 2004 | k_EStoveIAPMethodCode_FetchInventory | Stove_FetchInventory |
| 2005 | k_EStoveIAPMethodCode_FetchTermsAgreement | Stove_FetchTermsAgreement |
| 2006 | k_EStoveIAPMethodCode_WithdrawGame | Stove_WithdrawGame — 로스트아크모바일 전용 |
| 0x7fffffff | k_EStoveIAPMethodCode_Max | 사용하지 않아요 |
Example
if (callbackResult.Result.MethodCode == (uint)EStoveIAPMethodCode.k_EStoveIAPMethodCode_StartPurchase)
{
// Stove_StartPurchase() 호출에서 발생한 결과입니다.
}
Notes
- 모듈별
EStoveIAPResultCode는 삭제되었어요. 결과 코드는 공통(EStoveCommonResultCode)과 모듈별(EStoveResultCode) 열거형으로 통합되었어요. IStoveResult.MethodCode는uint타입이므로 비교 시 형변환이 필요해요.- 단일 바이너리 통합 이전에 있던
Initialize/Uninitialize/GetVersion등 라이프사이클 코드는 Base 쪽 열거형으로 옮겨졌어요.
See Also
EStoveIAPTypeKind
종류 열거형 · 모듈 IAP · 버전 3.5.0
Description
Native(C) 인터페이스에서는 Stove_CreateParam() 에 전달해 원하는 결제 파라미터 객체를 생성하고, IStoveTypeBase::GetTypeKind() 로 객체의 실제 타입을 런타임에 확인하는 용도로 사용해요.
C# 인터페이스에서는 파라미터가 일반 struct(IStoveFetchProductsParam 등)로 제공되므로 호출자가 이 값을 직접 사용할 일은 없어요. Interop 계층이 네이티브 파라미터 객체를 생성할 때 내부적으로 이 값을 사용해요.
값의 범위는 2000~2999 예요. 이 중 2000번대는 SDK 가 콜백으로 전달하는 결과/데이터 타입이고, 2500번대는 파라미터 타입이에요. 값이 20개를 넘어 성격별로 나누어 정리했어요.
Declaration
public enum EStoveIAPTypeKind
{
k_EStoveIAPTypeKind_Invalid = -1,
k_EStoveIAPTypeKind_ShopCategory = 2000,
// ... 이하 열거값 표 참조
k_EStoveIAPTypeKind_Max = 0x7fffffff
}
Enum Values
| Code | Name | Description |
|---|---|---|
| -1 | k_EStoveIAPTypeKind_Invalid | 사용하지 않아요 |
결과 / 데이터 타입 (SDK 가 콜백으로 전달)
| Code | Name | Description |
|---|---|---|
| 2000 | k_EStoveIAPTypeKind_ShopCategory | IStoveShopCategory — 상점 카테고리 항목 |
| 2001 | k_EStoveIAPTypeKind_Product | IStoveProduct — 상품 항목 |
| 2002 | k_EStoveIAPTypeKind_StartPurchaseOutcome | IStoveStartPurchaseOutcome — 구매 시작 결과 (renamed from PurchaseResult) |
| 2003 | k_EStoveIAPTypeKind_PurchasedProduct | IStovePurchasedProduct — 구매 확정된 상품 항목 |
| 2004 | k_EStoveIAPTypeKind_ChargeInfo | IStoveChargeInfo — 결제 화폐(차지) 정보 |
| 2005 | k_EStoveIAPTypeKind_InventoryItem | IStoveInventoryItem — 인벤토리(구매 내역) 항목 |
| — | 2006 | 사용하지 않아요 (VoidedPurchase — 내부 전용으로 격하) |
| — | 2007 | 사용하지 않아요 (환불 조회(VoidedPurchasesEx) 기능이 소스에서 삭제되어 예약 번호로 남음) |
| 2008 | k_EStoveIAPTypeKind_ConfirmPurchaseOutcome | IStoveConfirmPurchaseOutcome — 구매 확정 결과 |
| 2009 | k_EStoveIAPTypeKind_WithdrawGameOutcome | IStoveWithdrawGameOutcome — 게임 탈퇴 결과 (로스트아크모바일 전용) |
| 2010 | k_EStoveIAPTypeKind_TermsAgreementOutcome | IStoveTermsAgreementOutcome — 약관 동의 조회 결과 |
| 2011 | k_EStoveIAPTypeKind_ShopCategoryList | IStoveShopCategoryList — 상점 카테고리 목록 |
| 2012 | k_EStoveIAPTypeKind_ProductList | IStoveProductList — 상품 목록 |
| 2013 | k_EStoveIAPTypeKind_InventoryList | IStoveInventoryList — 인벤토리(구매 내역) 목록 |
파라미터 타입 (호출자가 Stove_CreateParam 으로 생성)
| Code | Name | Description |
|---|---|---|
| 2500 | k_EStoveIAPTypeKind_FetchProductsParam | IStoveFetchProductsParam — 상품 조회 파라미터 |
| 2501 | k_EStoveIAPTypeKind_OrderProductParam | IStoveOrderProductParam — 주문 상품 파라미터 |
| 2502 | k_EStoveIAPTypeKind_PurchaseParam | IStovePurchaseParam — 구매 동작 파라미터 |
| 2503 | k_EStoveIAPTypeKind_StartPurchaseParam | IStoveStartPurchaseParam — 구매 시작 파라미터 |
| 2504 | k_EStoveIAPTypeKind_FetchTermsAgreementParam | IStoveFetchTermsAgreementParam — 약관 동의 조회 파라미터 |
| — | 2505 | 사용하지 않아요 (PaymentParam — 내부 전용으로 격하) |
| 2506 | k_EStoveIAPTypeKind_WithdrawGameParam | IStoveWithdrawGameParam — 게임 탈퇴 파라미터 (로스트아크모바일 전용) |
| 2507 | k_EStoveIAPTypeKind_ConfirmPurchaseParam | IStoveConfirmPurchaseParam — 구매 확정 파라미터 |
| — | 2508 | 사용하지 않아요 (환불 조회(FetchVoidedPurchasesExParam) 기능이 소스에서 삭제되어 예약 번호로 남음) |
| Code | Name | Description |
|---|---|---|
| 0x7fffffff | k_EStoveIAPTypeKind_Max | 사용하지 않아요 |
VoidedPurchase · PaymentParam 관련 번호는 내부 전용으로 전환되어 표에서 제외했어요. VoidedPurchasesEx · FetchVoidedPurchasesExParam 관련 번호(2007, 2508)는 환불 조회 기능 자체가 소스에서 삭제되어 예약 번호로만 남아 있어요. v2 관리형 API 에는 VoidedPurchase 계열 타입이 제공되지 않아요.
Example
// C# 인터페이스에서는 이 값을 직접 사용하지 않으며,
// 아래와 같이 대응하는 struct 를 바로 생성해 사용합니다.
var fetchProductsParam = new IStoveFetchProductsParam { CategoryId = "", PageIndex = 1, PageSize = 20 };
Notes
- Base, IAP 등 모듈별 TypeKind 열거형은 서로 겹치지 않는 정수 범위를 사용해요.
- 2000번대(결과/데이터 타입)는 호출자가 직접 생성하지 않으며, 콜백으로 전달되는 값의 타입으로만 나타나요.
k_EStoveIAPTypeKind_StartPurchaseOutcome은 구 인터페이스의IStovePurchaseResult에 대응해요. 이름이 바뀌었어요.
See Also
EStoveLocale
종류 열거형 · 모듈 Base · 버전 3.5.0
Description
PCSDK UI 언어 선택자예요. k_EStoveLocale_System 은 사용자의 OS 언어를 따라요.
[Obsolete] 로 표시된 Stove_SetLanguage(EStoveLocale language) 오버로드에서 사용해요. 이 오버로드는 내부적으로 값을 문자열로 변환해 Stove_SetLanguageEx(string language) 와 동일한 네이티브 API 를 호출해요.
이 열거형을 사용하는
Stove_SetLanguage(EStoveLocale)오버로드는[Obsolete("Use Stove_SetLanguageEx(string language) instead.")]로 표시되어 있어요. 신규 코드는 문자열을 받는Stove_SetLanguageEx(string)를 사용해야 해요.
Declaration
public enum EStoveLocale
{
k_EStoveLocale_Invalid = -1,
k_EStoveLocale_System = 0,
k_EStoveLocale_En = 1,
k_EStoveLocale_Ko = 2,
k_EStoveLocale_Ja = 3,
k_EStoveLocale_ZhCn = 4,
k_EStoveLocale_ZhTw = 5,
k_EStoveLocale_De = 6,
k_EStoveLocale_Fr = 7,
k_EStoveLocale_Es = 8,
k_EStoveLocale_Pt = 9,
k_EStoveLocale_Th = 10,
k_EStoveLocale_Vi = 11,
k_EStoveLocale_Max = 0x7fffffff
}
Enum Values
| Code | Name | Description |
|---|---|---|
| -1 | k_EStoveLocale_Invalid | 사용하지 않아요 |
| 0 | k_EStoveLocale_System | OS 언어를 따라요("system" 문자열로 매핑) |
| 1 | k_EStoveLocale_En | 영어("en") |
| 2 | k_EStoveLocale_Ko | 한국어("ko") |
| 3 | k_EStoveLocale_Ja | 일본어("ja") |
| 4 | k_EStoveLocale_ZhCn | 중국어 간체("zh-cn") |
| 5 | k_EStoveLocale_ZhTw | 중국어 번체("zh-tw") |
| 6 | k_EStoveLocale_De | 독일어("de") |
| 7 | k_EStoveLocale_Fr | 프랑스어("fr") |
| 8 | k_EStoveLocale_Es | 스페인어("es") |
| 9 | k_EStoveLocale_Pt | 포르투갈어("pt") |
| 10 | k_EStoveLocale_Th | 태국어("th") |
| 11 | k_EStoveLocale_Vi | 베트남어("vi") |
| 0x7fffffff | k_EStoveLocale_Max | 사용하지 않아요 |
Example
using static Stove.PCSDK.V3.Base;
// 신규 코드는 Stove_SetLanguageEx(string) 를 사용해야 합니다.
IStoveResult result = Stove_SetLanguageEx("ko");
Notes
EStoveLocale은 C# 인터페이스에만 있는 열거형이에요. 신규 flat C 인터페이스에는 대응하는 열거형이 없으며, 언어 설정은 문자열(const wchar_t*) 하나만 받는Stove_SetLanguage()로 제공돼요.- C# 소스(
BaseAPIV2.cs)의LocaleToString()은 이 열거형 값을 소문자 문자열로 변환해요. 매핑 규칙은'_' → '-'(예:k_EStoveLocale_ZhCn→ "zh-cn")이에요. k_EStoveLocale_Invalid,k_EStoveLocale_Max는 변환 시 모두 "system" 으로 처리돼요.- 이 열거형을 사용하는
Stove_SetLanguage(EStoveLocale)API 자체가[Obsolete]이며, 신규 코드는Stove_SetLanguageEx(string)를 사용해야 해요.
Changelog
| Version | Change |
|---|---|
| 3.5.0 | 최초 제공 |
See Also
- 없음
EStoveLogMethodCode
종류 열거형 · 모듈 Log · 버전 3.5.0
Description
IStoveResult 를 만든 로그 기능의 API 가 무엇인지 식별하는 값이에요. IStoveResult.MethodCode 로 조회할 수 있으며, 로그 기록이나 오류 처리 분기에 사용해요.
이 열거형이 쓰는 정수 범위는 6000 ~ 6999 예요.
Declaration
public enum EStoveLogMethodCode
{
k_EStoveLogMethodCode_Invalid = -1,
k_EStoveLogMethodCode_SendLog = 6000,
k_EStoveLogMethodCode_Max = 0x7fffffff
}
Enum Values
| Code | Name | Description |
|---|---|---|
| -1 | k_EStoveLogMethodCode_Invalid | 사용하지 않아요 |
| 6000 | k_EStoveLogMethodCode_SendLog | Stove_SendLog |
| 0x7fffffff | k_EStoveLogMethodCode_Max | 사용하지 않아요 |
Example
using static Stove.PCSDK.V3.Log;
void OnSendLogCallback(IStoveCallbackResult callbackResult)
{
uint methodCode = callbackResult.Result.MethodCode; // k_EStoveLogMethodCode_SendLog
}
Notes
- 로그 기능은 공개 API 가 Stove_SendLog 하나뿐이므로 MethodCode 값도 하나예요.
- 이전 인터페이스에 있던 모듈별 결과 코드 열거형
EStoveLogResultCode는 삭제되었어요. 실패 원인은IStoveResult.ResultCode로 확인하며, 값은 모듈별 EStoveResultCode 또는 공통 EStoveCommonResultCode 에 정의되어 있어요.
See Also
EStoveLogTypeKind
종류 열거형 · 모듈 Log · 버전 3.5.0
Description
로그 기능이 다루는 파라미터 구조체의 구체적인 타입을 식별하는 값이에요.
이 열거형이 쓰는 정수 범위는 6000 ~ 6999 예요.
Declaration
public enum EStoveLogTypeKind
{
k_EStoveLogTypeKind_Invalid = -1,
k_EStoveLogTypeKind_SendLogParam = 6500,
k_EStoveLogTypeKind_Max = 0x7fffffff
}
Enum Values
| Code | Name | Description |
|---|---|---|
| -1 | k_EStoveLogTypeKind_Invalid | 사용하지 않아요 |
| 6500 | k_EStoveLogTypeKind_SendLogParam | IStoveSendLogParam |
| 0x7fffffff | k_EStoveLogTypeKind_Max | 사용하지 않아요 |
Example
// C# 인터페이스는 IStoveSendLogParam 을 직접 생성해 사용하며,
// 이 열거형 값을 API 호출에 직접 전달하지 않습니다.
Notes
- 로그 기능이 정의하는 파라미터 타입은 IStoveSendLogParam 하나뿐이며, 결과/데이터 타입은 없어요(콜백은
IStoveCallbackResult만 전달해요). 6000~6999범위는 Log 전용으로 예약되어 있어 다른 모듈의 TypeKind 값과 겹치지 않아요.
See Also
EStoveOverlayMode
종류 열거형 · 모듈 Base · 버전 3.5.0
Description
베트남 연령등급 고지, 과몰입 방지 고지 등 규제/알림 오버레이의 표시 상태를 나타내는 값이에요.
IStoveVietnamAgeRatingInfo.OverlayMode, IStoveVietnamOverimmersionInfo.OverlayMode 로 조회해요(두 프로퍼티 모두 int 타입이며, 이 열거형 값을 담아요).
Declaration
public enum EStoveOverlayMode
{
k_EStoveOverlayMode_Invalid = -1,
k_EStoveOverlayMode_Show = 0,
k_EStoveOverlayMode_Hide = 1,
k_EStoveOverlayMode_Expanded = 2,
k_EStoveOverlayMode_Max = 0x7fffffff
}
Enum Values
| Code | Name | Description |
|---|---|---|
| -1 | k_EStoveOverlayMode_Invalid | 사용하지 않아요 |
| 0 | k_EStoveOverlayMode_Show | 오버레이를 표시해요 |
| 1 | k_EStoveOverlayMode_Hide | 오버레이를 숨겨요 |
| 2 | k_EStoveOverlayMode_Expanded | 오버레이를 확장된 형태로 표시해요 |
| 0x7fffffff | k_EStoveOverlayMode_Max | 사용하지 않아요 |
Example
using static Stove.PCSDK.V3.Base;
void OnVietnamAgeRatingNotificationCallback(IStoveCallbackResult callbackResult, IStoveVietnamAgeRatingInfo ageRatingInfo)
{
if (ageRatingInfo.OverlayMode == (int)EStoveOverlayMode.k_EStoveOverlayMode_Show)
{
// 오버레이를 표시하는 로직을 구현해 주세요.
}
}
Notes
k_EStoveOverlayMode_Expanded는 베트남 과몰입 방지 고지(IStoveVietnamOverimmersionInfo)에서만 사용되는 값이에요.OverlayMode프로퍼티는int타입이므로 이 열거형 값과 비교할 때는(int)EStoveOverlayMode.k_...로 형변환해요.- 이전 형상에서는 값 이름에 밑줄이 없었어요(
k_EStoveOverlayModeInvalid). 현재 소스는k_EStoveOverlayMode_Invalid처럼 열거형 이름과 값 이름 사이에 밑줄이 들어가요.
Changelog
| Version | Change |
|---|---|
| 3.5.0 | 최초 제공 |
See Also
EStovePCBangMethodCode
종류 열거형 · 모듈 PCBang · 버전 3.5.0
Description
IStoveResult 를 만든 PC방 기능의 API 가 무엇인지 식별하는 값이에요. IStoveResult.MethodCode 로 조회할 수 있으며, 로그 기록이나 오류 처리 분기에 사용해요.
이 열거형이 쓰는 정수 범위는 3000 ~ 3999 이며, 공개 API 순서대로 순차 부여돼요.
Declaration
public enum EStovePCBangMethodCode
{
k_EStovePCBangMethodCode_Invalid = -1,
k_EStovePCBangMethodCode_Login = 3000,
k_EStovePCBangMethodCode_Logout = 3001,
k_EStovePCBangMethodCode_CheckStatus = 3002,
k_EStovePCBangMethodCode_RefreshBenefit = 3003,
k_EStovePCBangMethodCode_Max = 0x7fffffff
}
Enum Values
| Code | Name | Description |
|---|---|---|
| -1 | k_EStovePCBangMethodCode_Invalid | 사용하지 않아요 |
| 3000 | k_EStovePCBangMethodCode_Login | Stove_PCBangLogin 의 onUserLogin 콜백 결과예요. |
| 3001 | k_EStovePCBangMethodCode_Logout | Stove_PCBangLogout |
| 3002 | k_EStovePCBangMethodCode_CheckStatus | Stove_PCBangCheckStatus |
| 3003 | k_EStovePCBangMethodCode_RefreshBenefit | Stove_PCBangLogin 의 onRefreshBenefit 콜백 결과예요. |
| 0x7fffffff | k_EStovePCBangMethodCode_Max | 사용하지 않아요 |
Example
using static Stove.PCSDK.V3.PCBang;
void OnRefreshPCBangBenefitCallback(IStoveCallbackResult callbackResult, IStovePCBangBenefitInfo benefitInfo)
{
uint methodCode = callbackResult.Result.MethodCode; // k_EStovePCBangMethodCode_RefreshBenefit
}
Notes
k_EStovePCBangMethodCode_Login과k_EStovePCBangMethodCode_RefreshBenefit은 모두 Stove_PCBangLogin 한 번의 호출에서 나오지만, 서로 다른 콜백(onUserLogin/onRefreshBenefit)에 대응하는 별도 코드예요.onRefreshBenefit은 4분 주기로 반복 호출되며, 유료·무료 상태 모두에서 호출돼요.- 이전 인터페이스의
CheckUserStatusAPI 는Stove_PCBangCheckStatus로 이름이 바뀌었어요. - 이 열거형에는 결과 코드가 없어요. 실패 원인은
IStoveResult.ResultCode로 확인하며, 값은 모듈별 EStoveResultCode 또는 공통 EStoveCommonResultCode 에 정의되어 있어요. PC방 기능 전용 결과 코드 열거형은 없어요.
See Also
EStovePCBangPremium
종류 열거형 · 모듈 PCBang · 버전 3.5.0
Description
로그인한 사용자의 PC방 프리미엄(유료) 이용 상태를 나타내는 값이에요. IStovePCBangLoginOutcome.PremiumCheck, IStovePCBangBenefitInfo.PremiumCheck, IStovePCBangStatus.PremiumCheck 가 이 값을 반환해요.
이 열거형에는 별도의 성공/실패 판정용 코드가 없어요. k_EStovePCBangPremium_Error 는 서버 오류·판단 불가 상태를 나타내는 값이며, 호출 자체의 성공 여부는 IStoveCallbackResult.Result.IsSuccessful 로 별도 확인해요.
Declaration
public enum EStovePCBangPremium
{
k_EStovePCBangPremium_Error = -1,
k_EStovePCBangPremium_Premium = 1,
k_EStovePCBangPremium_Free = 2,
k_EStovePCBangPremium_FreeOther = 3,
k_EStovePCBangPremium_Max = 0x7fffffff
}
Enum Values
| Code | Name | Description |
|---|---|---|
| -1 | k_EStovePCBangPremium_Error | 서버 오류 / 상태를 판단할 수 없어요. |
| 1 | k_EStovePCBangPremium_Premium | 프리미엄(유료) PC방 혜택을 이용 가능한 상태예요. |
| 2 | k_EStovePCBangPremium_Free | 무료 이용 상태예요. |
| 3 | k_EStovePCBangPremium_FreeOther | 제휴사(타사)가 제공하는 무료 이용 상태예요. |
| 0x7fffffff | k_EStovePCBangPremium_Max | 사용하지 않아요 |
Example
using static Stove.PCSDK.V3.PCBang;
void OnPCBangLoginCallback(IStoveCallbackResult callbackResult, IStovePCBangLoginOutcome loginOutcome)
{
if (callbackResult.Result.IsSuccessful)
{
if (loginOutcome.PremiumCheck == EStovePCBangPremium.k_EStovePCBangPremium_Premium)
{
// 프리미엄 혜택 로직을 구현해 주세요.
}
}
}
Notes
- 이 값은 IStovePCBangLoginOutcome, IStovePCBangBenefitInfo, IStovePCBangStatus 세 구조체가 공통으로 반환해요.
- 혜택 갱신 콜백(
onRefreshBenefit)은 4분 주기로 반복 호출되며,k_EStovePCBangPremium_Premium(유료) 뿐 아니라k_EStovePCBangPremium_Free(무료) 상태에서도 호출돼요.
See Also
EStovePCBangTypeKind
종류 열거형 · 모듈 PCBang · 버전 3.5.0
Description
PC방 기능의 비동기 콜백으로 전달되는 결과/데이터 구조체 각각의 구체적인 타입을 식별하는 값이에요. C# 인터페이스에서는 콜백이 이미 구체 타입(IStovePCBangLoginOutcome 등)의 구조체로 데이터를 전달하므로, 이 값을 조회하는 별도의 접근자는 제공되지 않아요.
이 열거형이 쓰는 정수 범위는 3000 ~ 3999 예요.
Declaration
public enum EStovePCBangTypeKind
{
k_EStovePCBangTypeKind_Invalid = -1,
k_EStovePCBangTypeKind_StovePCBangLoginOutcome = 3000,
k_EStovePCBangTypeKind_StovePCBangBenefitInfo = 3001,
k_EStovePCBangTypeKind_StovePCBangStatus = 3002,
k_EStovePCBangTypeKind_Max = 0x7fffffff
}
Enum Values
| Code | Name | Description |
|---|---|---|
| -1 | k_EStovePCBangTypeKind_Invalid | 사용하지 않아요 |
| 3000 | k_EStovePCBangTypeKind_StovePCBangLoginOutcome | IStovePCBangLoginOutcome |
| 3001 | k_EStovePCBangTypeKind_StovePCBangBenefitInfo | IStovePCBangBenefitInfo |
| 3002 | k_EStovePCBangTypeKind_StovePCBangStatus | IStovePCBangStatus |
| 0x7fffffff | k_EStovePCBangTypeKind_Max | 사용하지 않아요 |
Example
// C# 인터페이스는 각 구조체(IStovePCBangLoginOutcome 등)를 직접 생성하지 않고
// SDK 가 콜백으로 돌려주므로, 이 열거형 값을 API 호출에 직접 사용하지 않습니다.
Notes
- 이 열거형에 포함된 값은 모두 PC방 기능이 콜백으로 전달하는 결과/데이터 타입이며, 호출자가 만드는 입력 파라미터 타입은 없어요(PC방 기능은 파라미터 없는 API 만 제공해요).
- 3000~3999 범위는 PCBang 전용으로 예약되어 있어 다른 모듈의 TypeKind 값과 겹치지 않아요.
See Also
EStoveProductTypeCode
종류 열거형 · 모듈 IAP · 버전 3.5.0
Description
IStoveProduct.ProductTypeCode 로 반환되는 값이에요. 상품이 어떤 종류인지를 나타내요.
Declaration
public enum EStoveProductTypeCode
{
k_EStoveProductTypeCode_None = 0,
k_EStoveProductTypeCode_IndiePackageGameItem = 1,
k_EStoveProductTypeCode_InGameItem = 2,
k_EStoveProductTypeCode_PackageItem = 3,
k_EStoveProductTypeCode_Max = 0x7fffffff
}
Enum Values
| Code | Name | Description |
|---|---|---|
| 0 | k_EStoveProductTypeCode_None | 지정되지 않음 |
| 1 | k_EStoveProductTypeCode_IndiePackageGameItem | 인디 패키지 게임 아이템 |
| 2 | k_EStoveProductTypeCode_InGameItem | 인게임 아이템 |
| 3 | k_EStoveProductTypeCode_PackageItem | 패키지 아이템 |
| 0x7fffffff | k_EStoveProductTypeCode_Max | 사용하지 않아요 |
Example
if (product.ProductTypeCode == EStoveProductTypeCode.k_EStoveProductTypeCode_InGameItem)
{
// 인게임 아이템인 경우의 로직을 구현해 주세요.
}
Notes
- Stove_FetchProducts 로 조회한 각 상품의 종류를 구분할 때 사용해요.
See Also
EStovePurchaseLimitTypeCode
종류 열거형 · 모듈 IAP · 버전 3.5.0
Description
IStoveProduct.PurchaseLimitTypeCode 로 반환되는 값이에요. 구매 횟수 제한이 계정 단위인지 캐릭터 단위인지, 또는 제한이 없는지를 나타내요.
Declaration
public enum EStovePurchaseLimitTypeCode
{
k_EStovePurchaseLimitTypeCode_None = 0,
k_EStovePurchaseLimitTypeCode_Unlimited = 1,
k_EStovePurchaseLimitTypeCode_Member = 2,
k_EStovePurchaseLimitTypeCode_Character = 3,
k_EStovePurchaseLimitTypeCode_Max = 0x7fffffff
}
Enum Values
| Code | Name | Description |
|---|---|---|
| 0 | k_EStovePurchaseLimitTypeCode_None | 제한 정책이 정의되지 않음 |
| 1 | k_EStovePurchaseLimitTypeCode_Unlimited | 구매 횟수 제한 없음 |
| 2 | k_EStovePurchaseLimitTypeCode_Member | 계정(회원) 단위 제한 |
| 3 | k_EStovePurchaseLimitTypeCode_Character | 캐릭터 단위 제한 |
| 0x7fffffff | k_EStovePurchaseLimitTypeCode_Max | 사용하지 않아요 |
Example
if (product.PurchaseLimitTypeCode == EStovePurchaseLimitTypeCode.k_EStovePurchaseLimitTypeCode_Member)
{
// product.PurchaseLimitCount 로 계정 단위 구매 제한 횟수를 확인하는 로직을 구현해 주세요.
}
Notes
Member인 경우IStoveProduct.MemberQuantity,Character인 경우IStoveProduct.GuidQuantity값과 함께 사용해 남은 구매 가능 횟수를 계산해요.
See Also
EStovePurchaseOperation
종류 열거형 · 모듈 IAP · 버전 3.5.0
Description
IStovePurchaseParam.Operation 에 설정하며, Stove_StartPurchase 가 결제 페이지를 어떻게 열고 구매 확정을 누가 처리하는지를 결정해요.
Declaration
public enum EStovePurchaseOperation
{
k_EStovePurchaseOperation_Default = 0,
k_EStovePurchaseOperation_WithWebView = 1,
k_EStovePurchaseOperation_WithWebViewAndConfirmResult = 2,
k_EStovePurchaseOperation_Max = 0x7fffffff
}
Enum Values
| Code | Name | Description |
|---|---|---|
| 0 | k_EStovePurchaseOperation_Default | Stove Webview 를 사용하지 않아요. 호출자가 결과로 받은 일회성 URL 로 결제 페이지를 직접 열고, 결제 후 Stove_ConfirmPurchase 를 호출해 구매를 확정해야 해요 |
| 1 | k_EStovePurchaseOperation_WithWebView | Stove 결제 페이지를 Stove Webview 안에서 열어요. 결제 후에도 호출자가 Stove_ConfirmPurchase 를 호출해 구매를 확정해야 해요 |
| 2 | k_EStovePurchaseOperation_WithWebViewAndConfirmResult | Stove 결제 페이지를 Stove Webview 안에서 열고, 결제 성공 시 SDK 가 자동으로 Stove_ConfirmPurchase 를 호출하여 확정된 구매 결과를 돌려줘요 |
| 0x7fffffff | k_EStovePurchaseOperation_Max | 사용하지 않아요 |
Example
var purchaseParam = new IStovePurchaseParam
{
Operation = EStovePurchaseOperation.k_EStovePurchaseOperation_WithWebViewAndConfirmResult
};
Notes
WebView*관련 필드(위치·크기·표시 모드)는Operation != Default일 때만 적용돼요.Operation값에 따라 Stove_StartPurchase 의 콜백 결과(IStoveStartPurchaseOutcome)에서 어떤 필드가 채워지는지가 달라져요.
See Also
EStovePurchaseProgress
종류 열거형 · 모듈 IAP · 버전 3.5.0
Description
IStoveStartPurchaseOutcome.PurchaseProgress 로 반환되는 값이에요. Stove_StartPurchase 결과를 받은 뒤, 호출자가 결제창을 직접 열어야 하는지 판단하는 데 사용해요.
Declaration
public enum EStovePurchaseProgress
{
k_EStovePurchaseProgress_None = 0,
k_EStovePurchaseProgress_NeedPaymentWindow = 1,
k_EStovePurchaseProgress_NotNeedPaymentWindow = 2,
k_EStovePurchaseProgress_Max = 0x7fffffff
}
Enum Values
| Code | Name | Description |
|---|---|---|
| 0 | k_EStovePurchaseProgress_None | 진행 상태 없음 |
| 1 | k_EStovePurchaseProgress_NeedPaymentWindow | 호출자가 결과의 일회성 결제 URL 로 결제창을 직접 열어야 해요 |
| 2 | k_EStovePurchaseProgress_NotNeedPaymentWindow | 결제창을 열 필요가 없어요 (0원 결제로 즉시 완료되었거나, 웹뷰 기반 흐름에서 이미 결제가 처리됨) |
| 0x7fffffff | k_EStovePurchaseProgress_Max | 사용하지 않아요 |
Example
if (outcome.PurchaseProgress == EStovePurchaseProgress.k_EStovePurchaseProgress_NeedPaymentWindow)
{
string url = outcome.TempPaymentUrl;
// url 로 결제창을 열어 주세요.
}
Notes
k_EStovePurchaseOperation_Default로 구매를 시작한 경우 일반적으로NeedPaymentWindow가 반환돼요.
See Also
EStoveResultCode
종류 결과코드 · 모듈 Base · 버전 3.5.0
Description
전역 결과 코드 사전에서, 백의 자리(카테고리)로 대역을 나눈 모듈별 결과 코드예요. IStoveResult.ResultCode 로 조회해요. 3xx 는 Base(언어/GDS/런처/토큰/IPC), 4xx 는 웹뷰/팝업 UI(현재는 EStoveCommonResultCode 60~68 로 흡수되어 이 열거형에는 값이 없어요), 5xx 는 IAP 주문/결제 정보예요(503 만 남아 있어요).
단일 바이너리 구조에서는 모듈별로 결과 코드를 따로 두는 것이 의미가 없어, 여러 모듈에서 같은 의미로 쓰이던 코드를 이 열거형 하나로 통합했어요. 어느 모듈에서 발생한 결과인지는 MethodCode(모듈 블록 = 코드 / 1000)로 구분할 수 있어요. 모듈 공통 결과 코드(0~299)는 EStoveCommonResultCode 를 참조하세요.
이전 형상의
EStoveBaseResultCode(80~89번대)는 삭제되었어요. 같은 의미의 코드는 이 열거형(300번대)으로 옮겨졌어요.
Declaration
public enum EStoveResultCode
{
k_EStoveResultCode_LanguageNotSet = 300,
k_EStoveResultCode_EmptyTranslatedString = 301,
// ... 이하 열거값 표 참조
k_EStoveResultCode_InvalidOrderProductInformation = 503,
k_EStoveResultCode_Max = 0x7fffffff
}
Enum Values
3xx — Base 언어/GDS/런처/토큰/IPC
| Code | Name | Description | Show to User | In-Game Message |
|---|---|---|---|---|
| 300 | k_EStoveResultCode_LanguageNotSet | 언어가 설정되지 않았어요 (Stove_SetLanguageEx() 로 언어를 설정한 뒤 재시도) | x | |
| 301 | k_EStoveResultCode_EmptyTranslatedString | 번역된 문자열이 비어 있어요 (번역 데이터 확인) | x | |
| 302 | k_EStoveResultCode_NotFoundRequiredInformation | 필수 정보를 찾을 수 없어요 (필수 정보 설정 여부 확인) | x | |
| 303 | k_EStoveResultCode_InvalidGdsInfo | GDS(국가/규제) 정보가 유효하지 않아요 (GDS 정보 확인) | x | |
| 304 | k_EStoveResultCode_NeedStoveLauncher | Stove 런처가 필요하지만 실행 중이 아니에요 (Stove_RestartAppIfNecessary() 로 런처를 통해 재시작) | O | 게임이 스토브 PC 클라이언트를 통해 실행되지 않아 종료됩니다.클라이언트에서 다시 게임을 실행해주세요.클라이언트 미설치 시 스토브 홈페이지에서 설치해주세요.[확인] |
| 305 | k_EStoveResultCode_LauncherFailedCreateRequired | 필요한 런처 리소스 생성에 실패했어요 (재시도) | x | |
| 306 | k_EStoveResultCode_RenewTokenMaxRetryCountExceeded | 토큰 갱신 재시도 횟수를 초과했어요 (재로그인 유도) | O | 네트워크 연결이 원활하지 않습니다. 네트워크 상태를 확인하고 다시 실행해 주세요. [확인] |
| 307 | k_EStoveResultCode_IpcConnectFailed | 런처와의 IPC 연결에 실패했어요 (런처 상태 확인 후 재시도) | O | 게임이 스토브 PC 클라이언트를 통해 실행되지 않아 종료됩니다.클라이언트에서 다시 게임을 실행해주세요.클라이언트 미설치 시 스토브 홈페이지에서 설치해주세요.[확인] |
| 308 | k_EStoveResultCode_IpcAesKeyNotReceived | IPC 로 AES 키를 수신하지 못했어요 (재시도) | O | 게임이 스토브 PC 클라이언트를 통해 실행되지 않아 종료됩니다.클라이언트에서 다시 게임을 실행해주세요.클라이언트 미설치 시 스토브 홈페이지에서 설치해주세요.[확인] |
| 309 | k_EStoveResultCode_IpcTimeout | 런처와의 IPC 통신이 시간 초과되었어요 (재시도) | O | 게임이 스토브 PC 클라이언트를 통해 실행되지 않아 종료됩니다.클라이언트에서 다시 게임을 실행해주세요.클라이언트 미설치 시 스토브 홈페이지에서 설치해주세요.[확인] |
| — | 310 ~ 399 | 사용하지 않아요 (예약 구간) | x |
4xx — 웹뷰/팝업 UI (예약, 현재 값 없음)
| Code | Name | Description | Show to User | In-Game Message |
|---|---|---|---|---|
| — | 400 ~ 499 | 이 대역의 코드는 EStoveCommonResultCode 60~68 로 흡수되어, 이 열거형에는 값이 없어요 | x |
5xx — IAP 주문/결제 정보
| Code | Name | Description | Show to User | In-Game Message |
|---|---|---|---|---|
| — | 500 ~ 502 | EStoveCommonResultCode 80~81 로 옮겨졌어요 | x | |
| 503 | k_EStoveResultCode_InvalidOrderProductInformation | 주문/상품 정보가 유효하지 않아요 (주문 파라미터 확인) | O | 결제 정보가 유효하지 않아 결제를 진행할 수 없습니다. 다시 시도해 주세요. [확인] |
| — | 504 ~ 0x7ffffffe | 사용하지 않아요 (예약 구간) | x | |
| 0x7fffffff | k_EStoveResultCode_Max | 사용하지 않아요 | x |
아래 코드를 받으면 반드시 게임을 종료해야 해요. 정상 진행이 불가능한 상태예요.
304k_EStoveResultCode_NeedStoveLauncher— 게임 종료 후 재실행이 필요해요307k_EStoveResultCode_IpcConnectFailed— 게임 종료 후 재실행이 필요해요308k_EStoveResultCode_IpcAesKeyNotReceived— 게임 종료 후 재실행이 필요해요309k_EStoveResultCode_IpcTimeout— 게임 종료 후 재실행이 필요해요
Example
using static Stove.PCSDK.V3.Base;
IStoveResult result = Stove_SetLanguageEx("ko");
if (result.ResultCode == (uint)EStoveResultCode.k_EStoveResultCode_LanguageNotSet)
{
// 언어 미설정 오류에 대한 로직을 구현해 주세요.
}
Notes
- 모듈별 대역(백의 자리)으로 재배치된 결과 코드예요. 현재 공개된 값은 Base(3xx)와 IAP(503) 뿐이며, 4xx 와 5xx 의 나머지 값은 EStoveCommonResultCode 로 흡수되었어요.
- 이전 형상의
EStoveBaseResultCode(80~89번대, Base 전용)는 삭제되었고, 같은 의미의 코드가 이 열거형의 300번대로 옮겨졌어요. 옛 문서를 참조하던 개발자는 이 열거형으로 이전해야 해요. IStoveResult.ResultCode는uint타입이므로 이 열거형 값과 비교할 때는(uint)EStoveResultCode.k_...로 형변환해요.
Changelog
| Version | Change |
|---|---|
| 3.5.0 | 최초 제공 (구 EStoveBaseResultCode 대체) |
See Also
EStoveTermsOperation
종류 열거형 · 모듈 IAP · 버전 3.5.0
Description
IStoveFetchTermsAgreementParam.Operation 에 설정하며, 사용자가 아직 약관에 동의하지 않았을 때 Stove_FetchTermsAgreement 가 약관 페이지를 어떻게 노출할지를 결정해요.
Declaration
public enum EStoveTermsOperation
{
k_EStoveTermsOperation_Default = 0,
k_EStoveTermsOperation_WithWebView = 1,
k_EStoveTermsOperation_Max = 0x7fffffff
}
Enum Values
| Code | Name | Description |
|---|---|---|
| 0 | k_EStoveTermsOperation_Default | Stove Webview 를 사용하지 않아요. 호출자가 결과로 받은 일회성 URL 로 약관 페이지를 직접 열어야 해요 |
| 1 | k_EStoveTermsOperation_WithWebView | 약관 동의 페이지를 Stove Webview 안에서 표시해요 |
| 0x7fffffff | k_EStoveTermsOperation_Max | 사용하지 않아요 |
Example
var termsParam = new IStoveFetchTermsAgreementParam
{
Operation = EStoveTermsOperation.k_EStoveTermsOperation_WithWebView
};
Notes
WebView*관련 필드(위치·크기·표시 모드)는Operation != Default일 때만 적용돼요.
See Also
EStoveViewMethodCode
종류 열거형 · 모듈 View · 버전 3.5.0
Description
IStoveResult 를 만든 어느 팝업 API 인지 식별하는 값이에요. IStoveResult.MethodCode 로 조회할 수 있으며, 로그 기록이나 오류 처리 분기에 사용해요.
이 열거형이 쓰는 정수 범위는 1000 ~ 1999 이며, 팝업 API 는 1000대, 팝업 관리·유틸리티 API 는 그 이후 번호를 순차로 사용해요.
Declaration
public enum EStoveViewMethodCode
{
k_EStoveViewMethodCode_Invalid = -1,
k_EStoveViewMethodCode_AutoPopup = 1000,
// ... 이하 열거값 표 참조
k_EStoveViewMethodCode_Max = 0x7fffffff
}
Enum Values
| Code | Name | Description |
|---|---|---|
| -1 | k_EStoveViewMethodCode_Invalid | 사용하지 않아요 |
| 1000 | k_EStoveViewMethodCode_AutoPopup | Stove_AutoPopup |
| 1001 | k_EStoveViewMethodCode_ManualPopup | Stove_ManualPopup |
| 1002 | k_EStoveViewMethodCode_NewsPopup | Stove_NewsPopup |
| 1003 | k_EStoveViewMethodCode_CouponPopup | Stove_CouponPopup |
| 1004 | k_EStoveViewMethodCode_VerifyIdentificationPopup | Stove_VerifyIdentificationPopup |
| 1005 | k_EStoveViewMethodCode_SetPopupDisallowed | Stove_SetPopupDisallowed |
| 0x7fffffff | k_EStoveViewMethodCode_Max | 사용하지 않아요 |
Example
using static Stove.PCSDK.V3.View;
void OnViewPopupCallback(IStoveCallbackResult callbackResult)
{
uint methodCode = callbackResult.Result.MethodCode; // k_EStoveViewMethodCode_AutoPopup 등
}
Notes
- 이전 인터페이스에 있던 모듈별 결과 코드 열거형
EStoveViewResultCode는 삭제되었어요. 실패 원인은IStoveResult.ResultCode로 확인하며, 값은 모듈별 EStoveResultCode 또는 공통 EStoveCommonResultCode 에 정의되어 있어요. - 팝업을 모두 닫는
Stove_CloseAllPopups()는 Base 소속 함수이므로, 이 열거형이 아니라 Base 의 MethodCode 값을 가져요. - 값 번호는 모듈별 블록으로 나뉘어 있어 다른 모듈의 MethodCode 와 겹치지 않아요. 어느 모듈의 결과인지는
IStoveResult.SDKName으로도 확인할 수 있어요. - 같은 팝업이라도 구 인터페이스와 값이 달라요. 구 인터페이스(
View_AutoPopup등)는81·83·85·87·91·160을 그대로 돌려주고, 신규 인터페이스는 이 열거형의1000번대 값을 돌려줘요. 두 벌을 함께 쓰는 동안에는 로그 집계 기준을 벌마다 나누어 두세요.
See Also
- Stove_AutoPopup
- Stove_ManualPopup
- Stove_NewsPopup
- Stove_CouponPopup
- Stove_VerifyIdentificationPopup
- Stove_SetPopupDisallowed
EStoveViewTypeKind
종류 열거형 · 모듈 View · 버전 3.5.0
Description
팝업 기능이 다루는 파라미터 구조체와 콜백 전달 구조체 각각의 구체적인 타입을 식별하는 값이에요. C# API 는 이 값을 직접 다루지 않고 구조체를 그대로 생성해 전달하지만, 값의 범위와 대응 관계를 알아두면 로깅·디버깅에 참고할 수 있어요.
이 열거형이 쓰는 정수 범위는 1000 ~ 1999 예요. 다른 모듈의 TypeKind 값과 번호가 겹치지 않아요.
Declaration
public enum EStoveViewTypeKind
{
k_EStoveViewTypeKind_Invalid = -1,
k_EStoveViewTypeKind_SetPopupDisallowedParam = 1500,
// ... 이하 열거값 표 참조
k_EStoveViewTypeKind_Max = 0x7fffffff
}
Enum Values
| Code | Name | Description |
|---|---|---|
| -1 | k_EStoveViewTypeKind_Invalid | 사용하지 않아요 |
| 1500 | k_EStoveViewTypeKind_SetPopupDisallowedParam | IStoveSetPopupDisallowedParam |
| 1501 | k_EStoveViewTypeKind_PopupParam | IStovePopupParam |
| 1502 | k_EStoveViewTypeKind_ManualPopupParam | IStoveManualPopupParam |
| 1503 | k_EStoveViewTypeKind_VerifyIdentificationPopupParam | IStoveVerifyIdentificationPopupParam |
| 1504 | k_EStoveViewTypeKind_VerifyIdentificationPopupDestroyInfo | IStoveVerifyIdentificationPopupDestroyInfo |
| 0x7fffffff | k_EStoveViewTypeKind_Max | 사용하지 않아요 |
Example
// C# 인터페이스는 각 구조체(IStovePopupParam 등)를 직접 생성해 사용하며,
// 이 열거형 값을 API 호출에 직접 전달하지 않습니다.
var popupParam = new IStovePopupParam
{
WebViewMode = EStoveWebViewMode.k_EStoveWebViewMode_Internal
};
Notes
- 1500~1503 은 호출자가 만들어 API 에 전달하는 파라미터 구조체, 1504 는 SDK 가 콜백으로 돌려주는 구조체에 대응해요.
- View 팝업 파라미터는 API 마다 사용하는 타입이 달라요.
Stove_AutoPopup/Stove_NewsPopup/Stove_CouponPopup은 IStovePopupParam,Stove_ManualPopup은 IStoveManualPopupParam,Stove_VerifyIdentificationPopup은 IStoveVerifyIdentificationPopupParam 을 사용해요.
See Also
- IStoveSetPopupDisallowedParam
- IStovePopupParam
- IStoveManualPopupParam
- IStoveVerifyIdentificationPopupParam
EStoveWebViewMode
종류 열거형 · 모듈 Base · 버전 3.5.0
Description
View SDK 와 IAP SDK 에서 웹뷰를 외부 팝업(시스템 기본 브라우저)으로 열지, 내부 팝업(SDK 내장 웹뷰)으로 열지를 결정하는 값이에요.
Declaration
public enum EStoveWebViewMode
{
k_EStoveWebViewMode_Invalid = -1,
k_EStoveWebViewMode_External = 0,
k_EStoveWebViewMode_Internal = 1,
k_EStoveWebViewMode_Max = 0x7fffffff
}
Enum Values
| Code | Name | Description |
|---|---|---|
| -1 | k_EStoveWebViewMode_Invalid | 사용하지 않아요 |
| 0 | k_EStoveWebViewMode_External | 시스템 기본 브라우저에서 열어요 |
| 1 | k_EStoveWebViewMode_Internal | SDK 내장 웹뷰에서 열어요 |
| 0x7fffffff | k_EStoveWebViewMode_Max | 사용하지 않아요 |
Example
EStoveWebViewMode webViewMode = EStoveWebViewMode.k_EStoveWebViewMode_Internal;
Notes
- 팝업, 결제 기능에서 팝업 표시 방식을 지정할 때 사용하는 값이에요. SDK 자체 API 에는 이 값을 직접 받는 함수가 없어요.
- 이전 형상에서는 값 이름에 밑줄이 없었어요(
k_EStoveWebViewModeInvalid). 현재 소스는k_EStoveWebViewMode_Invalid처럼 열거형 이름과 값 이름 사이에 밑줄이 들어가요.
Changelog
| Version | Change |
|---|---|
| 3.5.0 | 최초 제공 |
See Also
- 없음
IStoveAccessToken
종류 구조체 · 모듈 Base · 버전 3.5.0
Description
Stove_AccessTokenRenewed() 를 등록했을 때 전달되는 콜백의 토큰 구조체예요.
AccessToken 값과 남은 유효시간을 담아요. readonly struct(값 타입)이므로 GC 가 처리하며 별도로 해제할 필요가 없어요.
Declaration
public readonly struct IStoveAccessToken
{
public string AccessToken { get; }
public int ExpireIn { get; }
}
Members
| Name | Type | Access | Description |
|---|---|---|---|
AccessToken | string | 읽기 (프로퍼티) | Stove AccessToken 값이에요. |
ExpireIn | int | 읽기 (프로퍼티) | Stove AccessToken 의 남은 유효시간(초)예요. |
Example
using static Stove.PCSDK.V3.Base;
void OnAccessTokenRenewedCallback(IStoveCallbackResult callbackResult, IStoveAccessToken token)
{
if (callbackResult.Result.IsSuccessful)
{
string accessToken = token.AccessToken;
int expireIn = token.ExpireIn;
// 성공 시 로직을 구현해 주세요.
}
else
{
// 실패 시 로직을 구현해 주세요.
}
}
Stove_AccessTokenRenewed(OnAccessTokenRenewedCallback);
Notes
Stove_AccessTokenRenewed()를 등록한 뒤, AccessToken 이 SDK 내부에서 자동으로 갱신될 때마다 이 콜백이 호출돼요.- 이전 형상에서는 이 타입의 이름이
IStoveToken이었어요. 현재 소스(BaseTypesV2.cs)에는IStoveToken이 존재하지 않고IStoveAccessToken으로만 정의되어 있어요.
See Also
IStoveCallbackResult
종류 구조체 · 모듈 Base · 버전 3.5.0
Description
비동기 콜백에 전달되는 결과예요. IStoveResult 를 감싸고, 오류 상세 메시지와 외부 오류 값을 함께 담아요.
Stove_AccessTokenRenewed(), Stove_OverImmersionNotification() 등 콜백 기반 비동기 API 의 첫 번째 콜백 인자로 전달돼요. readonly struct(값 타입)이므로 GC 가 처리하며 별도로 해제할 필요가 없어요.
Result와 함께 전달되는 값들은 콜백 호출 시점에만 유효해요.
Declaration
public readonly struct IStoveCallbackResult
{
public IStoveResult Result { get; }
public string ErrorMessage { get; }
public int ExternalError { get; }
}
Members
| Name | Type | Access | Description |
|---|---|---|---|
Result | IStoveResult | 읽기 (프로퍼티) | 내부 결과 값이에요. |
ErrorMessage | string | 읽기 (프로퍼티) | 오류가 발생한 이유를 설명하는 상세 메시지예요. |
ExternalError | int | 읽기 (프로퍼티) | 외부 오류 값이에요(HTTP 오류 코드 또는 API 결과 코드). |
WithManagedExceptionMsgAndCode(string exceptionMessage) | IStoveCallbackResult | 메서드 | 내부 Result 를 Result.WithManagedExceptionMsgAndCode(exceptionMessage) 로 교체한 새 IStoveCallbackResult 를 반환해요. ErrorMessage · ExternalError 는 그대로 유지돼요. |
Example
using static Stove.PCSDK.V3.Base;
void OnAccessTokenRenewedCallback(IStoveCallbackResult callbackResult, IStoveAccessToken token)
{
if (callbackResult.Result.IsSuccessful)
{
// 성공 시 로직을 구현해 주세요.
}
else
{
// 실패 시 로직을 구현해 주세요.
}
}
Stove_AccessTokenRenewed(OnAccessTokenRenewedCallback);
Notes
- 모든 SDK 비동기 콜백(
OnAccessTokenRenewedCallback,OnOverImmersionNotificationCallback등)의 첫 번째 인자로 전달돼요. - 콜백은
Stove_RunCallback()을 호출한 스레드에서 실행돼요. - 신규 flat C 인터페이스의
IStoveCallbackResult에는 호출 시 전달한userData(void*) 를 돌려주는 필드가 있지만, C# 버전에는 대응하는 필드가 없어요. C# 콜백은 delegate 가 클로저로 컨텍스트를 캡처하므로 별도의userData포인터가 필요하지 않아요. WithManagedExceptionMsgAndCode()는 C# 래퍼가 콜백 마샬링 등에서 발생한 예외를MANAGED_EXCEPTION(254) 결과로 변환할 때 쓰는 내부 보조 메서드예요. 게임 코드가 직접 호출할 일은 거의 없어요.
See Also
IStoveChargeInfo
종류 구조체 · 모듈 IAP · 버전 3.5.0
Description
한 번의 구매에 사용된 결제 수단(스토브 캐시, 포인트, PG 등) 하나를 나타내요. Stove_ConfirmPurchase 결과인 IStoveConfirmPurchaseOutcome 의 ChargeInfos 와, Stove_StartPurchase 결과인 IStoveStartPurchaseOutcome 의 ChargeInfos 양쪽에 배열로 담겨 전달돼요.
SDK 가 값을 채워서 콜백으로 전달하는 읽기 전용 구조체(readonly struct)이에요. 호출자가 직접 만들지 않아요. 값 타입이므로 콜백이 끝난 뒤에도 값을 그대로 복사해 보관해 사용할 수 있으며, 별도로 해제할 필요가 없어요.
Declaration
public readonly struct IStoveChargeInfo
{
public double ChargeDeductVal { get; }
public double ChargeDisplayDeductVal { get; }
public int ChargeType { get; }
public string ChargeTypeName { get; }
}
Members
| Name | Type | Access | Description |
|---|---|---|---|
ChargeDeductVal | double | 읽기 | 결제 시점에 실제로 차감된 금액 (결제 단위 기준) |
ChargeDisplayDeductVal | double | 읽기 | 차감 금액의 캐시 환산 표시 값 |
ChargeType | int | 읽기 | 결제 수단 코드. 98: 스토브 캐시, 99: 포인트, 그 외: PG(결제대행사) 결제 수단 |
ChargeTypeName | string | 읽기 | 현지화된 결제 수단 이름 |
Example
using static Stove.PCSDK.V3.IAP;
void OnConfirmPurchaseCallback(IStoveCallbackResult callbackResult, IStoveConfirmPurchaseOutcome outcome)
{
if (callbackResult.Result.IsSuccessful && outcome.IsConfirmed)
{
foreach (var chargeInfo in outcome.ChargeInfos)
{
double deductVal = chargeInfo.ChargeDeductVal;
string typeName = chargeInfo.ChargeTypeName;
// 필요한 값만 사용해 영수증 화면을 구성해 주세요.
}
}
else
{
// 실패 시 로직을 구현해 주세요.
}
}
Notes
- IStoveConfirmPurchaseOutcome 의
ChargeInfos와 IStoveStartPurchaseOutcome 의ChargeInfos양쪽에서 전달돼요. - 한 번의 구매에 여러 결제 수단이 함께 사용된 경우, 배열에 결제 수단별로 항목이 나뉘어 담겨요.
See Also
IStoveConfirmPurchaseOutcome
종류 구조체 · 모듈 IAP · 버전 3.5.0
Description
Stove_ConfirmPurchase 호출 결과로 OnConfirmPurchaseCallback 콜백에 전달돼요.
SDK 가 값을 채워서 콜백으로 전달하는 읽기 전용 구조체(readonly struct)이에요. 호출자가 직접 만들지 않아요. 값 타입이므로 콜백이 끝난 뒤에도 값을 그대로 복사해 보관해 사용할 수 있으며, 별도로 해제할 필요가 없어요.
Declaration
public readonly struct IStoveConfirmPurchaseOutcome
{
public bool IsConfirmed { get; }
public IStovePurchasedProduct[] PurchasedProducts { get; }
public IStoveChargeInfo[] ChargeInfos { get; }
}
Members
| Name | Type | Access | Description |
|---|---|---|---|
IsConfirmed | bool | 읽기 | 구매가 최종적으로 확정되었는지 여부 |
PurchasedProducts | IStovePurchasedProduct[] | 읽기 | 확정된 구매에 포함된 상품 항목 배열 |
ChargeInfos | IStoveChargeInfo[] | 읽기 | 결제에 사용된 화폐(결제 수단)별 항목 배열 |
Example
using static Stove.PCSDK.V3.IAP;
void OnConfirmPurchaseCallback(IStoveCallbackResult callbackResult, IStoveConfirmPurchaseOutcome outcome)
{
if (callbackResult.Result.IsSuccessful && outcome.IsConfirmed)
{
foreach (var product in outcome.PurchasedProducts)
{
// 구매된 상품을 지급해 주세요.
}
}
else
{
// 실패 시 로직을 구현해 주세요.
}
}
Notes
- Stove_ConfirmPurchase 의 출력으로만 전달돼요.
IsConfirmed가false이면PurchasedProducts/ChargeInfos가 비어 있을 수 있어요.
See Also
IStoveConfirmPurchaseParam
종류 구조체 · 모듈 IAP · 버전 3.5.0
Description
Stove_ConfirmPurchase 를 호출할 때 전달하는 입력 파라미터예요. IStoveStartPurchaseOutcome 에서 받은 트랜잭션 마스터 번호로 구매를 확정할 때 사용해요.
일반 C# 구조체(struct)이며 생성 함수를 쓰지 않아요. 게임 코드가 new IStoveConfirmPurchaseParam { ... } 형태로 직접 만들어 값을 채운 뒤 호출에 전달해요. 값 타입이므로 별도로 해제할 필요가 없어요.
Declaration
public struct IStoveConfirmPurchaseParam
{
public long TxnMasterNo { get; set; }
}
Members
| Name | Type | Access | Required | Description |
|---|---|---|---|---|
TxnMasterNo | long | 읽기·쓰기 | 예 | IStoveStartPurchaseOutcome 에서 받은 트랜잭션 마스터 번호 |
Example
using static Stove.PCSDK.V3.IAP;
var confirmParam = new IStoveConfirmPurchaseParam
{
TxnMasterNo = txnMasterNo
};
Stove_ConfirmPurchase(confirmParam, OnConfirmPurchaseCallback);
Notes
TxnMasterNo는 Stove_StartPurchase 의 결과인 IStoveStartPurchaseOutcome 의TxnMasterNo값을 그대로 사용해 주세요.Operation == Default또는WithWebView로 시작한 구매는 결제 창에서 결제를 마친 뒤 반드시 이 API 로 구매를 확정해야 해요.
See Also
IStoveFetchProductsParam
종류 구조체 · 모듈 IAP · 버전 3.5.0
Description
Stove_FetchProducts 를 호출할 때 전달하는 입력 파라미터예요. 조회할 카테고리와 페이지 범위를 지정해요.
일반 C# 구조체(struct)이며 생성 함수를 쓰지 않아요. 게임 코드가 new IStoveFetchProductsParam { ... } 형태로 직접 만들어 값을 채운 뒤 호출에 전달해요. 값 타입이므로 별도로 해제할 필요가 없어요.
Declaration
public struct IStoveFetchProductsParam
{
public string CategoryId { get; set; }
public uint PageIndex { get; set; }
public uint PageSize { get; set; }
}
Members
| Name | Type | Access | Required | Description |
|---|---|---|---|---|
CategoryId | string | 읽기·쓰기 | 아니오 | 카테고리 ID 필터. 모든 카테고리의 상품을 조회하려면 비워 둬요. |
PageIndex | uint | 읽기·쓰기 | 예 | 페이지 번호 (1부터 시작) |
PageSize | uint | 읽기·쓰기 | 예 | 페이지당 상품 수 |
Example
using static Stove.PCSDK.V3.IAP;
var fetchProductsParam = new IStoveFetchProductsParam
{
CategoryId = "",
PageIndex = 1,
PageSize = 20
};
Stove_FetchProducts(fetchProductsParam, OnFetchProductsCallback);
Notes
CategoryId는 IStoveShopCategory.CategoryId 에서 얻은 값을 전달해요.
See Also
IStoveFetchTermsAgreementParam
종류 구조체 · 모듈 IAP · 버전 3.5.0
Description
Stove_FetchTermsAgreement 를 호출할 때 전달하는 입력 파라미터예요. WebView* 필드는 모두 Operation 이 Default 가 아닐 때만 적용돼요.
일반 C# 구조체(struct)이며 생성 함수를 쓰지 않아요. 게임 코드가 new IStoveFetchTermsAgreementParam { ... } 형태로 직접 만들어 값을 채운 뒤 호출에 전달해요. 값 타입이므로 별도로 해제할 필요가 없어요.
Declaration
public struct IStoveFetchTermsAgreementParam
{
public EStoveTermsOperation Operation { get; set; }
public EStoveWebViewMode WebViewMode { get; set; }
public int WebViewPosX { get; set; }
public int WebViewPosY { get; set; }
public int WebViewWidth { get; set; }
public int WebViewHeight { get; set; }
}
Members
| Name | Type | Access | Required | Description |
|---|---|---|---|---|
Operation | EStoveTermsOperation | 읽기·쓰기 | 예 | 동작 방식 선택자 |
WebViewMode | EStoveWebViewMode | 읽기·쓰기 | 아니오 | 웹뷰 표시 모드. Operation != Default 일 때만 적용돼요. |
WebViewPosX | int | 읽기·쓰기 | 아니오 | 웹뷰 x 좌표 (픽셀). Operation != Default 일 때만 적용돼요. |
WebViewPosY | int | 읽기·쓰기 | 아니오 | 웹뷰 y 좌표 (픽셀). Operation != Default 일 때만 적용돼요. |
WebViewWidth | int | 읽기·쓰기 | 아니오 | 웹뷰 너비 (픽셀). Operation != Default 일 때만 적용돼요. |
WebViewHeight | int | 읽기·쓰기 | 아니오 | 웹뷰 높이 (픽셀). Operation != Default 일 때만 적용돼요. |
Example
using static Stove.PCSDK.V3.IAP;
var termsParam = new IStoveFetchTermsAgreementParam
{
Operation = EStoveTermsOperation.k_EStoveTermsOperation_WithWebView
};
Stove_FetchTermsAgreement(termsParam, OnFetchTermsAgreementCallback, null);
Notes
Operation이Default이면WebView*필드는 무시돼요.
See Also
IStoveGds
종류 구조체 · 모듈 Base · 버전 3.5.0
Description
Stove_GetGds() 호출 시 ref 파라미터로 전달받는 국가/규제/시간대/언어 정보 구조체예요.
로그인한 사용자의 IP 기반 국가 코드를 기본으로 제공하며, IP 로 국가를 판별할 수 없을 때는 기본 국가 코드로 대체돼요(IsDefault 로 구분). readonly struct(값 타입)이므로 GC 가 처리하며 별도로 해제할 필요가 없어요.
Declaration
public readonly struct IStoveGds
{
public bool IsDefault { get; }
public string Nation { get; }
public string Regulation { get; }
public string Timezone { get; }
public int UtcOffset { get; }
public string Lang { get; }
}
Members
| Name | Type | Access | Description |
|---|---|---|---|
IsDefault | bool | 읽기 (프로퍼티) | 사용자의 IP 로 국가 코드를 판별할 수 없어 기본 국가 코드를 사용했는지 여부예요. IP 로 판별된 경우 false 이에요. |
Nation | string | 읽기 (프로퍼티) | 로그인한 사용자의 국가 코드예요(ISO 3166-1 ALPHA-2). |
Regulation | string | 읽기 (프로퍼티) | 국가 코드에 따라 적용되는 규제 이름이에요(예: GDPR). |
Timezone | string | 읽기 (프로퍼티) | 로그인한 사용자의 시간대예요(IANA Time Zone Database ID, 예: "Asia/Seoul"). |
UtcOffset | int | 읽기 (프로퍼티) | 사용자 시간대의 UTC 오프셋(분)이에요. |
Lang | string | 읽기 (프로퍼티) | 로그인한 사용자의 언어예요(ISO 639-1 ALPHA-2). 예외: 중국어는 zh / zh-tw, 인도네시아어는 "in" 을 사용해요. |
Example
using static Stove.PCSDK.V3.Base;
IStoveGds gds = default;
IStoveResult result = Stove_GetGds(ref gds);
if (result.IsSuccessful)
{
string nation = gds.Nation;
string timezone = gds.Timezone;
// 성공 시 로직을 구현해 주세요.
}
else
{
// 실패 시 로직을 구현해 주세요.
}
Notes
Stove_Initialize()로 초기화가 끝난 뒤 호출해야 유효한 값을 받을 수 있어요.Stove_GetGds(ref IStoveGds gds)는ref파라미터로 값을 돌려주며, 반환값은IStoveResult이에요.
See Also
IStoveInitializeParam
종류 구조체 · 모듈 Base · 버전 3.5.0
Description
Stove_Initialize(IStoveInitializeParam) 오버로드 호출에 사용하는 파라미터예요. ShopKey, MainWndHandle 두 필드만 가지며, 단일 바이너리 통합 이후 SDK 초기화와 동시에 View/IAP 모듈을 함께 초기화하기 위해 존재해요.
일반 struct(값 타입)이며 각 필드가 get/set 프로퍼티로 노출돼요. 신규 flat C 인터페이스와 달리 게임 코드가 생성 함수 없이 new IStoveInitializeParam { ... } 형태로 직접 만들어 값을 채워요.
MainWndHandle이 0 이 아니면 View 모듈이 초기화되고,ShopKey가 비어 있지 않으면서 동시에MainWndHandle도 0 이 아니면 IAP 모듈이 함께 초기화돼요(둘 다 만족해야 IAP 가 초기화돼요).MainWndHandle은 게임의 메인 윈도우가 실제로 생성된 뒤에만 유효한 값이에요.
Declaration
public struct IStoveInitializeParam
{
public string ShopKey { get; set; }
public IntPtr MainWndHandle { get; set; }
}
Members
| Name | Type | Access | Description |
|---|---|---|---|
ShopKey | string | 읽기·쓰기 (프로퍼티) | IAP 상점 키예요. 값이 비어 있지 않고 MainWndHandle 도 함께 설정되어 있어야 Stove_Initialize() 가 IAP 모듈을 초기화해요. |
MainWndHandle | IntPtr | 읽기·쓰기 (프로퍼티) | 게임 메인 윈도우 핸들(HWND)예요. 윈도우가 생성된 뒤에만 유효하며, 값이 0 이 아니면 View 모듈을 초기화해요. IntPtr.Zero 로 두면 View/IAP 초기화를 모두 건너뛰어요. |
Example
using static Stove.PCSDK.V3.Base;
IStoveInitializeParam initParam = new IStoveInitializeParam
{
ShopKey = "YOUR_SHOP_KEY",
MainWndHandle = hWnd,
};
IStoveResult result = Stove_Initialize(initParam);
if (result.IsSuccessful)
{
// 성공 시 로직을 구현해 주세요.
}
else
{
// 실패 시 로직을 구현해 주세요.
}
Notes
- 이전 형상에서는
Environment/GameId/AppKey필드가 이 구조체에 포함되어 있었어요. 현재 소스(BaseTypesV2.cs)에서는 이 세 필드가 빠지고 IStoveRestartAppIfNecessaryParam 으로 옮겨졌어요. SDK 는Stove_RestartAppIfNecessary()에서 캐시한 값을Stove_Initialize()에서 재사용해요. - 파라미터 없는
Stove_Initialize()오버로드는 SDK 만 초기화하며 View/IAP 는 초기화하지 않아요. - 신규 flat C 인터페이스는
Stove_CreateParam(k_EStoveBaseTypeKind_InitializeParam)으로 생성한 뒤Destroy()로 해제해야 하지만, C# 에서는 이 구조체를 값 타입으로 직접 생성·초기화하며 생성/해제 함수를 호출하지 않아요.
See Also
IStoveInventoryItem
종류 구조체 · 모듈 IAP · 버전 3.5.0
Description
사용자의 구매 이력 한 건을 나타내요. Stove_FetchInventory 호출 결과로 OnFetchInventoryCallback 콜백에 IStoveInventoryList 형태로 전달돼요.
SDK 가 값을 채워서 콜백으로 전달하는 읽기 전용 구조체(readonly struct)이에요. 호출자가 직접 만들지 않아요. 값 타입이므로 콜백이 끝난 뒤에도 값을 그대로 복사해 보관해 사용할 수 있으며, 별도로 해제할 필요가 없어요.
Declaration
public readonly struct IStoveInventoryItem
{
public long TxnMasterNo { get; }
public long TxnDetailNo { get; }
public long ProductId { get; }
public string InserviceItemId { get; }
public string ProductName { get; }
public int Quantity { get; }
public string ThumbnailUrl { get; }
}
Members
| Name | Type | Access | Description |
|---|---|---|---|
TxnMasterNo | long | 읽기 | 트랜잭션 마스터 번호 |
TxnDetailNo | long | 읽기 | 트랜잭션 상세 번호 (상품별 TID) |
ProductId | long | 읽기 | 플랫폼 고유 상품 식별자 |
InserviceItemId | string | 읽기 | 이 상품에 매핑된 게임 내 아이템 식별자 |
ProductName | string | 읽기 | 현지화된 상품 이름 |
Quantity | int | 읽기 | 구매한 수량 |
ThumbnailUrl | string | 읽기 | 상품 대표 썸네일 이미지 URL |
Example
using static Stove.PCSDK.V3.IAP;
void OnFetchInventoryCallback(IStoveCallbackResult callbackResult, IStoveInventoryList list)
{
if (callbackResult.Result.IsSuccessful)
{
foreach (var item in list)
{
long productId = item.ProductId;
int quantity = item.Quantity;
// 필요한 값만 사용해 화면을 구성해 주세요.
}
}
else
{
// 실패 시 로직을 구현해 주세요.
}
}
Notes
- Stove_FetchInventory 의 출력으로만 전달돼요.
- 게임 아이템 지급 여부 확인 시
TxnDetailNo를 기준으로 중복 처리를 방지해야 해요.
See Also
IStoveInventoryList
종류 구조체 · 모듈 IAP · 버전 3.5.0
Description
Stove_FetchInventory 호출 결과로 OnFetchInventoryCallback 콜백에 전달되는 IStoveInventoryItem 목록 래퍼예요. IReadOnlyList<IStoveInventoryItem> 를 구현하여 foreach 로 순회할 수 있어요.
SDK 가 소유한 읽기 전용 구조체(readonly struct)이며, 콜백이 실행되는 동안에만 유효해요. 호출자가 직접 만들지 않아요. 콜백 밖에서 보관하려면 항목 값을 복사해 두어야 해요.
readonly struct(값 타입)이므로 GC 가 처리하며 별도로 해제할 필요가 없어요.
Declaration
public readonly struct IStoveInventoryList : IReadOnlyList<IStoveInventoryItem>
{
// 멤버는 아래 멤버 표를 참고하십시오.
}
Members
| Name | Type | Access | Description |
|---|---|---|---|
Count | int | 읽기 | 목록에 포함된 구매 이력 항목 수 |
this[int index] | IStoveInventoryItem | 읽기 | 인덱스로 항목에 접근하는 인덱서 |
GetEnumerator() | StoveReadOnlyArrayEnumerator<IStoveInventoryItem> | — | foreach 구문에서 사용하는 박싱 없는 열거자를 반환해요. |
Example
using static Stove.PCSDK.V3.IAP;
void OnFetchInventoryCallback(IStoveCallbackResult callbackResult, IStoveInventoryList list)
{
if (callbackResult.Result.IsSuccessful)
{
foreach (var item in list)
{
long productId = item.ProductId;
// 필요한 값만 사용해 화면을 구성해 주세요.
}
}
else
{
// 실패 시 로직을 구현해 주세요.
}
}
Notes
- Stove_FetchInventory 의 출력으로만 전달돼요.
- 콜백이 끝나면 무효처리되므로, 콜백 밖에서 계속 사용할 값은 미리 복사해 두어야 해요.
- 박싱 없는 열거자(
StoveReadOnlyArrayEnumerator<T>)를 사용해foreach사용 시에도 힙 할당이 발생하지 않아요.
See Also
IStoveManualPopupParam
종류 구조체 · 모듈 View · 버전 3.5.0
Description
Stove_ManualPopup 호출 시 넘기는 파라미터예요. 웹뷰 표시 모드와, 표시할 팝업 콘텐츠를 고르는 리소스 키를 지정해요.
호출자가 만들어 API 에 값으로 전달해요. 별도로 해제할 필요가 없어요(값 타입).
Declaration
public struct IStoveManualPopupParam
{
public EStoveWebViewMode WebViewMode { get; set; }
public string ResourceKey { get; set; }
}
Members
| Name | Type | Access | Required | Description |
|---|---|---|---|---|
WebViewMode | EStoveWebViewMode | 읽기·쓰기 | Y | 웹뷰 표시 모드예요(External / Internal). |
ResourceKey | string | 읽기·쓰기 | Y | 표시할 수동 팝업을 식별하는 리소스 키예요. |
Example
using static Stove.PCSDK.V3.View;
void OnViewPopupCallback(IStoveCallbackResult callbackResult)
{
if (callbackResult.Result.IsSuccessful)
{
// 성공 시 로직을 구현해 주세요.
}
else
{
// 실패 시 로직을 구현해 주세요.
}
}
void OnViewPopupDestroyCallback(IStoveCallbackResult callbackResult)
{
// 팝업의 네이티브 리소스가 해제되었을 때 호출됩니다.
}
var manualPopupParam = new IStoveManualPopupParam
{
WebViewMode = EStoveWebViewMode.k_EStoveWebViewMode_Internal,
ResourceKey = "YOUR_RESOURCE_KEY"
};
Stove_ManualPopup(manualPopupParam, OnViewPopupCallback, OnViewPopupDestroyCallback);
Notes
- Auto/News/Coupon 팝업은 이 타입이 아니라 IStovePopupParam 을 사용해요(
ResourceKey없음).
See Also
IStoveOrderProductParam
종류 구조체 · 모듈 IAP · 버전 3.5.0
Description
IStoveStartPurchaseParam 의 Products 배열에 담기는 상품별 주문 항목이에요. 구매할 상품 하나당 하나씩 만들어 배열로 전달해요.
일반 C# 구조체(struct)이며 생성 함수를 쓰지 않아요. 게임 코드가 new IStoveOrderProductParam { ... } 형태로 직접 만들어 값을 채운 뒤 사용해요. 값 타입이므로 별도로 해제할 필요가 없어요.
Declaration
public struct IStoveOrderProductParam
{
public long ProductId { get; set; }
public double SalePrice { get; set; }
public int Quantity { get; set; }
}
Members
| Name | Type | Access | Required | Description |
|---|---|---|---|---|
ProductId | long | 읽기·쓰기 | 예 | 플랫폼 고유 상품 식별자. IStoveProduct 의 ProductId 와 일치해야 해요. |
SalePrice | double | 읽기·쓰기 | 예 | 클라이언트가 관찰한 이 상품의 단가(판매가). 서버가 클라이언트/서버 가격 불일치를 검사하는 데 사용해요. |
Quantity | int | 읽기·쓰기 | 예 | 구매할 수량 |
Example
using static Stove.PCSDK.V3.IAP;
var orderProduct = new IStoveOrderProductParam
{
ProductId = productId,
SalePrice = salePrice,
Quantity = 1
};
var startPurchaseParam = new IStoveStartPurchaseParam
{
Products = new[] { orderProduct },
// PurchaseParam 등 나머지 필드는 IStoveStartPurchaseParam 문서를 참고해 채워 주세요.
};
Stove_StartPurchase(startPurchaseParam, OnStartPurchaseCallback, null);
Notes
SalePrice는 IStoveProduct 의SalePrice값을 그대로 사용해 주세요. 값이 다르면 서버에서 가격 불일치로 처리될 수 있어요.
See Also
IStoveOverImmersionInfo
종류 구조체 · 모듈 Base · 버전 3.5.0
Description
Stove_OverImmersionNotification() 콜백으로 전달되는 과몰입 방지 알림 구조체예요. 한국 전용 API 예요.
경고 메시지와 게임 누적 이용 시간, 메시지 노출 시간을 담아요. readonly struct(값 타입)이므로 GC 가 처리하며 별도로 해제할 필요가 없어요.
Declaration
public readonly struct IStoveOverImmersionInfo
{
public string Msg { get; }
public int ElapsedHours { get; }
public int ExposureTime { get; }
}
Members
| Name | Type | Access | Description |
|---|---|---|---|
Msg | string | 읽기 (프로퍼티) | 과몰입 경고 메시지예요. |
ElapsedHours | int | 읽기 (프로퍼티) | 게임 누적 이용 시간(시간 단위)예요. |
ExposureTime | int | 읽기 (프로퍼티) | 메시지 노출 시간(초)예요. |
Example
using static Stove.PCSDK.V3.Base;
void OnOverImmersionNotificationCallback(IStoveCallbackResult callbackResult, IStoveOverImmersionInfo overImmersion)
{
if (callbackResult.Result.IsSuccessful)
{
string msg = overImmersion.Msg;
int exposureTime = overImmersion.ExposureTime;
// 성공 시 로직을 구현해 주세요. (msg 를 exposureTime 초 동안 노출)
}
else
{
// 실패 시 로직을 구현해 주세요.
}
}
Stove_OverImmersionNotification(OnOverImmersionNotificationCallback);
Notes
- 한국 전용 API 이며, 렌더링이 가능한 시점 이후에 호출해야 해요.
ElapsedHours단위는 시간(hour)이에요. 분 단위인 IStoveVietnamOverimmersionInfo.ElapsedMinutes와 혼동하지 않도록 주의해요.- 이전 형상에서는 이 타입의 이름이
IStoveOverImmersion이었고 시간 필드 이름도ElapsedTime이었어요. 현재 소스(BaseTypesV2.cs)는 타입명IStoveOverImmersionInfo, 필드명ElapsedHours로 바뀌었어요.
See Also
IStovePCBangBenefitInfo
종류 구조체 · 모듈 PCBang · 버전 3.5.0
Description
Stove_PCBangLogin 의 로그인이 성공한 뒤, onRefreshBenefit 콜백에 주기적으로 전달되는 갱신된 혜택 정보예요.
SDK 가 생성해 콜백으로 전달하는 값이에요. 호출자가 직접 만들지 않아요. 매니지드 값이므로 콜백이 끝난 뒤에도 그대로 보관해 사용할 수 있어요.
4분 주기로 반복 호출돼요. 1회성 콜백이 아니므로, 등록 이후 매 4분마다 실행될 것을 감안해 콜백을 구현해야 해요.
Declaration
public readonly struct IStovePCBangBenefitInfo
{
public EStovePCBangPremium PremiumCheck { get; }
public int RemainTime { get; }
}
Members
| Name | Type | Access | Description |
|---|---|---|---|
PremiumCheck | EStovePCBangPremium | 읽기 | PC방 프리미엄 상태예요. |
RemainTime | int | 읽기 | 남은 유료 혜택 이용 시간이에요(초 단위). |
Example
using static Stove.PCSDK.V3.PCBang;
void OnPCBangLoginCallback(IStoveCallbackResult callbackResult, IStovePCBangLoginOutcome loginOutcome)
{
// 최초 로그인 완료 시 1회 호출됩니다.
}
void OnRefreshPCBangBenefitCallback(IStoveCallbackResult callbackResult, IStovePCBangBenefitInfo benefitInfo)
{
if (callbackResult.Result.IsSuccessful)
{
// 성공 시 로직을 구현해 주세요.
int remainTime = benefitInfo.RemainTime;
}
else
{
// 실패 시 로직을 구현해 주세요.
}
}
Stove_PCBangLogin(OnPCBangLoginCallback, OnRefreshPCBangBenefitCallback);
Notes
- 옛(v1) 이름은
StovePCRefreshUserBenefits이에요. - 이 콜백은 4분 주기로 반복 호출되며, 유료(Premium)·무료(Free) 상태 모두에서 호출돼요. 프리미엄 상태일 때만 호출되는 것이 아니에요.
- Stove_PCBangLogout 을 호출하면 이 콜백의 반복 등록이 해제돼요.
See Also
IStovePCBangLoginOutcome
종류 구조체 · 모듈 PCBang · 버전 3.5.0
Description
Stove_PCBangLogin 의 최초 로그인이 완료되었을 때 onUserLogin 콜백에 전달되는 값이에요.
SDK 가 생성해 콜백으로 전달하는 값이에요. 호출자가 직접 만들지 않아요.
readonly struct(값 타입)이므로 GC 가 처리하며 별도로 해제할 필요가 없어요. 콜백이 끝난 뒤에도 값을 그대로 보관해 사용할 수 있어요.
Declaration
public readonly struct IStovePCBangLoginOutcome
{
public EStovePCBangPremium PremiumCheck { get; }
public int Psn { get; }
public int RemainTime { get; }
}
Members
| Name | Type | Access | Description |
|---|---|---|---|
PremiumCheck | EStovePCBangPremium | 읽기 | PC방 프리미엄 상태예요. |
Psn | int | 읽기 | 사용자에게 할당된 PC방 좌석/세션 번호(PSN)이에요. |
RemainTime | int | 읽기 | 남은 유료 혜택 이용 시간이에요(초 단위). |
Example
using static Stove.PCSDK.V3.PCBang;
void OnPCBangLoginCallback(IStoveCallbackResult callbackResult, IStovePCBangLoginOutcome loginOutcome)
{
if (callbackResult.Result.IsSuccessful)
{
// 성공 시 로직을 구현해 주세요.
int remainTime = loginOutcome.RemainTime;
}
else
{
// 실패 시 로직을 구현해 주세요.
}
}
void OnRefreshPCBangBenefitCallback(IStoveCallbackResult callbackResult, IStovePCBangBenefitInfo benefitInfo)
{
// 4분 주기로 반복 호출됩니다.
}
Stove_PCBangLogin(OnPCBangLoginCallback, OnRefreshPCBangBenefitCallback);
Notes
- 옛(v1) 이름은
StovePCBangUserLogin이에요. - 최초 로그인 이후에는 이 값이 아니라 IStovePCBangBenefitInfo 가 4분 주기로 갱신되어 전달돼요.
See Also
IStovePCBangStatus
종류 구조체 · 모듈 PCBang · 버전 3.5.0
Description
Stove_PCBangCheckStatus 호출 결과로 전달되는, 현재 PC방 상황과 사용자가 이용 가능한 상품(entitlement) 정보예요.
SDK 가 생성해 콜백으로 전달하는 값이에요. 호출자가 직접 만들지 않아요.
readonly struct(값 타입)이므로 GC 가 처리하며 별도로 해제할 필요가 없어요. 콜백이 끝난 뒤에도 값을 그대로 보관해 사용할 수 있어요.
Declaration
public readonly struct IStovePCBangStatus
{
public EStovePCBangPremium PremiumCheck { get; }
public int Psn { get; }
public int ProductCode { get; }
}
Members
| Name | Type | Access | Description |
|---|---|---|---|
PremiumCheck | EStovePCBangPremium | 읽기 | PC방 프리미엄 상태예요. |
Psn | int | 읽기 | 사용자에게 할당된 PC방 좌석/세션 번호(PSN)이에요. |
ProductCode | int | 읽기 | 사용자가 현재 이용 가능한 PC방 상품 코드예요. |
Example
using static Stove.PCSDK.V3.PCBang;
void OnPCBangCheckStatusCallback(IStoveCallbackResult callbackResult, IStovePCBangStatus status)
{
if (callbackResult.Result.IsSuccessful)
{
// 성공 시 로직을 구현해 주세요.
int productCode = status.ProductCode;
}
else
{
// 실패 시 로직을 구현해 주세요.
}
}
Stove_PCBangCheckStatus(OnPCBangCheckStatusCallback);
Notes
- 옛(v1) 이름은
StovePCBangStatus이에요. - IStovePCBangLoginOutcome 과 필드 구성이 비슷하지만
RemainTime대신ProductCode를 가져요.
See Also
IStovePopupParam
종류 구조체 · 모듈 View · 버전 3.5.0
Description
Stove_AutoPopup, Stove_NewsPopup, Stove_CouponPopup 세 API 가 공통으로 사용하는 파라미터예요. 웹뷰 표시 모드만 지정해요.
호출자가 만들어 API 에 값으로 전달해요. 별도로 해제할 필요가 없어요(값 타입).
Declaration
public struct IStovePopupParam
{
public EStoveWebViewMode WebViewMode { get; set; }
}
Members
| Name | Type | Access | Required | Description |
|---|---|---|---|---|
WebViewMode | EStoveWebViewMode | 읽기·쓰기 | Y | 웹뷰 표시 모드예요(External / Internal). |
Example
using static Stove.PCSDK.V3.View;
void OnViewPopupCallback(IStoveCallbackResult callbackResult)
{
if (callbackResult.Result.IsSuccessful)
{
// 성공 시 로직을 구현해 주세요.
}
else
{
// 실패 시 로직을 구현해 주세요.
}
}
void OnViewPopupDestroyCallback(IStoveCallbackResult callbackResult)
{
// 팝업의 네이티브 리소스가 해제되었을 때 호출됩니다.
}
var popupParam = new IStovePopupParam { WebViewMode = EStoveWebViewMode.k_EStoveWebViewMode_Internal };
Stove_AutoPopup(popupParam, OnViewPopupCallback, OnViewPopupDestroyCallback);
Notes
- Manual 팝업은 이 타입이 아니라 IStoveManualPopupParam 을 사용해요(
ResourceKey추가). - 본인 확인 팝업은 이 타입이 아니라 IStoveVerifyIdentificationPopupParam 을 사용해요.
See Also
IStoveProduct
종류 구조체 · 모듈 IAP · 버전 3.5.0
Description
상점에서 판매하는 상품 하나를 나타내요. Stove_FetchProducts 호출 결과로 OnFetchProductsCallback 콜백에 IStoveProductList 형태로 전달돼요.
SDK 가 값을 채워서 콜백으로 전달하는 읽기 전용 구조체(readonly struct)이에요. 호출자가 직접 만들지 않아요. 값 타입이므로 콜백이 끝난 뒤에도 값을 그대로 복사해 보관해 사용할 수 있으며, 별도로 해제할 필요가 없어요. 멤버가 32개로 많아 아래 ## 멤버 를 성격별로 나누어 정리했어요.
Declaration
public readonly struct IStoveProduct
{
// 멤버는 아래 멤버 표를 참고하십시오.
}
Members
기본 정보
| Name | Type | Access | Description |
|---|---|---|---|
ProductId | long | 읽기 | 플랫폼 고유 상품 식별자 |
InserviceItemId | string | 읽기 | 이 상품에 매핑된 게임 내 아이템 식별자 |
ProductName | string | 읽기 | 현지화된 상품 이름 |
ProductDescription | string | 읽기 | 현지화된 상품 설명 |
Quantity | int | 읽기 | 이 상품 1회 구매 시 지급되는 아이템 수량 |
ProductTypeCode | EStoveProductTypeCode | 읽기 | 상품 분류 코드 |
CategoryId | string | 읽기 | 이 상품이 속한 상점 카테고리 식별자 |
CategoryName | string | 읽기 | 이 상품이 속한 상점 카테고리의 현지화된 이름 |
ThumbnailUrl | string | 읽기 | 상품 대표 썸네일 이미지 URL |
가격
| Name | Type | Access | Description |
|---|---|---|---|
CurrencyCode | string | 읽기 | ISO 4217 통화 코드 (예: "USD", "KRW") |
Price | double | 읽기 | 결제 처리에 사용되는 정가 |
DisplayPrice | double | 읽기 | 화면 표시에 사용되는 정가 (반올림 등으로 Price 와 다를 수 있음) |
StrDisplayPrice | string | 읽기 | 통화 서식이 적용된 표시용 정가 문자열 |
SalePrice | double | 읽기 | 결제 처리에 사용되는 판매가 (할인 중이 아니면 Price 와 동일) |
DisplaySalePrice | double | 읽기 | 화면 표시에 사용되는 판매가 |
StrDisplaySalePrice | string | 읽기 | 통화 서식이 적용된 표시용 판매가 문자열 |
할인
| Name | Type | Access | Description |
|---|---|---|---|
IsDiscounted | bool | 읽기 | 현재 할인 중인지 여부 |
DiscountType | EStoveDiscountType | 읽기 | 할인 계산 방식 |
DiscountTypeValue | int | 읽기 | 할인 값. DiscountType 이 FixedRate 이면 퍼센트(예: 10 = 10% 할인), FlatRate 이면 상품 통화 기준 정액 할인액 |
DiscountStartDate | long | 읽기 | 할인 시작 시각 (UTC epoch milliseconds) |
DiscountEndDate | long | 읽기 | 할인 종료 시각 (UTC epoch milliseconds) |
구매 수량 및 이력
| Name | Type | Access | Description |
|---|---|---|---|
TotalQuantity | int | 읽기 | 모든 범위를 통틀어 이 상품이 구매된 총수량 |
MemberQuantity | int | 읽기 | 로그인 계정(회원) 범위에서 구매된 수량 |
GuidQuantity | int | 읽기 | 현재 캐릭터 GUID 범위에서 구매된 수량 |
HasPurchased | bool | 읽기 | 사용자가 이 상품을 한 번이라도 구매한 적이 있는지 여부 |
IsWithdrawable | bool | 읽기 | 청약철회(소비자 보호 환불) 규정이 적용되는 상품인지 여부 |
구매 제한 및 판매 기간
| Name | Type | Access | Description |
|---|---|---|---|
PurchaseLimitTypeCode | EStovePurchaseLimitTypeCode | 읽기 | 구매 제한 정책 |
PurchaseLimitCount | int | 읽기 | 현재 정책 하의 구매 횟수 제한 |
SaleLimitCount | int | 읽기 | 상품의 총 판매 수량 제한 (0 이면 무제한) |
SalesStartDate | long | 읽기 | 판매 기간 시작 시각 (UTC epoch milliseconds) |
SalesEndDate | long | 읽기 | 판매 기간 종료 시각 (UTC epoch milliseconds) |
PurchaseAvailabilityCode | short | 읽기 | 구매 가능 여부 코드. 1: 구매 가능, 2: 구매 불가능(구매 제한 초과), 3: 구매 불가능(웹 스토어 품절), 4: 구매 불가능(웹 스토어에서 이미 수령함). 이 값 집합은 서버에서 확장될 수 있어요. 상품 1개 단위 구매 요청 기준이며, 2개 이상을 함께 구매 요청하면 결과가 다를 수 있어요 |
Example
using static Stove.PCSDK.V3.IAP;
void OnFetchProductsCallback(IStoveCallbackResult callbackResult, IStoveProductList list)
{
if (callbackResult.Result.IsSuccessful)
{
foreach (var product in list)
{
long productId = product.ProductId;
string productName = product.ProductName;
double salePrice = product.SalePrice;
bool onSale = product.IsDiscounted;
// 필요한 값만 사용해 화면을 구성해 주세요.
}
}
else
{
// 실패 시 로직을 구현해 주세요.
}
}
Notes
- Stove_FetchProducts 의 출력으로만 전달돼요.
Price/SalePrice는 결제 처리(서버 검증)에 사용하고,DisplayPrice/DisplaySalePrice/StrDisplayPrice/StrDisplaySalePrice는 화면 표시에만 사용해 주세요.- 구매 시 서버가 관찰한 가격과의 불일치를 검사하므로, IStoveOrderProductParam 의
SalePrice에는 이 상품의SalePrice값을 그대로 전달해야 해요. DiscountStartDate/DiscountEndDate/SalesStartDate/SalesEndDate는 모두 UTC 밀리초 Unix epoch 값이에요.
See Also
IStoveProductList
종류 구조체 · 모듈 IAP · 버전 3.5.0
Description
Stove_FetchProducts 호출 결과로 OnFetchProductsCallback 콜백에 전달되는 IStoveProduct 목록 래퍼예요. IReadOnlyList<IStoveProduct> 를 구현하여 foreach 로 순회할 수 있어요.
SDK 가 소유한 읽기 전용 구조체(readonly struct)이며, 콜백이 실행되는 동안에만 유효해요. 호출자가 직접 만들지 않아요. 콜백 밖에서 보관하려면 항목 값을 복사해 두어야 해요.
readonly struct(값 타입)이므로 GC 가 처리하며 별도로 해제할 필요가 없어요.
Declaration
public readonly struct IStoveProductList : IReadOnlyList<IStoveProduct>
{
// 멤버는 아래 멤버 표를 참고하십시오.
}
Members
| Name | Type | Access | Description |
|---|---|---|---|
Count | int | 읽기 | 목록에 포함된 상품 수 |
this[int index] | IStoveProduct | 읽기 | 인덱스로 항목에 접근하는 인덱서 |
GetEnumerator() | StoveReadOnlyArrayEnumerator<IStoveProduct> | — | foreach 구문에서 사용하는 박싱 없는 열거자를 반환해요. |
Example
using static Stove.PCSDK.V3.IAP;
void OnFetchProductsCallback(IStoveCallbackResult callbackResult, IStoveProductList list)
{
if (callbackResult.Result.IsSuccessful)
{
foreach (var product in list)
{
long productId = product.ProductId;
// 필요한 값만 사용해 화면을 구성해 주세요.
}
}
else
{
// 실패 시 로직을 구현해 주세요.
}
}
Notes
- Stove_FetchProducts 의 출력으로만 전달돼요.
- 콜백이 끝나면 무효처리되므로, 콜백 밖에서 계속 사용할 값은 미리 복사해 두어야 해요.
- 박싱 없는 열거자(
StoveReadOnlyArrayEnumerator<T>)를 사용해foreach사용 시에도 힙 할당이 발생하지 않아요.
See Also
IStovePurchasedProduct
종류 구조체 · 모듈 IAP · 버전 3.5.0
Description
완료된 구매(트랜잭션) 안의 상품 한 항목을 나타내요. Stove_ConfirmPurchase 결과인 IStoveConfirmPurchaseOutcome 의 PurchasedProducts 와, Stove_StartPurchase 결과인 IStoveStartPurchaseOutcome 의 PurchasedProducts 양쪽에 배열로 담겨 전달돼요.
SDK 가 값을 채워서 콜백으로 전달하는 읽기 전용 구조체(readonly struct)이에요. 호출자가 직접 만들지 않아요. 값 타입이므로 콜백이 끝난 뒤에도 값을 그대로 복사해 보관해 사용할 수 있으며, 별도로 해제할 필요가 없어요.
Declaration
public readonly struct IStovePurchasedProduct
{
public long TxnDetailNo { get; }
public long ProductId { get; }
public string CategoryId { get; }
public int TotalQuantity { get; }
public int MemberQuantity { get; }
public int GuidQuantity { get; }
}
Members
| Name | Type | Access | Description |
|---|---|---|---|
TxnDetailNo | long | 읽기 | 트랜잭션 상세 번호 (마스터 트랜잭션 내 상품별 TID) |
ProductId | long | 읽기 | 플랫폼 고유 상품 식별자 |
CategoryId | string | 읽기 | 이 상품이 속한 상점 카테고리 식별자 |
TotalQuantity | int | 읽기 | 이 상품의 총 구매 수량 |
MemberQuantity | int | 읽기 | 회원(계정) 범위에서 구매된 수량 |
GuidQuantity | int | 읽기 | 현재 캐릭터 GUID 범위에서 구매된 수량 |
Example
using static Stove.PCSDK.V3.IAP;
void OnConfirmPurchaseCallback(IStoveCallbackResult callbackResult, IStoveConfirmPurchaseOutcome outcome)
{
if (callbackResult.Result.IsSuccessful && outcome.IsConfirmed)
{
foreach (var purchasedProduct in outcome.PurchasedProducts)
{
long productId = purchasedProduct.ProductId;
int totalQuantity = purchasedProduct.TotalQuantity;
// 필요한 값만 사용해 아이템을 지급해 주세요.
}
}
else
{
// 실패 시 로직을 구현해 주세요.
}
}
Notes
- IStoveConfirmPurchaseOutcome 의
PurchasedProducts와 IStoveStartPurchaseOutcome 의PurchasedProducts양쪽에서 전달돼요. - 게임 아이템 지급은
TxnDetailNo를 기준으로 중복 처리를 방지해야 해요.
See Also
IStovePurchaseParam
종류 구조체 · 모듈 IAP · 버전 3.5.0
Description
IStoveStartPurchaseParam 의 PurchaseParam 필드에 담겨 Stove_StartPurchase 의 동작 방식을 결정하는 옵션이에요. WebView* 필드는 모두 Operation 이 Default 가 아닐 때만 적용돼요.
일반 C# 구조체(struct)이며 생성 함수를 쓰지 않아요. 게임 코드가 new IStovePurchaseParam { ... } 형태로 직접 만들어 값을 채운 뒤 사용해요. 값 타입이므로 별도로 해제할 필요가 없어요.
Declaration
public struct IStovePurchaseParam
{
public EStovePurchaseOperation Operation { get; set; }
public EStoveWebViewMode WebViewMode { get; set; }
public int WebViewPosX { get; set; }
public int WebViewPosY { get; set; }
public int WebViewWidth { get; set; }
public int WebViewHeight { get; set; }
}
Members
| Name | Type | Access | Required | Description |
|---|---|---|---|---|
Operation | EStovePurchaseOperation | 읽기·쓰기 | 예 | 동작 방식 선택자 |
WebViewMode | EStoveWebViewMode | 읽기·쓰기 | 아니오 | 웹뷰 표시 모드 (외부 브라우저 / SDK 내장 웹뷰). Operation != Default 일 때만 적용돼요. |
WebViewPosX | int | 읽기·쓰기 | 아니오 | 웹뷰 x 좌표 (픽셀). Operation != Default 일 때만 적용돼요. |
WebViewPosY | int | 읽기·쓰기 | 아니오 | 웹뷰 y 좌표 (픽셀). Operation != Default 일 때만 적용돼요. |
WebViewWidth | int | 읽기·쓰기 | 아니오 | 웹뷰 너비 (픽셀). Operation != Default 일 때만 적용돼요. |
WebViewHeight | int | 읽기·쓰기 | 아니오 | 웹뷰 높이 (픽셀). Operation != Default 일 때만 적용돼요. |
Example
using static Stove.PCSDK.V3.IAP;
var purchaseParam = new IStovePurchaseParam
{
Operation = EStovePurchaseOperation.k_EStovePurchaseOperation_WithWebViewAndConfirmResult,
WebViewMode = EStoveWebViewMode.k_EStoveWebViewMode_Internal,
WebViewWidth = 480,
WebViewHeight = 640
};
var startPurchaseParam = new IStoveStartPurchaseParam
{
// Products 등 나머지 필드는 IStoveStartPurchaseParam 문서를 참고해 채워 주세요.
PurchaseParam = purchaseParam
};
Stove_StartPurchase(startPurchaseParam, OnStartPurchaseCallback, null);
Notes
Operation이Default이면WebView*필드는 무시돼요.
See Also
IStoveRestartAppIfNecessaryOutcome
종류 구조체 · 모듈 Base · 버전 3.5.0
Description
Stove_RestartAppIfNecessary() 콜백으로 전달되는 결과예요. 앱을 Stove 런처를 통해 재시작해야 하는지 여부를 담는 하나의 플래그(IsRestartRequired)를 도메인 엔터티로 감싸, 이후 필드가 추가되어도 콜백 시그니처가 바뀌지 않도록 설계되었어요.
readonly struct(값 타입)이므로 GC 가 처리하며 별도로 해제할 필요가 없어요.
Declaration
public readonly struct IStoveRestartAppIfNecessaryOutcome
{
public bool IsRestartRequired { get; }
}
Members
| Name | Type | Access | Description |
|---|---|---|---|
IsRestartRequired | bool | 읽기 (프로퍼티) | true 이면 Stove 런처를 통해 앱을 다시 실행해야 해요(현재 프로세스는 종료해야 해요). false 이면 계속 진행해도 돼요. |
Example
using static Stove.PCSDK.V3.Base;
void OnRestartAppIfNecessaryCallback(IStoveCallbackResult callbackResult, IStoveRestartAppIfNecessaryOutcome outcome)
{
if (callbackResult.Result.IsSuccessful)
{
if (outcome.IsRestartRequired)
{
// 앱을 종료하고 Stove 런처를 통해 재시작하도록 유도하는 로직을 구현해 주세요.
}
else
{
// 계속 진행하는 로직을 구현해 주세요.
}
}
else
{
// 실패 시 로직을 구현해 주세요.
}
}
Notes
Stove_RestartAppIfNecessary()의 비동기 콜백 두 번째 인자로 전달돼요.IsRestartRequired가 true 인데도 앱이 런처를 거치지 않고 계속 실행되면 이후 SDK 호출이 실패할 수 있어요.
See Also
IStoveRestartAppIfNecessaryParam
종류 구조체 · 모듈 Base · 버전 3.5.0
Description
Stove_RestartAppIfNecessary() 호출에 필요한 파라미터를 담아요. 앱이 Stove 런처를 거쳐 실행되었는지 확인하고, 아니라면 런처를 통해 재시작해야 하는지를 판단하는 데 필요한 환경/게임 식별 정보를 전달해요.
일반 struct(값 타입)이며 각 필드가 get/set 프로퍼티로 노출돼요. 신규 flat C 인터페이스와 달리 게임 코드가 생성 함수 없이 new IStoveRestartAppIfNecessaryParam { ... } 형태로 직접 만들어 값을 채워요.
Stove_RestartAppIfNecessary()는Stove_Initialize()보다 먼저 호출해야 해요.
Declaration
public struct IStoveRestartAppIfNecessaryParam
{
public string Environment { get; set; }
public string GameId { get; set; }
public string AppKey { get; set; }
public uint WaitTimeMilliSec { get; set; }
public bool LaunchStoveLauncher { get; set; }
public string PlatformName { get; set; }
}
Members
| Name | Type | Access | Description |
|---|---|---|---|
Environment | string | 읽기·쓰기 (프로퍼티) | Stove 환경 값이에요. |
GameId | string | 읽기·쓰기 (프로퍼티) | Stove 게임 ID 값이에요. |
AppKey | string | 읽기·쓰기 (프로퍼티) | Stove 애플리케이션 키 값이에요. |
WaitTimeMilliSec | uint | 읽기·쓰기 (프로퍼티) | 앱이 런처를 통해 실행되었는지 확인하는 대기 시간(밀리초)예요. |
LaunchStoveLauncher | bool | 읽기·쓰기 (프로퍼티) | Stove 런처가 실행 중이 아닐 때 런처를 실행할지 여부예요. |
PlatformName | string | 읽기·쓰기 (프로퍼티) | 플랫폼 이름이에요. 선택 필드이며 스토브 외 플랫폼(Steam 등)과 함께 연동할 때만 지정해요. 설정하지 않거나 "Stove" 를 지정하면 스토브 단독 연동으로 동작해요. |
Example
using static Stove.PCSDK.V3.Base;
IStoveRestartAppIfNecessaryParam param = new IStoveRestartAppIfNecessaryParam
{
Environment = "real",
GameId = "YOUR_GAME_ID",
AppKey = "YOUR_APP_KEY",
WaitTimeMilliSec = 3000,
LaunchStoveLauncher = true,
PlatformName = "Stove",
};
void OnRestartAppIfNecessaryCallback(IStoveCallbackResult callbackResult, IStoveRestartAppIfNecessaryOutcome outcome)
{
if (callbackResult.Result.IsSuccessful)
{
// 성공 시 로직을 구현해 주세요.
}
else
{
// 실패 시 로직을 구현해 주세요.
}
}
Stove_RestartAppIfNecessary(param, OnRestartAppIfNecessaryCallback);
Notes
- 단일 바이너리 통합 이전에는
Environment/GameId/AppKey가IStoveInitializeParam안에 함께 있었어요. 현재 소스(BaseTypesV2.cs)에서는 이 필드들이IStoveInitializeParam에서 빠져 이 타입으로 옮겨졌어요. - SDK 는
Stove_RestartAppIfNecessary()에서 전달받은Environment/GameId/AppKey를 내부적으로 캐시해Stove_Initialize()호출 시에도 재사용해요. PlatformName은 런처와 통신할 IPC 경로를 정하는 데 쓰예요. 값을 비워 두거나"Stove"를 지정하면 기존과 같은 경로를 사용해요. 런처가 지원하지 않는 임의의 값을 넣으면 경로가 달라져k_EStoveResultCode_IpcConnectFailed(307) 또는k_EStoveResultCode_IpcTimeout(309) 이 발생하므로, 스토브 외 플랫폼 연동 계획이 없다면 설정하지 않아요.
See Also
IStoveResult
종류 구조체 · 모듈 Base · 버전 3.5.0
Description
동기 API 호출의 결과를 담아요. 결과를 생성한 API 를 식별하는 메서드 코드, 결과 코드, 매니지드(C#) 예외 메시지를 포함해요.
Stove_Initialize(), Stove_GetUser() 등 대부분의 동기 API 가 이 타입을 반환값으로 돌려줘요. readonly struct(값 타입)이므로 GC 가 처리하며 별도로 해제할 필요가 없어요.
Declaration
public readonly struct IStoveResult
{
public uint MethodCode { get; }
public uint ResultCode { get; }
public string ExceptionMessage { get; }
public bool IsSuccessful => ResultCode == 0;
}
Members
| Name | Type | Access | Description |
|---|---|---|---|
MethodCode | uint | 읽기 (프로퍼티) | 이 결과를 생성한 API 를 식별하는 전역 고유 메서드 코드예요. 모듈은 1000 단위 블록으로 구분돼요(EStove<모듈>MethodCode). |
ResultCode | uint | 읽기 (프로퍼티) | 결과 코드예요. 0(Success)이면 성공, 0이 아니면 실패예요. |
ExceptionMessage | string | 읽기 (프로퍼티) | 매니지드(C#) 예외 메시지예요. |
IsSuccessful | bool | 읽기 (계산된 프로퍼티) | ResultCode == 0 여부를 반환하는 성공 판정 프로퍼티예요. |
WithManagedExceptionMsgAndCode(string exceptionMessage) | IStoveResult | 메서드 | ResultCode 를 k_EStoveCommonResultCode_ManagedException(254)으로, ExceptionMessage 를 지정한 값으로 설정한 새 IStoveResult 를 반환해요. MethodCode 는 그대로 유지돼요. |
Example
using static Stove.PCSDK.V3.Base;
IStoveResult result = Stove_Uninitialize();
if (result.IsSuccessful)
{
// 성공 시 로직을 구현해 주세요.
}
else
{
// 실패 시 로직을 구현해 주세요.
}
Notes
- 콜백이 아닌 동기 API(
Stove_Initialize,Stove_GetUser등)의 반환값으로 쓰예요. ResultCode는 EStoveCommonResultCode(0 ~ 299, 모듈 공통) 또는 EStoveResultCode(300 ~ 503, 모듈별 대역) 값이에요.IsSuccessful프로퍼티로 성공 여부를 바로 판정할 수 있어요.ResultCode값을 직접 비교할 필요가 없어요.- 이전 형상에는
SDKName필드와EStoveBaseResultCode열거형이 있었으나, 단일 바이너리 통합 이후SDKName필드는 제거되었고 결과 코드는EStoveCommonResultCode(공통) /EStoveResultCode(모듈별) 두 열거형으로 재편되었어요. WithManagedExceptionMsgAndCode()는 C# 래퍼가 콜백 마샬링 등에서 발생한 예외를MANAGED_EXCEPTION(254) 결과로 변환할 때 쓰는 내부 보조 메서드예요. 게임 코드가 직접 호출할 일은 거의 없어요.
See Also
IStoveSendLogParam
종류 구조체 · 모듈 Log · 버전 3.5.0
Description
Stove_SendLog 호출 시 넘기는 파라미터예요. 로그 백엔드로 전송할 계정 · 캐릭터 · 마케팅 · 서버 정보 등을 담아요.
호출자가 만들어 API 에 값으로 전달해요. 별도로 해제할 필요가 없어요(값 타입).
문자열 필드는 모두 선택 항목이며 기본값은 null 이에요. 필드를 null 로 두는 것은 "이 로그 항목에는 해당 필드가 적용되지 않음"을 뜻하며, SDK 는 이를 JSON null 로 전송해요(필드 자체를 생략하지 않아요). 이는 빈 문자열("")을 명시적으로 지정하는 것과는 다른 값으로 취급돼요. 해당 로그 항목에 관련 있는 필드만 채우고, 나머지는 기본값(문자열은 null, 숫자는 0)으로 남겨 두어야 해요. ExternalId 와 Contents 는 서버에서 예외적으로 처리되어, 값을 설정하지 않으면 각각 빈 문자열 · 빈 객체로 전송돼요.
Declaration
public struct IStoveSendLogParam
{
public long Auid { get; set; }
public long Cuid { get; set; }
public string MktType1 { get; set; }
public string MktId1 { get; set; }
public string MktType2 { get; set; }
public string MktId2 { get; set; }
public string GameVersion { get; set; }
public string LogGroupId { get; set; }
public string ServerCode { get; set; }
public string ServerCodeDetail { get; set; }
public string LevelCode { get; set; }
public string LevelCodeDetail { get; set; }
public string ExternalId { get; set; }
public string Contents { get; set; }
}
Members
| Name | Type | Access | Required | Description |
|---|---|---|---|---|
Auid | long | 읽기·쓰기 | N | 계정 UID(STOVE 계정 식별자)예요. |
Cuid | long | 읽기·쓰기 | N | 캐릭터 UID(게임 내 캐릭터 식별자)예요. |
MktType1 | string | 읽기·쓰기 | N | 연동된 제3자 마케팅 서비스 이름이에요(슬롯 1). |
MktId1 | string | 읽기·쓰기 | N | 슬롯 1 제3자 마케팅 서비스가 발급한 식별자예요(캠페인 · 리퍼러 ID). |
MktType2 | string | 읽기·쓰기 | N | 연동된 제3자 마케팅 서비스 이름이에요(슬롯 2). |
MktId2 | string | 읽기·쓰기 | N | 슬롯 2 제3자 마케팅 서비스가 발급한 식별자예요(캠페인 · 리퍼러 ID). |
GameVersion | string | 읽기·쓰기 | N | 게임 클라이언트 버전 문자열이에요(예: "1.2.3"). |
LogGroupId | string | 읽기·쓰기 | N | 서로 관련된 로그 항목들을 하나로 묶는 상관 ID 예요(예: 하나의 인게임 트랜잭션이나 플로우 안에서 생성된 로그들). |
ServerCode | string | 읽기·쓰기 | N | 사용자가 접속한 월드/지역 서버 코드예요. |
ServerCodeDetail | string | 읽기·쓰기 | N | ServerCode 하위의 서브 서버/채널/샤드를 나타내는 상세 서버 코드예요. |
LevelCode | string | 읽기·쓰기 | N | 로그 기록 시점의 계정 레벨 값이에요. |
LevelCodeDetail | string | 읽기·쓰기 | N | 로그 기록 시점의 캐릭터 레벨 값이에요. 이름에 Detail 이 붙어 있지만 LevelCode 의 하위 단계가 아니라, 캐릭터 범위의 값이에요. |
ExternalId | string | 읽기·쓰기 | N | 광고 어트리뷰션부터 인게임 행동까지 사용자 행동을 연결·추적하는 데 쓰이는 식별자예요(Singular, STOVE SDK, Log SDK, 인게임 로그 전반). Singular 와 연동된 게임은 이 필드에 SDID(Singular Device ID)를 전달해야 해요. |
Contents | string | 읽기·쓰기 | N | 위 필드로 다루지 못하는 항목을 담는 자유 형식 로그 내용이에요(보통 JSON 문서를 문자열로 인코딩). 레거시 81plug 의 action_param 필드에 대응해요. |
Example
using static Stove.PCSDK.V3.Log;
void OnSendLogCallback(IStoveCallbackResult callbackResult)
{
if (callbackResult.Result.IsSuccessful)
{
// 성공 시 로직을 구현해 주세요.
}
else
{
// 실패 시 로직을 구현해 주세요.
}
}
var logParam = new IStoveSendLogParam
{
Auid = 123456789L,
Cuid = 987654321L,
LogGroupId = "YOUR_LOG_GROUP_ID",
Contents = "{\"action\":\"login\"}"
};
Stove_SendLog(logParam, OnSendLogCallback);
Notes
MktType1/MktId1과MktType2/MktId2는 서로 독립된 두 개의 슬롯이에요. 우선/대체 관계가 아니므로, 해당하는 슬롯만 채워요.- 문자열 필드를
null로 두는 것과 빈 문자열("")로 설정하는 것은 서버로 전송되는 값이 달라요(null= 필드 미제공,""= 명시적 빈 값).ExternalId/Contents는 예외적으로 미설정 시 빈 문자열/빈 객체로 전송돼요.
See Also
IStoveSetGameProfileParam
종류 구조체 · 모듈 Base · 버전 3.5.0
Description
Stove_SetGameProfile() 호출 시 전달하는 게임 프로필 정보예요.
월드 식별자와 월드 내 캐릭터 번호를 담아요. 일반 struct(값 타입)이며 각 필드가 get/set 프로퍼티로 노출돼요. 신규 flat C 인터페이스와 달리 게임 코드가 생성 함수 없이 new IStoveSetGameProfileParam { ... } 형태로 직접 만들어 값을 채워요.
과거
StoveGameProfileParams문서에서CharacterNo필드를 "worldId Length" 로 표기한 것은 문서 오류였어요. 이 필드는 캐릭터 번호예요.
Declaration
public struct IStoveSetGameProfileParam
{
public string WorldId { get; set; }
public long CharacterNo { get; set; }
}
Members
| Name | Type | Access | Description |
|---|---|---|---|
WorldId | string | 읽기·쓰기 (프로퍼티) | 게임의 월드 식별자예요. |
CharacterNo | long | 읽기·쓰기 (프로퍼티) | 월드 내 캐릭터 번호예요. |
Example
using static Stove.PCSDK.V3.Base;
IStoveSetGameProfileParam gameProfileParam = new IStoveSetGameProfileParam
{
WorldId = "world_01",
CharacterNo = 123456789L,
};
IStoveResult result = Stove_SetGameProfile(gameProfileParam);
if (result.IsSuccessful)
{
// 성공 시 로직을 구현해 주세요.
}
else
{
// 실패 시 로직을 구현해 주세요.
}
Notes
CharacterNo는 이름과 달리 문자열 길이가 아니라 캐릭터 번호예요.- 신규 flat C 인터페이스는
Stove_CreateParam(k_EStoveBaseTypeKind_SetGameProfileParam)으로 생성한 뒤Destroy()로 해제해야 하지만, C# 에서는 이 구조체를 값 타입으로 직접 생성·초기화하며 생성/해제 함수를 호출하지 않아요. - 이전 형상에서는 이 타입의 이름이
IStoveGameProfileParam이었어요. 현재 소스(BaseTypesV2.cs)는IStoveSetGameProfileParam으로 바뀌었어요(멤버 구성은 동일).
See Also
IStoveSetPopupDisallowedParam
종류 구조체 · 모듈 View · 버전 3.5.0
Description
Stove_SetPopupDisallowed 호출 시 넘기는 파라미터예요. 어느 팝업을 며칠 동안 숨길지 지정해요.
호출자가 만들어 API 에 값으로 전달해요. 별도로 해제할 필요가 없어요(값 타입).
Declaration
public struct IStoveSetPopupDisallowedParam
{
public uint PopupId { get; set; }
public uint Days { get; set; }
}
Members
| Name | Type | Access | Required | Description |
|---|---|---|---|---|
PopupId | uint | 읽기·쓰기 | Y | 숨길 팝업의 식별자예요. |
Days | uint | 읽기·쓰기 | Y | 팝업을 숨길 기간이에요(일 단위). |
Example
using static Stove.PCSDK.V3.View;
void OnSetPopupDisallowedCallback(IStoveCallbackResult callbackResult)
{
if (callbackResult.Result.IsSuccessful)
{
// 성공 시 로직을 구현해 주세요.
}
else
{
// 실패 시 로직을 구현해 주세요.
}
}
var disallowedParam = new IStoveSetPopupDisallowedParam { PopupId = 1234, Days = 7 };
Stove_SetPopupDisallowed(disallowedParam, OnSetPopupDisallowedCallback);
Notes
- 다른 View 팝업 파라미터(
IStovePopupParam등)와 별도 타입이에요. 혼동하지 않도록 주의해요. PopupId는 SDK 호출로 얻는 값이 아니에요. AutoPopup/ManualPopup/NewsPopup/CouponPopup 의 콜백은 팝업 식별자를 반환하지 않으며, 차단 여부는 서버 API 없이 클라이언트 로컬 DB 에만 저장돼요. 따라서 팝업을 등록할 때 부여된 식별자를 게임(스튜디오) 쪽에서 별도로 알고 있어야 이 값을 채울 수 있어요.
See Also
IStoveShopCategory
종류 구조체 · 모듈 IAP · 버전 3.5.0
Description
상점 카테고리 트리를 구성하는 항목 하나를 나타내요. Stove_FetchShopCategories 호출 결과로 OnFetchShopCategoriesCallback 콜백에 IStoveShopCategoryList 형태로 전달돼요.
SDK 가 값을 채워서 콜백으로 전달하는 읽기 전용 구조체(readonly struct)이에요. 호출자가 직접 만들지 않아요. 값 타입이므로 콜백이 끝난 뒤에도 값을 그대로 복사해 보관해 사용할 수 있으며, 별도로 해제할 필요가 없어요.
Declaration
public readonly struct IStoveShopCategory
{
public string CategoryId { get; }
public string CategoryParentId { get; }
public int CategoryDisplayNo { get; }
public string CategoryName { get; }
public int CategoryDepth { get; }
}
Members
| Name | Type | Access | Description |
|---|---|---|---|
CategoryId | string | 읽기 | 카테고리 식별자 |
CategoryParentId | string | 읽기 | 상위 카테고리 식별자. 최상위 카테고리는 비어 있어요. |
CategoryDisplayNo | int | 읽기 | 같은 계층 내에서의 표시 순서 |
CategoryName | string | 읽기 | 현지화된 카테고리 이름 |
CategoryDepth | int | 읽기 | 카테고리 트리에서의 깊이 (0 = 최상위) |
Example
using static Stove.PCSDK.V3.IAP;
void OnFetchShopCategoriesCallback(IStoveCallbackResult callbackResult, IStoveShopCategoryList list)
{
if (callbackResult.Result.IsSuccessful)
{
foreach (var category in list)
{
string categoryId = category.CategoryId;
string categoryName = category.CategoryName;
int depth = category.CategoryDepth;
// 필요한 값만 사용해 화면을 구성해 주세요.
}
}
else
{
// 실패 시 로직을 구현해 주세요.
}
}
Notes
- Stove_FetchShopCategories 의 출력으로만 전달돼요.
CategoryParentId가 비어 있으면 최상위 카테고리예요.- IStoveProduct 의
CategoryId와CategoryName은 이 항목과 대응해요.
See Also
IStoveShopCategoryList
종류 구조체 · 모듈 IAP · 버전 3.5.0
Description
Stove_FetchShopCategories 호출 결과로 OnFetchShopCategoriesCallback 콜백에 전달되는 IStoveShopCategory 목록 래퍼예요. IReadOnlyList<IStoveShopCategory> 를 구현하여 foreach 로 순회할 수 있어요.
SDK 가 소유한 읽기 전용 구조체(readonly struct)이며, 콜백이 실행되는 동안에만 유효해요. 호출자가 직접 만들지 않아요. 콜백 밖에서 보관하려면 항목 값을 복사해 두어야 해요.
readonly struct(값 타입)이므로 GC 가 처리하며 별도로 해제할 필요가 없어요.
Declaration
public readonly struct IStoveShopCategoryList : IReadOnlyList<IStoveShopCategory>
{
// 멤버는 아래 멤버 표를 참고하십시오.
}
Members
| Name | Type | Access | Description |
|---|---|---|---|
Count | int | 읽기 | 목록에 포함된 카테고리 수 |
this[int index] | IStoveShopCategory | 읽기 | 인덱스로 항목에 접근하는 인덱서 |
GetEnumerator() | StoveReadOnlyArrayEnumerator<IStoveShopCategory> | — | foreach 구문에서 사용하는 박싱 없는 열거자를 반환해요. |
Example
using static Stove.PCSDK.V3.IAP;
void OnFetchShopCategoriesCallback(IStoveCallbackResult callbackResult, IStoveShopCategoryList list)
{
if (callbackResult.Result.IsSuccessful)
{
for (int i = 0; i < list.Count; i++)
{
IStoveShopCategory category = list[i];
// 필요한 값만 사용해 화면을 구성해 주세요.
}
// 또는 foreach 로 순회할 수 있습니다.
foreach (var category in list)
{
// ...
}
}
else
{
// 실패 시 로직을 구현해 주세요.
}
}
Notes
- Stove_FetchShopCategories 의 출력으로만 전달돼요.
- 콜백이 끝나면 무효처리되므로, 콜백 밖에서 계속 사용할 값은 미리 복사해 두어야 해요.
- 박싱 없는 열거자(
StoveReadOnlyArrayEnumerator<T>)를 사용해foreach사용 시에도 힙 할당이 발생하지 않아요.
See Also
IStoveShutdownInfo
종류 구조체 · 모듈 Base · 버전 3.5.0
Description
Stove_ShutdownNotification() 콜백으로 전달되는 셧다운 알림 구조체예요.
셧다운 메시지, 메시지 노출 시간, 셧다운까지 남은 시간을 담아요. readonly struct(값 타입)이므로 GC 가 처리하며 별도로 해제할 필요가 없어요.
셧다운 알림은 한국 전용이 아니에요 — 셧다운이 적용된 계정이면 해외에서도 이 콜백이 호출돼요.
Declaration
public readonly struct IStoveShutdownInfo
{
public string Msg { get; }
public int ExposureTime { get; }
public int InadvanceMinutes { get; }
}
Members
| Name | Type | Access | Description |
|---|---|---|---|
Msg | string | 읽기 (프로퍼티) | 셧다운 알림 메시지예요. |
ExposureTime | int | 읽기 (프로퍼티) | 셧다운 메시지 노출 시간(초)예요. |
InadvanceMinutes | int | 읽기 (프로퍼티) | 사용자가 셧다운되기까지 남은 시간(분)이에요. |
Example
using static Stove.PCSDK.V3.Base;
void OnShutdownNotificationCallback(IStoveCallbackResult callbackResult, IStoveShutdownInfo shutdown)
{
if (callbackResult.Result.IsSuccessful)
{
string msg = shutdown.Msg;
int inadvanceMinutes = shutdown.InadvanceMinutes;
// 성공 시 로직을 구현해 주세요.
}
else
{
// 실패 시 로직을 구현해 주세요.
}
}
Stove_ShutdownNotification(OnShutdownNotificationCallback);
Notes
- 셧다운이 적용된 계정이면 국가와 무관하게 이 콜백이 호출돼요.
- 이 콜백은 1회성이 아니에요. 서버가 내려준 사전 안내 시점(예: 셧다운 30분 전, 10분 전 등)마다, 그리고 실제 셧다운 시각이 되었을 때 각각 한 번씩 반복 호출돼요.
- 이전 형상에서는 이 타입의 이름이
IStoveShutdown이었어요. 현재 소스(BaseTypesV2.cs)는IStoveShutdownInfo로 바뀌었어요(멤버 구성은 동일).
See Also
IStoveSignin
종류 구조체 · 모듈 Base · 버전 3.5.0
Description
Stove_GetSignin() 호출 시 ref 파라미터로 전달받는 로그인 인증 정보 구조체예요.
본인 인증/이메일 인증 완료 여부와 가입 국가, 가입 시 사용한 인증 방식(IDP) 정보를 담아요. readonly struct(값 타입)이므로 GC 가 처리하며 별도로 해제할 필요가 없어요.
Declaration
public readonly struct IStoveSignin
{
public bool IsPersonVerified { get; }
public bool IsEmailVerified { get; }
public string RegisteredCountryCode { get; }
public string ProviderCode { get; }
public int AccountType { get; }
}
Members
| Name | Type | Access | Description |
|---|---|---|---|
IsPersonVerified | bool | 읽기 (프로퍼티) | 사용자의 본인 인증 완료 여부예요. |
IsEmailVerified | bool | 읽기 (프로퍼티) | 사용자의 이메일 인증 완료 여부예요. |
RegisteredCountryCode | string | 읽기 (프로퍼티) | Stove 플랫폼 가입 국가 코드예요(ISO 3166-1 ALPHA-2). |
ProviderCode | string | 읽기 (프로퍼티) | Stove 로그인 시 사용한 인증 방식을 나타내는 IDP 분류 코드(문자열)이에요. 예: SO(Stove 이메일), FB(Facebook), GP(Google), STEAM, VTCO 등. |
AccountType | int | 읽기 (프로퍼티) | 계정 유형 코드(숫자)예요. 예: 2=Facebook, 3=Twitter, 6=Naver, 9=Google+, 11=Stove PC 가입, 12=Apple, 13=LINE, 14=LINE Games, 15=Steam, 16=VTCO 등. |
Example
using static Stove.PCSDK.V3.Base;
IStoveSignin signin = default;
IStoveResult result = Stove_GetSignin(ref signin);
if (result.IsSuccessful)
{
bool personVerified = signin.IsPersonVerified;
string providerCode = signin.ProviderCode;
// 성공 시 로직을 구현해 주세요.
}
else
{
// 실패 시 로직을 구현해 주세요.
}
Notes
Stove_Initialize()로 초기화가 끝난 뒤 호출해야 유효한 값을 받을 수 있어요.AccountType은 숫자 코드,ProviderCode는 문자열 코드로, 같은 인증 방식을 서로 다른 표현으로 나타내요.Stove_GetSignin(ref IStoveSignin signin)은ref파라미터로 값을 돌려주며, 반환값은IStoveResult이에요.- 이전 형상에서는 멤버 이름이
PersonVerifyYn/EmailVerifyYn/CountryCd/ProviderCd였어요. 현재 소스(BaseTypesV2.cs)는IsPersonVerified/IsEmailVerified/RegisteredCountryCode/ProviderCode로 이름이 바뀌었어요.
See Also
IStoveStartPurchaseOutcome
종류 구조체 · 모듈 IAP · 버전 3.5.0
Description
Stove_StartPurchase 호출 결과로 OnStartPurchaseCallback 콜백에 전달돼요. 어떤 필드가 채워지는지는 IStovePurchaseParam.Operation(EStovePurchaseOperation)에 따라 달라져요.
Default— 수동 결제를 위한TempPaymentUrl이 채워져요.WithWebViewAndConfirmResult— 결제가 성공하면IsPurchased,PurchasedProducts,ChargeInfos가 채워져요.
SDK 가 값을 채워서 콜백으로 전달하는 읽기 전용 구조체(readonly struct)이에요. 호출자가 직접 만들지 않아요. 값 타입이므로 콜백이 끝난 뒤에도 값을 그대로 복사해 보관해 사용할 수 있으며, 별도로 해제할 필요가 없어요.
Declaration
public readonly struct IStoveStartPurchaseOutcome
{
// 멤버는 아래 멤버 표를 참고하십시오.
}
Members
| Name | Type | Access | Description |
|---|---|---|---|
TxnMasterNo | long | 읽기 | 트랜잭션 마스터 번호 (구매 건당 TID) |
TxnDetailNos | long[] | 읽기 | 상품별 트랜잭션 상세 번호 배열 |
TempPaymentUrl | string | 읽기 | 일회성 결제 URL. Operation == Default 일 때 제공돼요. |
PurchaseProgress | EStovePurchaseProgress | 읽기 | 구매 진행 상태 |
IsPurchased | bool | 읽기 | Operation == WithWebViewAndConfirmResult 이고 결제가 성공적으로 완료되었으면 true. 그 외에는 false. |
ExtraData | string | 읽기 | Stove_StartPurchase 에 전달한 ExtraData 문자열을 그대로 돌려받아요. |
PurchasedProducts | IStovePurchasedProduct[] | 읽기 | 구매된 상품 항목 배열. Operation == WithWebViewAndConfirmResult 이고 결제가 성공했을 때 채워져요. |
ChargeInfos | IStoveChargeInfo[] | 읽기 | 결제에 사용된 화폐(결제 수단)별 항목 배열 |
Example
using static Stove.PCSDK.V3.IAP;
void OnStartPurchaseCallback(IStoveCallbackResult callbackResult, IStoveStartPurchaseOutcome outcome)
{
if (callbackResult.Result.IsSuccessful)
{
if (outcome.PurchaseProgress == EStovePurchaseProgress.k_EStovePurchaseProgress_NeedPaymentWindow)
{
string url = outcome.TempPaymentUrl;
// url 로 결제창을 열어 주세요.
}
else if (outcome.IsPurchased)
{
foreach (var product in outcome.PurchasedProducts)
{
// 구매된 상품을 지급해 주세요.
}
}
}
else
{
// 실패 시 로직을 구현해 주세요.
}
}
Notes
- 구 인터페이스에서는
IStovePurchaseResult라는 이름으로 제공되었어요. Operation == Default또는WithWebView로 시작한 구매는 결제 완료 후 Stove_ConfirmPurchase 를 호출해 구매를 확정해야 해요.TxnMasterNo는 IStoveConfirmPurchaseParam.TxnMasterNo 로 그대로 전달해 구매를 확정해요.
See Also
IStoveStartPurchaseParam
종류 구조체 · 모듈 IAP · 버전 3.5.0
Description
Stove_StartPurchase 를 호출할 때 전달하는 입력 파라미터예요. 구매할 상품 목록(IStoveOrderProductParam)과 구매 동작 옵션(IStovePurchaseParam)을 함께 담아요.
일반 C# 구조체(struct)이며 생성 함수를 쓰지 않아요. 게임 코드가 new IStoveStartPurchaseParam { ... } 형태로 직접 만들어 값을 채운 뒤 호출에 전달해요. 값 타입이므로 별도로 해제할 필요가 없어요.
Declaration
public struct IStoveStartPurchaseParam
{
public IStoveOrderProductParam[] Products { get; set; }
public IStovePurchaseParam PurchaseParam { get; set; }
public string ServiceTxnNo { get; set; }
public string ExtraData { get; set; }
}
Members
| Name | Type | Access | Required | Description |
|---|---|---|---|---|
Products | IStoveOrderProductParam[] | 읽기·쓰기 | 예 | 구매할 상품별 주문 항목 배열 |
PurchaseParam | IStovePurchaseParam | 읽기·쓰기 | 예 | 구매 동작 옵션(웹뷰 배치 포함) |
ServiceTxnNo | string | 읽기·쓰기 | 아니오 | 게임이 발급한 서비스 측 트랜잭션 번호 (선택) |
ExtraData | string | 읽기·쓰기 | 아니오 | 추가 요청 데이터 (일반적으로 JSON 문자열, 선택). IStoveStartPurchaseOutcome 의 ExtraData 로 그대로 반환돼요. |
Example
using static Stove.PCSDK.V3.IAP;
var orderProduct = new IStoveOrderProductParam
{
ProductId = productId,
SalePrice = salePrice,
Quantity = 1
};
var purchaseParam = new IStovePurchaseParam
{
Operation = EStovePurchaseOperation.k_EStovePurchaseOperation_WithWebViewAndConfirmResult
};
var startPurchaseParam = new IStoveStartPurchaseParam
{
Products = new[] { orderProduct },
PurchaseParam = purchaseParam,
ExtraData = "{\"orderFrom\":\"shop\"}"
};
Stove_StartPurchase(startPurchaseParam, OnStartPurchaseCallback, null);
Notes
ExtraData는 IStoveStartPurchaseOutcome 의ExtraData로 그대로 되돌아와요. 클라이언트가 구매 요청과 응답을 연결하는 용도로 사용할 수 있어요.
See Also
- Stove_StartPurchase
- IStoveOrderProductParam
- IStovePurchaseParam
- IStoveStartPurchaseOutcome
- Stove_ConfirmPurchase
IStoveTermsAgreementOutcome
종류 구조체 · 모듈 IAP · 버전 3.5.0
Description
Stove_FetchTermsAgreement 호출 결과로 OnFetchTermsAgreementCallback 콜백에 전달돼요.
SDK 가 값을 채워서 콜백으로 전달하는 읽기 전용 구조체(readonly struct)이에요. 호출자가 직접 만들지 않아요. 값 타입이므로 콜백이 끝난 뒤에도 값을 그대로 복사해 보관해 사용할 수 있으며, 별도로 해제할 필요가 없어요.
Declaration
public readonly struct IStoveTermsAgreementOutcome
{
public bool IsAgreed { get; }
public string Url { get; }
}
Members
| Name | Type | Access | Description |
|---|---|---|---|
IsAgreed | bool | 읽기 | 사용자가 이미 현재 약관에 동의했는지 여부. true 이면 Url 은 비어 있어요. |
Url | string | 읽기 | 호출자가 열어야 하는 약관 페이지 URL. IsAgreed 가 true 이면 비어 있어요. |
Example
using static Stove.PCSDK.V3.IAP;
void OnFetchTermsAgreementCallback(IStoveCallbackResult callbackResult, IStoveTermsAgreementOutcome outcome)
{
if (callbackResult.Result.IsSuccessful)
{
if (!outcome.IsAgreed)
{
string url = outcome.Url;
// Operation == Default 인 경우 url 로 약관 페이지를 직접 열어 주세요.
}
else
{
// 이미 동의한 경우의 로직을 구현해 주세요.
}
}
else
{
// 실패 시 로직을 구현해 주세요.
}
}
Notes
- Stove_FetchTermsAgreement 의 출력으로만 전달돼요.
- IStoveFetchTermsAgreementParam.Operation 이
WithWebView이면 약관 페이지가 이미 Stove Webview 안에서 표시된 상태로 이 콜백이 호출돼요.
See Also
IStoveUser
종류 구조체 · 모듈 Base · 버전 3.5.0
Description
Stove_GetUser() 호출 시 ref 파라미터로 전달받는 사용자 정보 구조체예요.
런처에서 로그인한 사용자의 닉네임과 게임 사용자 ID 를 담아요. readonly struct(값 타입)이므로 GC 가 처리하며 별도로 해제할 필요가 없어요.
Declaration
public readonly struct IStoveUser
{
public string NickName { get; }
public ulong UserId { get; }
}
Members
| Name | Type | Access | Description |
|---|---|---|---|
NickName | string | 읽기 (프로퍼티) | 런처에서 로그인한 사용자의 Stove 닉네임이에요. |
UserId | ulong | 읽기 (프로퍼티) | 런처에서 로그인한 사용자의 GameUserId 이에요. |
Example
using static Stove.PCSDK.V3.Base;
IStoveUser user = default;
IStoveResult result = Stove_GetUser(ref user);
if (result.IsSuccessful)
{
string nickName = user.NickName;
ulong userId = user.UserId;
// 성공 시 로직을 구현해 주세요.
}
else
{
// 실패 시 로직을 구현해 주세요.
}
Notes
Stove_Initialize()로 초기화가 끝난 뒤 호출해야 유효한 값을 받을 수 있어요.Stove_GetUser(ref IStoveUser user)는ref파라미터로 값을 돌려주며, 반환값은IStoveResult이에요.
See Also
IStoveVerifyIdentificationPopupDestroyInfo
종류 구조체 · 모듈 View · 버전 3.5.0
Description
Stove_VerifyIdentificationPopup 의 본인 확인 팝업이 종료될 때 OnVerifyIdentificationPopupDestroyCallback 에 전달되는 값이에요.
SDK 가 생성해 콜백으로 전달하는 값이에요. 호출자가 직접 만들지 않아요.
readonly struct(값 타입)이므로 GC 가 처리하며 별도로 해제할 필요가 없어요. 콜백이 끝난 뒤에도 값을 그대로 보관해 사용할 수 있어요.
Declaration
public readonly struct IStoveVerifyIdentificationPopupDestroyInfo
{
public string SimKey { get; }
}
Members
| Name | Type | Access | Description |
|---|---|---|---|
SimKey | string | 읽기 | 본인 확인에 성공한 뒤 발급된 SIM 키예요. 확인에 실패했거나 키를 사용할 수 없으면 빈 문자열("")이에요. |
Example
using static Stove.PCSDK.V3.View;
void OnVerifyIdentificationPopupDestroyCallback(IStoveCallbackResult callbackResult, IStoveVerifyIdentificationPopupDestroyInfo info)
{
if (!string.IsNullOrEmpty(info.SimKey))
{
// 성공 시 로직을 구현해 주세요.
string simKey = info.SimKey;
}
else
{
// 실패 시 로직을 구현해 주세요.
}
}
Notes
SimKey가 빈 문자열이면 실패로 간주해야 해요. 별도의 오류 코드로 실패를 구분하지 않아요.
See Also
IStoveVerifyIdentificationPopupParam
종류 구조체 · 모듈 View · 버전 3.5.0
Description
Stove_VerifyIdentificationPopup 호출 시 넘기는 파라미터예요. 웹뷰 표시 모드와, 확인된 식별자를 로그인한 사용자와 비교할지 여부를 지정해요.
호출자가 만들어 API 에 값으로 전달해요. 별도로 해제할 필요가 없어요(값 타입).
Declaration
public struct IStoveVerifyIdentificationPopupParam
{
public EStoveWebViewMode WebViewMode { get; set; }
public bool CompareIdentifier { get; set; }
}
Members
| Name | Type | Access | Required | Description |
|---|---|---|---|---|
WebViewMode | EStoveWebViewMode | 읽기·쓰기 | Y | 웹뷰 표시 모드예요(External / Internal). |
CompareIdentifier | bool | 읽기·쓰기 | N | 확인된 식별자를 현재 로그인한 사용자와 비교할지 여부예요. |
Example
using static Stove.PCSDK.V3.View;
void OnViewPopupCallback(IStoveCallbackResult callbackResult)
{
if (callbackResult.Result.IsSuccessful)
{
// 성공 시 로직을 구현해 주세요.
}
else
{
// 실패 시 로직을 구현해 주세요.
}
}
void OnVerifyIdentificationPopupDestroyCallback(IStoveCallbackResult callbackResult, IStoveVerifyIdentificationPopupDestroyInfo info)
{
string simKey = info.SimKey;
// 팝업이 종료되었을 때 로직을 구현해 주세요.
}
var verifyParam = new IStoveVerifyIdentificationPopupParam
{
WebViewMode = EStoveWebViewMode.k_EStoveWebViewMode_Internal,
CompareIdentifier = true
};
Stove_VerifyIdentificationPopup(verifyParam, OnViewPopupCallback, OnVerifyIdentificationPopupDestroyCallback);
Notes
- 성공적으로 확인되면 발급된 SIM 키가 IStoveVerifyIdentificationPopupDestroyInfo 로 전달돼요.
See Also
IStoveVietnamAgeRatingInfo
종류 구조체 · 모듈 Base · 버전 3.5.0
Description
Stove_VietnamAgeRatingNotification() 콜백으로 전달되는 연령등급 고지 오버레이 정보예요. 베트남 전용 API 예요.
오버레이 표시 상태와 형태, 크기/위치, 게임 연령등급, 고지 메시지를 담아요. readonly struct(값 타입)이므로 GC 가 처리하며 별도로 해제할 필요가 없어요.
1회성 콜백이므로 렌더링이 가능한 시점 이후에 호출해야 해요.
Declaration
public readonly struct IStoveVietnamAgeRatingInfo
{
public int OverlayMode { get; }
public int OverlayType { get; }
public float OverlayScale { get; }
public float OverlayOpacity { get; }
public int AgeRating { get; }
public string Msg { get; }
public float DisplayPositionX { get; }
public float DisplayPositionY { get; }
public string Language { get; }
}
Members
| Name | Type | Access | Description |
|---|---|---|---|
OverlayMode | int | 읽기 (프로퍼티) | 오버레이 표시 상태예요(SHOW: 오버레이 표시, HIDE: 오버레이 숨김). EStoveOverlayMode 값이에요. |
OverlayType | int | 읽기 (프로퍼티) | 오버레이 유형이에요(0=검정, 1=흰색). |
OverlayScale | float | 읽기 (프로퍼티) | 오버레이 크기 비율이에요(0.0 ~ 1.0). |
OverlayOpacity | float | 읽기 (프로퍼티) | 오버레이 불투명도예요(0.0 ~ 1.0). |
AgeRating | int | 읽기 (프로퍼티) | 게임 연령등급이에요(0=전체이용가, 12=12세, 16=16세, 18=18세). |
Msg | string | 읽기 (프로퍼티) | 연령등급 고지 메시지예요. |
DisplayPositionX | float | 읽기 (프로퍼티) | 메시지 표시 위치의 x 좌표예요. 화면 왼쪽 기준(0.0 ~ 1.0). |
DisplayPositionY | float | 읽기 (프로퍼티) | 메시지 표시 위치의 y 좌표예요. 화면 위쪽 기준(0.0 ~ 1.0). |
Language | string | 읽기 (프로퍼티) | 폰트 선택을 위한 언어 코드예요(예: "ko", "en", "ja", "vi", "zh-cn", "zh-tw", "th"). |
Example
using static Stove.PCSDK.V3.Base;
void OnVietnamAgeRatingNotificationCallback(IStoveCallbackResult callbackResult, IStoveVietnamAgeRatingInfo ageRatingInfo)
{
if (callbackResult.Result.IsSuccessful)
{
int overlayMode = ageRatingInfo.OverlayMode;
string msg = ageRatingInfo.Msg;
// 성공 시 로직을 구현해 주세요. (overlayMode 에 따라 오버레이 표시/숨김)
}
else
{
// 실패 시 로직을 구현해 주세요.
}
}
Stove_VietnamAgeRatingNotification(OnVietnamAgeRatingNotificationCallback);
Notes
- 베트남 전용 API 이며, 1회성 콜백이므로 렌더링이 가능한 시점 이후에 호출해야 해요.
OverlayMode는 EStoveOverlayMode 값을 사용해요.
See Also
IStoveVietnamOverimmersionInfo
종류 구조체 · 모듈 Base · 버전 3.5.0
Description
Stove_VietnamOverimmersionNotification() 콜백으로 전달되는 과몰입 방지 고지 오버레이 정보예요. 베트남 전용 API 예요.
오버레이 표시 상태와 형태, 크기/위치, 게임 연령등급, 경고 메시지(일반/스타일 적용)를 담아요. readonly struct(값 타입)이므로 GC 가 처리하며 별도로 해제할 필요가 없어요.
1회성 콜백이므로 렌더링이 가능한 시점 이후에 호출해야 해요.
Declaration
public readonly struct IStoveVietnamOverimmersionInfo
{
public int OverlayMode { get; }
public int OverlayType { get; }
public float OverlayScale { get; }
public float OverlayOpacity { get; }
public int AgeRating { get; }
public string Msg { get; }
public string StyledMsg { get; }
public int ElapsedMinutes { get; }
public int ExposureTime { get; }
public float ExpandAnimationTime { get; }
public float DisplayPositionX { get; }
public float DisplayPositionY { get; }
public string Language { get; }
}
Members
| Name | Type | Access | Description |
|---|---|---|---|
OverlayMode | int | 읽기 (프로퍼티) | 오버레이 표시 상태예요(SHOW: 오버레이 표시, HIDE: 오버레이 숨김). EStoveOverlayMode 값이에요. |
OverlayType | int | 읽기 (프로퍼티) | 오버레이 유형이에요(0=검정, 1=흰색). |
OverlayScale | float | 읽기 (프로퍼티) | 오버레이 크기 비율이에요(0.0 ~ 1.0). |
OverlayOpacity | float | 읽기 (프로퍼티) | 오버레이 불투명도예요(0.0 ~ 1.0). |
AgeRating | int | 읽기 (프로퍼티) | 게임 연령등급이에요(0=전체이용가, 12=12세, 16=16세, 18=18세). |
Msg | string | 읽기 (프로퍼티) | 과몰입 경고 메시지예요. |
StyledMsg | string | 읽기 (프로퍼티) | <b>, <color=#RRGGBBAA> 등 마크업 태그가 포함된 스타일(번역) 경고 메시지예요. 리치 텍스트 렌더링에 사용해요. |
ElapsedMinutes | int | 읽기 (프로퍼티) | 게임 누적 이용 시간(분 단위)예요. |
ExposureTime | int | 읽기 (프로퍼티) | 메시지 노출 시간(초)예요. |
ExpandAnimationTime | float | 읽기 (프로퍼티) | Show → Expand 전환 시 오버레이가 확장되는 애니메이션 시간(초)예요. |
DisplayPositionX | float | 읽기 (프로퍼티) | 메시지 표시 위치의 x 좌표예요. 화면 왼쪽 기준(0.0 ~ 1.0). |
DisplayPositionY | float | 읽기 (프로퍼티) | 메시지 표시 위치의 y 좌표예요. 화면 위쪽 기준(0.0 ~ 1.0). |
Language | string | 읽기 (프로퍼티) | 폰트 선택을 위한 언어 코드예요(예: "ko", "en", "ja", "vi", "zh-cn", "zh-tw", "th"). |
Example
using static Stove.PCSDK.V3.Base;
void OnVietnamOverimmersionNotificationCallback(IStoveCallbackResult callbackResult, IStoveVietnamOverimmersionInfo overimmersionInfo)
{
if (callbackResult.Result.IsSuccessful)
{
int overlayMode = overimmersionInfo.OverlayMode;
string styledMsg = overimmersionInfo.StyledMsg;
// 성공 시 로직을 구현해 주세요. (overlayMode 에 따라 오버레이 표시/숨김/확장)
}
else
{
// 실패 시 로직을 구현해 주세요.
}
}
Stove_VietnamOverimmersionNotification(OnVietnamOverimmersionNotificationCallback);
Notes
- 베트남 전용 API 이며, 1회성 콜백이므로 렌더링이 가능한 시점 이후에 호출해야 해요.
OverlayMode는 EStoveOverlayMode 값을 사용하며,k_EStoveOverlayMode_Expanded(확장 표시)도 지원해요.ElapsedMinutes단위는 분(minute)예요. 시간(hour) 단위인 IStoveOverImmersionInfo.ElapsedHours와 혼동하지 않도록 주의해요.
See Also
Stove_AccessTokenRenewed
종류 함수 · 모듈 Base · 버전 3.5.0
Description
AccessToken이 갱신될 때 새로 발급된 토큰을 콜백으로 전달해요. 토큰이 갱신되는 시점에 맞춰 별도 작업이 필요할 때 사용해요.
Declaration
public static void Stove_AccessTokenRenewed(OnAccessTokenRenewedCallback onFinished)
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
onFinished | OnAccessTokenRenewedCallback | N | 결과를 받을 콜백 |
Returns
없음
Callback
public delegate void OnAccessTokenRenewedCallback(IStoveCallbackResult callbackResult, IStoveAccessToken token);
| Name | Type | Description |
|---|---|---|
callbackResult | IStoveCallbackResult | 호출 결과 |
token | IStoveAccessToken | 새로 발급된 토큰 정보. AccessToken, ExpireIn(초 단위) 프로퍼티로 조회 |
이 콜백은 Stove_RunCallback()을 호출한 스레드에서 실행돼요. AccessToken이 갱신될 때마다 반복해서 전달돼요.
Error Codes
| Code | Name | Description | Show to User | In-Game Message |
|---|---|---|---|---|
| 0 | k_EStoveCommonResultCode_Success | 성공 | x | |
| 5 | k_EStoveCommonResultCode_InvalidParam | onFinished가 null(콜백이 없어 실제로는 전달되지 않는 내부 값) (콜백 등록 여부 확인) | x | |
| 16 | k_EStoveCommonResultCode_BaseNotInitialized | SDK가 초기화되지 않음 (Stove_Initialize() 호출 여부 확인) | x | |
| 253 | k_EStoveCommonResultCode_UnmanagedException | SDK 내부에서 알 수 없는 예외 발생 (로그 확인) | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
| 254 | k_EStoveCommonResultCode_ManagedException | 래퍼에서 예외 발생 시 콜백으로 전달 (로그 확인) | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
| 306 | k_EStoveResultCode_RenewTokenMaxRetryCountExceeded | 토큰 갱신 재시도 횟수를 초과함(하위 계층) (재로그인 유도) | O | 네트워크 연결이 원활하지 않습니다. 네트워크 상태를 확인하고 다시 실행해 주세요. [확인] |
전체 목록: EStoveCommonResultCode, EStoveResultCode
Example
using static Stove.PCSDK.V3.Base;
Stove_AccessTokenRenewed((callbackResult, token) =>
{
if (callbackResult.Result.IsSuccessful)
{
// 성공 시 로직을 구현해 주세요.
string newAccessToken = token.AccessToken;
int expireIn = token.ExpireIn;
}
else
{
// 실패 시 로직을 구현해 주세요.
}
});
Notes
- 토큰이 갱신될 때마다 반복해서 호출되는 콜백이에요. 1회성 콜백이 아니에요.
- 매번 최신 토큰이 필요하지 않다면 Stove_GetAccessToken으로 그때그때 조회해도 돼요.
See Also
Stove_AutoPopup
종류 함수 · 모듈 View · 버전 3.5.0
Description
Stove_AutoPopup은 서버에서 자동 팝업(공지, 이벤트 등) 목록을 조회하고, 조회된 팝업을 웹뷰로 표시해요.
SDK 초기화(Stove_Initialize) 이후에 호출해야 해요. 표시할 팝업 데이터가 없으면 웹뷰를 띄우지 않고 종료해요.
팝업이 하나도 생성되지 않고 종료되는 모든 경로(미초기화, 조회 결과 없음, 웹뷰 생성 실패 등)에서
onDestroy에k_EStoveCommonResultCode_PopupNotCreated(33)가 1회 전달돼요. 이 코드는 내부 정리 신호이며onFinished에는 전달되지 않아요.
Declaration
public static void Stove_AutoPopup(IStovePopupParam popupParam, OnViewPopupCallback onFinished, OnViewPopupDestroyCallback onDestroy);
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
popupParam | IStovePopupParam | Y | 웹뷰 표시 모드(WebViewMode)를 담은 파라미터예요. |
onFinished | OnViewPopupCallback | Y | 팝업 표시가 완료(또는 표시할 데이터가 없어 종료)되었을 때 호출되는 콜백이에요. |
onDestroy | OnViewPopupDestroyCallback | N | 팝업 웹뷰가 완전히 파괴되었을 때 호출되는 콜백이에요. |
Returns
없음 (void 함수)
Callback
public delegate void OnViewPopupCallback(IStoveCallbackResult callbackResult);
public delegate void OnViewPopupDestroyCallback(IStoveCallbackResult callbackResult);
| Name | Type | Description |
|---|---|---|
callbackResult | IStoveCallbackResult | 호출 결과예요. callbackResult.Result.IsSuccessful로 성공 여부를 확인해요. |
onFinished는 팝업 표시(또는 데이터 없음으로 인한 종료)가 확정된 시점에 1회 호출돼요. onDestroy는 웹뷰가 화면에서 완전히 사라진 시점에 1회 호출돼요. 두 콜백 모두 Stove_RunCallback()을 호출한 스레드에서 실행돼요.
Error Codes
onFinished
| Code | Name | Description | Show to User | In-Game Message |
|---|---|---|---|---|
| 0 | k_EStoveCommonResultCode_Success | 성공 | x | |
| 17 | k_EStoveCommonResultCode_NotInitialized | 팝업 기능이 초기화되지 않음 (Stove_Initialize 선행 호출 확인) | x | |
| 60 | k_EStoveCommonResultCode_ViewUiNotInitialized | 팝업 UI 서브시스템이 초기화되지 않음(정상 흐름에서는 발생하지 않는 방어적 코드) (재현되면 SDK 지원팀 문의) | x | |
| 65 | k_EStoveCommonResultCode_WebviewCloseAllFail | 팝업 생성 전 기존 웹뷰 일괄 닫기 실패 (로그 확인) | x | |
| 67 | k_EStoveCommonResultCode_NoPopupData | 서버 조회 결과 표시할 팝업이 0건 (정상 종료로 처리) | O | 팝업 설정 정보가 존재하지 않아 표시할 창이 없습니다. [확인] |
| 62 | k_EStoveCommonResultCode_WebviewCreateFail | 웹뷰 생성 실패 (재시도 또는 로그 확인) | x | |
| 63 | k_EStoveCommonResultCode_WebviewLoadUrlFail | 웹뷰 URL 로드 실패 (네트워크 상태 확인 후 재시도) | x | |
| 254 | k_EStoveCommonResultCode_ManagedException | 래퍼에서 예외 발생 시 콜백으로 전달 (callbackResult.Result.ExceptionMessage 로그 확인) | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
onDestroy
| Code | Name | Description | Show to User | In-Game Message |
|---|---|---|---|---|
| 0 | k_EStoveCommonResultCode_Success | 웹뷰 정상 종료 | x | |
| 66 | k_EStoveCommonResultCode_WebviewCloseFail | 웹뷰 닫기 실패 (로그 확인) | x | |
| 33 | k_EStoveCommonResultCode_PopupNotCreated | 웹뷰가 생성되지 않고 조기 종료됨(내부 정리 신호) (별도 처리 불필요) | x | |
| 254 | k_EStoveCommonResultCode_ManagedException | 래퍼에서 예외 발생 시 콜백으로 전달 (callbackResult.Result.ExceptionMessage 로그 확인) | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
전체 목록: EStoveCommonResultCode
Example
using static Stove.PCSDK.V3.View;
var popupParam = new IStovePopupParam
{
WebViewMode = EStoveWebViewMode.k_EStoveWebViewMode_Internal
};
Stove_AutoPopup(popupParam,
onFinished: (callbackResult) =>
{
if (callbackResult.Result.IsSuccessful)
{
// 성공 시 로직을 구현해 주세요.
}
else
{
// 실패 시 로직을 구현해 주세요.
}
},
onDestroy: (callbackResult) =>
{
if (callbackResult.Result.IsSuccessful)
{
// 성공 시 로직을 구현해 주세요.
}
else
{
// 실패 시 로직을 구현해 주세요. (코드 33은 무시해도 됩니다.)
}
});
Notes
- 팝업 API는
onFinished와onDestroy콜백이 독립적으로 호출돼요.onFinished가 실패해도onDestroy는 반드시 호출돼요. 33(PopupNotCreated)은onDestroy전용 코드이며onFinished에는 절대 전달되지 않아요.
See Also
Stove_CloseAllPopups
종류 함수 · 모듈 Base · 버전 3.5.0
Description
SDK가 띄운 모든 팝업을 닫아요. IAP 팝업과 View 팝업이 모두 대상이에요.
단일바이너리(BaseSDK Consolidation) 통합 이후, 모듈별로 따로 있던
Stove_IAP_CloseAllPopups()/Stove_View_CloseAllPopups()를 이 함수 하나로 대체해요. 이제 한 번의 호출로 SDK의 모든 팝업이 함께 닫혀요.
Declaration
public static IStoveResult Stove_CloseAllPopups()
Parameters
없음
Returns
| Type | Description |
|---|---|
IStoveResult | 호출 결과. result.IsSuccessful로 성공 여부를 확인 |
Error Codes
| Code | Name | Description | Show to User | In-Game Message |
|---|---|---|---|---|
| 0 | k_EStoveCommonResultCode_Success | 성공 | x | |
| 60 | k_EStoveCommonResultCode_ViewUiNotInitialized | 팝업 UI 서브시스템이 초기화되지 않음(IAP 쪽 확인 결과) (Stove_Initialize()의 MainWndHandle 설정 확인) | x | |
| 65 | k_EStoveCommonResultCode_WebviewCloseAllFail | 웹뷰 일괄 닫기 실패(IAP 쪽 확인 결과) (재시도) | x | |
| 253 | k_EStoveCommonResultCode_UnmanagedException | SDK 내부에서 알 수 없는 예외 발생 (로그 확인 후 재시도) | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
| 254 | k_EStoveCommonResultCode_ManagedException | 래퍼에서 예외 발생 시 반환값으로 전달 (로그 확인 후 재시도) | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
전체 목록: EStoveCommonResultCode
Example
using static Stove.PCSDK.V3.Base;
IStoveResult result = Stove_CloseAllPopups();
if (result.IsSuccessful)
{
// 성공 시 로직을 구현해 주세요.
}
else
{
// 실패 시 로직을 구현해 주세요.
}
Notes
- 단일바이너리 통합 이후 IAP 팝업과 View 팝업을 한 번의 호출로 모두 닫아요.
- 내부적으로 IAP → View 순서로 두 모듈의 CloseAllPopups를 모두 호출하며, IAP가 실패하면 IAP 결과를 그대로 반환하고 IAP가 성공하면 View의 결과를 반환해요(View 쪽 개별 실패 코드는 이 문서 범위 밖이에요).
Stove_ConfirmPurchase
종류 함수 · 모듈 IAP · 버전 3.5.0
Description
Stove_StartPurchase의 Operation 값이 k_EStovePurchaseOperation_WithWebViewAndConfirmResult가 아닌 경우, 결제 완료 후 이 함수를 호출해 구매를 확정해요. confirmPurchaseParam.TxnMasterNo에는 Stove_StartPurchase 결과로 받은 IStoveStartPurchaseOutcome.TxnMasterNo 값을 설정해요.
확정 결과는 onFinished 콜백으로 전달되며, 구매한 상품 목록과 결제에 사용된 화폐(차지) 정보가 함께 전달돼요.
SDK 초기화(Stove_Initialize) 이후에 호출해야 해요.
Declaration
public static void Stove_ConfirmPurchase(IStoveConfirmPurchaseParam confirmPurchaseParam, OnConfirmPurchaseCallback onFinished)
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
confirmPurchaseParam | IStoveConfirmPurchaseParam | Y | 확정할 거래의 마스터 번호(TxnMasterNo) 파라미터 |
onFinished | OnConfirmPurchaseCallback | Y | 확정 결과를 받을 콜백 |
Returns
없음
Callback
public delegate void OnConfirmPurchaseCallback(IStoveCallbackResult callbackResult, IStoveConfirmPurchaseOutcome outcome);
| Name | Type | Description |
|---|---|---|
callbackResult | IStoveCallbackResult | 호출 결과 |
outcome | IStoveConfirmPurchaseOutcome | 확정 결과. IsConfirmed, PurchasedProducts, ChargeInfos를 포함해요 |
Stove_RunCallback()을 호출한 스레드에서 실행돼요. 호출 1건당 1회만 전달돼요.
Error Codes
| Code | Name | Description | Show to User | In-Game Message |
|---|---|---|---|---|
| 0 | k_EStoveCommonResultCode_Success | 성공 | x | |
| 17 | k_EStoveCommonResultCode_NotInitialized | 결제 기능이 초기화되지 않음 (Stove_Initialize 선행 호출) | x | |
| 5 | k_EStoveCommonResultCode_InvalidParam | onFinished가 null이면 내부적으로 설정되지만 콜백이 없어 실제로 전달되지 않음 (참고용, 별도 처리 불필요) | x | |
| 21 | k_EStoveCommonResultCode_NullEntity | 언어 정보 조회 실패 — 예외로 전환되지 않고 직접 전달되는 유일한 케이스 (재시도, 지속 시 SDK 팀 문의) | x | |
| 254 | k_EStoveCommonResultCode_ManagedException | 래퍼에서 예외 발생 시 콜백으로 전달 (ExceptionMessage 로깅) | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
| 253 | k_EStoveCommonResultCode_UnmanagedException | 알 수 없는 예외 발생 (로그 확인 후 SDK 팀 문의) | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
전체 목록: EStoveCommonResultCode
Example
using static Stove.PCSDK.V3.IAP;
// txnMasterNo 는 Stove_StartPurchase() 결과의 IStoveStartPurchaseOutcome.TxnMasterNo 값입니다.
var confirmPurchaseParam = new IStoveConfirmPurchaseParam
{
TxnMasterNo = txnMasterNo
};
Stove_ConfirmPurchase(confirmPurchaseParam, (callbackResult, outcome) =>
{
if (callbackResult.Result.IsSuccessful && outcome.IsConfirmed)
{
// 성공 시 로직을 구현해 주세요.
foreach (var purchasedProduct in outcome.PurchasedProducts)
{
long productId = purchasedProduct.ProductId;
}
}
else
{
// 실패 시 로직을 구현해 주세요.
}
});
Notes
- 이 함수는 비동기 함수이며 결과는
onFinished콜백으로만 전달돼요. - Stove_StartPurchase의
Operation이k_EStovePurchaseOperation_WithWebViewAndConfirmResult인 경우에는 SDK가 이 함수를 자동으로 호출하므로 별도로 호출할 필요가 없어요. outcome.IsConfirmed와callbackResult의 성공 여부는 별개예요. 호출 자체가 성공했더라도IsConfirmed가false이면 구매가 최종 확정되지 않은 상태예요.
See Also
Stove_CouponPopup
종류 함수 · 모듈 View · 버전 3.5.0
Description
Stove_CouponPopup은 서버에서 쿠폰 팝업 목록을 조회해 웹뷰로 표시해요.
SDK 초기화(Stove_Initialize) 이후에 호출해야 해요. 표시할 팝업 데이터가 없으면 웹뷰를 띄우지 않고 종료해요.
팝업이 하나도 생성되지 않고 종료되는 모든 경로(월드 미접속, 미초기화, 조회 결과 없음, 웹뷰 생성 실패 등)에서
onDestroy에k_EStoveCommonResultCode_PopupNotCreated(33)가 1회 전달돼요. 이 코드는 내부 정리 신호이며onFinished에는 전달되지 않아요.
Declaration
public static void Stove_CouponPopup(IStovePopupParam popupParam, OnViewPopupCallback onFinished, OnViewPopupDestroyCallback onDestroy);
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
popupParam | IStovePopupParam | Y | 웹뷰 표시 모드(WebViewMode)를 담은 파라미터예요. |
onFinished | OnViewPopupCallback | Y | 팝업 표시가 완료(또는 표시할 데이터가 없어 종료)되었을 때 호출되는 콜백이에요. |
onDestroy | OnViewPopupDestroyCallback | N | 팝업 웹뷰가 완전히 파괴되었을 때 호출되는 콜백이에요. |
Returns
없음 (void 함수)
Callback
public delegate void OnViewPopupCallback(IStoveCallbackResult callbackResult);
public delegate void OnViewPopupDestroyCallback(IStoveCallbackResult callbackResult);
| Name | Type | Description |
|---|---|---|
callbackResult | IStoveCallbackResult | 호출 결과예요. callbackResult.Result.IsSuccessful로 성공 여부를 확인해요. |
onFinished는 팝업 표시(또는 데이터 없음으로 인한 종료)가 확정된 시점에 1회 호출돼요. onDestroy는 웹뷰가 화면에서 완전히 사라진 시점에 1회 호출돼요. 두 콜백 모두 Stove_RunCallback()을 호출한 스레드에서 실행돼요.
Error Codes
onFinished
| Code | Name | Description | Show to User | In-Game Message |
|---|---|---|---|---|
| 0 | k_EStoveCommonResultCode_Success | 성공 | x | |
| 5 | k_EStoveCommonResultCode_InvalidParam | 게임 서버(월드)에 접속하지 않은 상태(내부 WorldId가 빈 문자열) (게임 서버 접속 후 재호출) | x | |
| 17 | k_EStoveCommonResultCode_NotInitialized | 팝업 기능이 초기화되지 않음 (Stove_Initialize 선행 호출 확인) | x | |
| 60 | k_EStoveCommonResultCode_ViewUiNotInitialized | 팝업 UI 서브시스템이 초기화되지 않음(정상 흐름에서는 발생하지 않는 방어적 코드) (재현되면 SDK 지원팀 문의) | x | |
| 65 | k_EStoveCommonResultCode_WebviewCloseAllFail | 팝업 생성 전 기존 웹뷰 일괄 닫기 실패 (로그 확인) | x | |
| 62 | k_EStoveCommonResultCode_WebviewCreateFail | 웹뷰 생성 실패 (재시도 또는 로그 확인) | x | |
| 63 | k_EStoveCommonResultCode_WebviewLoadUrlFail | 웹뷰 URL 로드 실패 (네트워크 상태 확인 후 재시도) | x | |
| 67 | k_EStoveCommonResultCode_NoPopupData | 서버 조회 결과 표시할 쿠폰 팝업이 0건 (정상 종료로 처리) | O | 팝업 설정 정보가 존재하지 않아 표시할 창이 없습니다. [확인] |
| 254 | k_EStoveCommonResultCode_ManagedException | 래퍼에서 예외 발생 시 콜백으로 전달 (callbackResult.Result.ExceptionMessage 로그 확인) | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
onDestroy
| Code | Name | Description | Show to User | In-Game Message |
|---|---|---|---|---|
| 0 | k_EStoveCommonResultCode_Success | 웹뷰 정상 종료 | x | |
| 66 | k_EStoveCommonResultCode_WebviewCloseFail | 웹뷰 닫기 실패 (로그 확인) | x | |
| 33 | k_EStoveCommonResultCode_PopupNotCreated | 웹뷰가 생성되지 않고 조기 종료됨(월드 미접속 포함, 내부 정리 신호) (별도 처리 불필요) | x | |
| 254 | k_EStoveCommonResultCode_ManagedException | 래퍼에서 예외 발생 시 콜백으로 전달 (callbackResult.Result.ExceptionMessage 로그 확인) | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
전체 목록: EStoveCommonResultCode
Example
using static Stove.PCSDK.V3.View;
var popupParam = new IStovePopupParam
{
WebViewMode = EStoveWebViewMode.k_EStoveWebViewMode_Internal
};
Stove_CouponPopup(popupParam,
onFinished: (callbackResult) =>
{
if (callbackResult.Result.IsSuccessful)
{
// 성공 시 로직을 구현해 주세요.
}
else
{
// 실패 시 로직을 구현해 주세요.
}
},
onDestroy: (callbackResult) =>
{
if (callbackResult.Result.IsSuccessful)
{
// 성공 시 로직을 구현해 주세요.
}
else
{
// 실패 시 로직을 구현해 주세요. (코드 33은 무시해도 됩니다.)
}
});
Notes
Stove_CouponPopup은 다른 팝업 API와 달리 게임 서버(월드) 접속 여부를 검증해요. 접속하지 않은 상태에서 호출하면InvalidParam(5)으로 실패해요.33(PopupNotCreated)은onDestroy전용 코드이며onFinished에는 절대 전달되지 않아요.
See Also
Stove_FetchInventory
종류 함수 · 모듈 IAP · 버전 3.5.0
Description
현재 로그인한 사용자의 구매 내역을 조회해요. 조회된 인벤토리 항목 목록은 onFinished 콜백으로 전달돼요.
SDK 초기화(Stove_Initialize) 이후에 호출해야 해요.
Declaration
public static void Stove_FetchInventory(OnFetchInventoryCallback onFinished)
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
onFinished | OnFetchInventoryCallback | Y | 인벤토리 항목 목록을 받을 콜백 |
Returns
없음
Callback
public delegate void OnFetchInventoryCallback(IStoveCallbackResult callbackResult, IStoveInventoryList list);
| Name | Type | Description |
|---|---|---|
callbackResult | IStoveCallbackResult | 호출 결과 |
list | IStoveInventoryList | 조회된 인벤토리 항목 목록 |
Stove_RunCallback()을 호출한 스레드에서 실행돼요. 호출 1건당 1회만 전달돼요. list는 SDK가 소유하며 콜백이 끝나면 무효처리되므로, 필요한 값은 콜백 안에서 복사해 두어야 해요.
Error Codes
| Code | Name | Description | Show to User | In-Game Message |
|---|---|---|---|---|
| 0 | k_EStoveCommonResultCode_Success | 성공 | x | |
| 17 | k_EStoveCommonResultCode_NotInitialized | 결제 기능이 초기화되지 않음 (Stove_Initialize 선행 호출) | x | |
| 5 | k_EStoveCommonResultCode_InvalidParam | onFinished가 null이면 내부적으로 설정되지만 콜백이 없어 실제로 전달되지 않음 (참고용, 별도 처리 불필요) | x | |
| 254 | k_EStoveCommonResultCode_ManagedException | 래퍼에서 예외 발생 시 콜백으로 전달 (ExceptionMessage 로깅) | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
| 253 | k_EStoveCommonResultCode_UnmanagedException | 알 수 없는 예외 발생 (로그 확인 후 SDK 팀 문의) | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
전체 목록: EStoveCommonResultCode
Example
using static Stove.PCSDK.V3.IAP;
Stove_FetchInventory((callbackResult, list) =>
{
if (callbackResult.Result.IsSuccessful)
{
// 성공 시 로직을 구현해 주세요.
foreach (var item in list)
{
string productName = item.ProductName;
}
}
else
{
// 실패 시 로직을 구현해 주세요.
}
});
Notes
- 이 함수는 비동기 함수이며 결과는
onFinished콜백으로만 전달돼요.
See Also
Stove_FetchProducts
종류 함수 · 모듈 IAP · 버전 3.5.0
Description
fetchProductParam으로 전달한 카테고리 ID와 페이지 조건에 맞는 상품 목록을 조회해요. 조회된 상품 목록은 onFinished 콜백으로 전달돼요.
카테고리 ID를 비워두면 전체 카테고리의 상품을 조회해요. 특정 카테고리의 상품만 조회하려면 Stove_FetchShopCategories로 얻은 CategoryId를 필터로 지정해요.
SDK 초기화(Stove_Initialize) 이후에 호출해야 해요.
Declaration
public static void Stove_FetchProducts(IStoveFetchProductsParam fetchProductParam, OnFetchProductsCallback onFinished)
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
fetchProductParam | IStoveFetchProductsParam | Y | 카테고리 필터·페이지 조건 파라미터 |
onFinished | OnFetchProductsCallback | Y | 조회 결과를 받을 콜백 |
Returns
없음
Callback
public delegate void OnFetchProductsCallback(IStoveCallbackResult callbackResult, IStoveProductList list);
| Name | Type | Description |
|---|---|---|
callbackResult | IStoveCallbackResult | 호출 결과 |
list | IStoveProductList | 조회된 상품 목록 |
Stove_RunCallback()을 호출한 스레드에서 실행돼요. 호출 1건당 1회만 전달돼요. list는 SDK가 소유하며 콜백이 끝나면 무효처리되므로, 필요한 값은 콜백 안에서 복사해 두어야 해요.
Error Codes
| Code | Name | Description | Show to User | In-Game Message |
|---|---|---|---|---|
| 0 | k_EStoveCommonResultCode_Success | 성공 | x | |
| 17 | k_EStoveCommonResultCode_NotInitialized | 결제 기능이 초기화되지 않음 (Stove_Initialize 선행 호출) | x | |
| 5 | k_EStoveCommonResultCode_InvalidParam | onFinished가 null이면 내부적으로 이 코드가 설정되지만, 콜백 자체가 없어 실제로 호출부에는 전달되지 않아요 (참고용, 별도 처리 불필요) | x | |
| 254 | k_EStoveCommonResultCode_ManagedException | 래퍼에서 예외 발생 시 콜백으로 전달 (ExceptionMessage 로깅) | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
| 253 | k_EStoveCommonResultCode_UnmanagedException | 알 수 없는 예외 발생 (로그 확인 후 SDK 팀 문의) | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
전체 목록: EStoveCommonResultCode
Example
using static Stove.PCSDK.V3.IAP;
var fetchProductParam = new IStoveFetchProductsParam
{
CategoryId = string.Empty,
PageIndex = 1,
PageSize = 20
};
Stove_FetchProducts(fetchProductParam, (callbackResult, list) =>
{
if (callbackResult.Result.IsSuccessful)
{
// 성공 시 로직을 구현해 주세요.
foreach (var product in list)
{
long productId = product.ProductId;
string productName = product.ProductName;
}
}
else
{
// 실패 시 로직을 구현해 주세요.
}
});
Notes
- 이 호출은 상품 목록 조회의 확장 동작(구 인터페이스의
Ex변형에 해당)을 수행해요. - 이 함수는 비동기 함수이며 결과는
onFinished콜백으로만 전달돼요. fetchProductParam은 일반 struct이므로 별도의 생성·해제 API 없이 값을 채워 그대로 전달해요.- 조회된 상품의
ProductId는 Stove_StartPurchase 호출 시 주문 항목의 상품 식별자로 사용해요. IStoveProduct의DiscountStartDate/DiscountEndDate/SalesStartDate/SalesEndDate는 모두 UTC 밀리초 Unix epoch 값이에요.
See Also
Stove_FetchShopCategories
종류 함수 · 모듈 IAP · 버전 3.5.0
Description
Stove_FetchShopCategories는 게임 상점에 등록된 카테고리 목록을 트리 구조로 조회해요. 각 카테고리는 부모 카테고리 ID, 표시 순서, 트리 깊이 정보를 함께 가지고 있어 상점 UI를 계층적으로 구성할 수 있어요.
SDK 초기화(Stove_Initialize) 이후에 호출해야 해요.
Declaration
public static void Stove_FetchShopCategories(OnFetchShopCategoriesCallback onFinished)
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
onFinished | OnFetchShopCategoriesCallback | Y | 조회 결과를 받을 콜백 |
Returns
없음
Callback
public delegate void OnFetchShopCategoriesCallback(IStoveCallbackResult callbackResult, IStoveShopCategoryList list);
| Name | Type | Description |
|---|---|---|
callbackResult | IStoveCallbackResult | 호출 결과 |
list | IStoveShopCategoryList | 조회된 카테고리 목록 |
Stove_RunCallback()을 호출한 스레드에서 실행돼요. 호출 1건당 1회만 전달돼요. list는 SDK가 소유하며 콜백이 끝나면 무효처리되므로, 필요한 값은 콜백 안에서 복사해 두어야 해요.
Error Codes
| Code | Name | Description | Show to User | In-Game Message |
|---|---|---|---|---|
| 0 | k_EStoveCommonResultCode_Success | 성공 | x | |
| 17 | k_EStoveCommonResultCode_NotInitialized | 결제 기능이 초기화되지 않음 (Stove_Initialize 선행 호출) | x | |
| 5 | k_EStoveCommonResultCode_InvalidParam | onFinished가 null이면 내부적으로 이 코드가 설정되지만, 콜백 자체가 없어 실제로 호출부에는 전달되지 않아요 (참고용, 별도 처리 불필요) | x | |
| 254 | k_EStoveCommonResultCode_ManagedException | 래퍼에서 예외 발생 시 콜백으로 전달 (ExceptionMessage 로깅) | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
| 253 | k_EStoveCommonResultCode_UnmanagedException | 알 수 없는 예외 발생 (로그 확인 후 SDK 팀 문의) | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
전체 목록: EStoveCommonResultCode
Example
using static Stove.PCSDK.V3.IAP;
Stove_FetchShopCategories((callbackResult, list) =>
{
if (callbackResult.Result.IsSuccessful)
{
// 성공 시 로직을 구현해 주세요.
foreach (var category in list)
{
// category.CategoryId, category.CategoryName 등을 사용합니다.
}
}
else
{
// 실패 시 로직을 구현해 주세요.
}
});
Notes
- 이 함수는 비동기 함수이며 결과는
onFinished콜백으로만 전달돼요. - 조회한 카테고리의
CategoryId는 Stove_FetchProducts의IStoveFetchProductsParam.CategoryId필터에 사용할 수 있어요.
See Also
Stove_FetchTermsAgreement
종류 함수 · 모듈 IAP · 버전 3.5.0
Description
사용자가 현재 약관에 동의했는지 조회해요. 이미 동의한 경우 onFinished로 전달되는 outcome.IsAgreed가 true이며 outcome.Url은 비어 있어요. 동의하지 않은 경우 termsParam.Operation(EStoveTermsOperation) 값에 따라 동작이 달라져요.
k_EStoveTermsOperation_Default:onFinished로 전달되는outcome.Url을 이용해 호출자가 직접 약관 페이지를 열어야 해요.k_EStoveTermsOperation_WithWebView: SDK가 Stove Webview로 약관 페이지를 직접 표시해요.
SDK 초기화(Stove_Initialize) 이후에 호출해야 해요.
Declaration
public static void Stove_FetchTermsAgreement(IStoveFetchTermsAgreementParam termsParam, OnFetchTermsAgreementCallback onFinished, OnIAPPopupDestroyCallback onDestroy)
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
termsParam | IStoveFetchTermsAgreementParam | Y | 약관 조회 동작·웹뷰 배치 파라미터 |
onFinished | OnFetchTermsAgreementCallback | Y | 동의 여부와 약관 URL을 받을 콜백 |
onDestroy | OnIAPPopupDestroyCallback | N | 이 호출로 생성된 팝업이 모두 닫혔을 때 전달되는 콜백 |
Returns
없음
Callback
public delegate void OnFetchTermsAgreementCallback(IStoveCallbackResult callbackResult, IStoveTermsAgreementOutcome outcome);
public delegate void OnIAPPopupDestroyCallback(IStoveCallbackResult callbackResult);
| Name | Type | Description |
|---|---|---|
callbackResult | IStoveCallbackResult | 호출 결과 |
outcome | IStoveTermsAgreementOutcome | IsAgreed(동의 여부)와 Url(약관 페이지 URL, 이미 동의했으면 빈 문자열)을 포함 |
Stove_RunCallback()을 호출한 스레드에서 실행돼요.
onFinished는 호출 1건당 1회만 전달돼요.onDestroy는Operation == WithWebView로 웹뷰가 열린 경우, 그 웹뷰가 닫힌 뒤 전달돼요. 웹뷰가 한 번도 생성되지 않고 종료된 경우에도PopupNotCreated(33)와 함께 1회 전달돼요.
Error Codes
| Callback | Code | Name | Description | Show to User | In-Game Message |
|---|---|---|---|---|---|
| onFinished | 0 | k_EStoveCommonResultCode_Success | 성공(이미 동의한 경우도 포함) | x | |
| onFinished | 17 | k_EStoveCommonResultCode_NotInitialized | 결제 기능이 초기화되지 않음 (Stove_Initialize 선행 호출) | x | |
| onFinished | 5 | k_EStoveCommonResultCode_InvalidParam | onFinished가 null이면 내부적으로 설정되지만 콜백이 없어 실제로 전달되지 않음 (참고용, 별도 처리 불필요) | x | |
| onFinished | 60 | k_EStoveCommonResultCode_ViewUiNotInitialized | 웹뷰로 약관 페이지를 열어야 하는데 View UI가 초기화되지 않음 (SDK 팀 문의) | x | |
| onFinished | 65 | k_EStoveCommonResultCode_WebviewCloseAllFail | 웹뷰를 열기 전 기존 웹뷰 정리 실패 (재시도) | x | |
| onFinished | 62 | k_EStoveCommonResultCode_WebviewCreateFail | 약관 웹뷰 생성 실패 (재시도) | x | |
| onFinished | 64 | k_EStoveCommonResultCode_WebviewCreateCookieFail | 언어 쿠키 설정 실패 (재시도) | O | 구매를 위해서는 약관 동의가 필요합니다. 현재 약관 동의 화면을 불러오지 못했습니다. 다시 시도해 주세요. [확인] |
| onFinished | 63 | k_EStoveCommonResultCode_WebviewLoadUrlFail | 약관 웹뷰의 URL 로드 실패 (재시도) | x | |
| onFinished | 254 | k_EStoveCommonResultCode_ManagedException | 래퍼에서 예외 발생 시 콜백으로 전달 (ExceptionMessage 로깅) | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
| onFinished | 253 | k_EStoveCommonResultCode_UnmanagedException | 알 수 없는 예외 발생 (로그 확인 후 SDK 팀 문의) | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
| onDestroy | 33 | k_EStoveCommonResultCode_PopupNotCreated | 웹뷰가 한 번도 생성되지 않고 종료된 조기 실패 경로에서 1회 전달 (무시해도 됨) | x | |
| onDestroy | 66 | k_EStoveCommonResultCode_WebviewCloseFail | 웹뷰 정상 종료 시 내부 close 처리 실패 (참고용 로깅) | x |
전체 목록: EStoveCommonResultCode
Example
using static Stove.PCSDK.V3.IAP;
var termsParam = new IStoveFetchTermsAgreementParam
{
Operation = EStoveTermsOperation.k_EStoveTermsOperation_Default
};
Stove_FetchTermsAgreement(termsParam,
(callbackResult, outcome) =>
{
if (callbackResult.Result.IsSuccessful)
{
// 성공 시 로직을 구현해 주세요.
if (!outcome.IsAgreed)
{
// outcome.Url 로 약관 페이지를 열어 주세요.
}
}
else
{
// 실패 시 로직을 구현해 주세요.
}
},
(callbackResult) =>
{
// 약관 페이지 팝업이 모두 닫혔을 때 로직을 구현해 주세요.
});
Notes
- 이 함수는 비동기 함수이며 결과는
onFinished콜백으로만 전달돼요. - 이미 약관에 동의한 상태면 팝업 없이 즉시 성공(
IsAgreed = true)으로 종료해요. 오류 코드가 아니라 정상 분기예요. Operation == WithWebView를 사용하면 호출자가 약관 페이지의 UI를 직접 구현할 필요가 없어요.
See Also
Stove_GetAccessToken
종류 함수 · 모듈 Base · 버전 3.5.0
Description
현재 유효한 AccessToken을 조회해요. SDK가 내부적으로 토큰을 자동 갱신하여 항상 유효한 토큰을 제공해요.
Declaration
public static IStoveResult Stove_GetAccessToken(ref string accessToken, uint length)
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
accessToken | ref string | Y | AccessToken 문자열을 받을 변수. 호출 전 값은 무시되고, 호출 후 결과 문자열로 대체됨 |
length | uint | Y | 내부적으로 사용하는 문자열 버퍼의 길이 |
Returns
| Type | Description |
|---|---|
IStoveResult | 호출 결과. result.IsSuccessful로 성공 여부를 확인 |
Error Codes
| Code | Name | Description | Show to User | In-Game Message |
|---|---|---|---|---|
| 0 | k_EStoveCommonResultCode_Success | 성공 | x | |
| 5 | k_EStoveCommonResultCode_InvalidParam | 버퍼가 null이거나 length가 0, 혹은 버퍼가 작아 문자열이 잘림 (length 값을 늘려 재시도) | x | |
| 16 | k_EStoveCommonResultCode_BaseNotInitialized | SDK가 초기화되지 않음 (Stove_Initialize() 호출 여부 확인) | x | |
| 19 | k_EStoveCommonResultCode_InvalidAccessToken | 토큰이 유효하지 않음 (재로그인 유도) | O | 로그인 세션이 만료되었습니다. 게임 종료 후 다시 실행해 주세요. [확인] |
| 253 | k_EStoveCommonResultCode_UnmanagedException | SDK 내부에서 알 수 없는 예외 발생 (로그 확인 후 재시도) | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
| 254 | k_EStoveCommonResultCode_ManagedException | 래퍼에서 예외 발생 시 반환값으로 전달 (로그 확인 후 재시도) | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
전체 목록: EStoveCommonResultCode
아래 코드를 받으면 반드시 게임을 종료해야 해요. 정상 진행이 불가능한 상태예요.
19k_EStoveCommonResultCode_InvalidAccessToken— 로그인 세션 만료로 게임 종료 후 재실행이 필요해요
Example
using static Stove.PCSDK.V3.Base;
string accessToken = null;
IStoveResult result = Stove_GetAccessToken(ref accessToken, 1024);
if (result.IsSuccessful)
{
// 성공 시 로직을 구현해 주세요. accessToken을 사용합니다.
}
else
{
// 실패 시 로직을 구현해 주세요.
}
Notes
- SDK가 내부적으로 토큰을 자동 갱신하므로, 이 함수는 항상 유효한 토큰을 반환해요.
- 조회한 토큰을 게임에서 따로 보관해 두고 다시 쓰지 마세요. SDK 가 토큰을 주기적으로 갱신하므로 보관해 둔 값은 만료될 수 있어요. 토큰이 필요할 때마다 이 함수를 호출해 그때의 유효한 값을 받아 쓰세요.
- 토큰이 갱신되는 시점에 별도로 알림을 받으려면 Stove_AccessTokenRenewed를 사용해요.
See Also
Stove_GetGds
종류 함수 · 모듈 Base · 버전 3.5.0
Description
로그인한 사용자의 GDS(국가 · 시간대) 정보를 조회해요.
Declaration
public static IStoveResult Stove_GetGds(ref IStoveGds gds)
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
gds | IStoveGds | Y | GDS 정보를 받을 ref 변수 |
Returns
| Type | Description |
|---|---|
IStoveResult | 호출 결과. result.IsSuccessful로 성공 여부를 확인 |
Error Codes
| Code | Name | Description | Show to User | In-Game Message |
|---|---|---|---|---|
| 0 | k_EStoveCommonResultCode_Success | 성공 | x | |
| 5 | k_EStoveCommonResultCode_InvalidParam | outGds가 null(표면 레벨 검증) (파라미터 확인) | x | |
| 16 | k_EStoveCommonResultCode_BaseNotInitialized | SDK가 초기화되지 않음 (Stove_Initialize() 호출 여부 확인) | x | |
| 253 | k_EStoveCommonResultCode_UnmanagedException | SDK 내부에서 알 수 없는 예외 발생 (로그 확인 후 재시도) | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
| 254 | k_EStoveCommonResultCode_ManagedException | 래퍼에서 예외 발생 시 반환값으로 전달 (로그 확인 후 재시도) | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
전체 목록: EStoveCommonResultCode
Example
using static Stove.PCSDK.V3.Base;
IStoveGds gds = default;
IStoveResult result = Stove_GetGds(ref gds);
if (result.IsSuccessful)
{
// 성공 시 로직을 구현해 주세요.
string nation = gds.Nation;
string timezone = gds.Timezone;
}
else
{
// 실패 시 로직을 구현해 주세요.
}
Notes
- 국가 코드를 IP로 판별하지 못해 기본 국가 코드를 사용한 경우
gds.IsDefault가true예요.
See Also
Stove_GetSignin
종류 함수 · 모듈 Base · 버전 3.5.0
Description
로그인한 사용자의 가입(Signin) 정보를 조회해요.
Declaration
public static IStoveResult Stove_GetSignin(ref IStoveSignin signin)
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
signin | IStoveSignin | Y | 가입 정보를 받을 ref 변수 |
Returns
| Type | Description |
|---|---|
IStoveResult | 호출 결과. result.IsSuccessful로 성공 여부를 확인 |
Error Codes
| Code | Name | Description | Show to User | In-Game Message |
|---|---|---|---|---|
| 0 | k_EStoveCommonResultCode_Success | 성공 | x | |
| 5 | k_EStoveCommonResultCode_InvalidParam | outSignin이 null(표면 레벨 검증) (파라미터 확인) | x | |
| 16 | k_EStoveCommonResultCode_BaseNotInitialized | SDK가 초기화되지 않음 (Stove_Initialize() 호출 여부 확인) | x | |
| 253 | k_EStoveCommonResultCode_UnmanagedException | SDK 내부에서 알 수 없는 예외 발생 (로그 확인 후 재시도) | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
| 254 | k_EStoveCommonResultCode_ManagedException | 래퍼에서 예외 발생 시 반환값으로 전달 (로그 확인 후 재시도) | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
전체 목록: EStoveCommonResultCode
Example
using static Stove.PCSDK.V3.Base;
IStoveSignin signin = default;
IStoveResult result = Stove_GetSignin(ref signin);
if (result.IsSuccessful)
{
// 성공 시 로직을 구현해 주세요.
bool personVerified = signin.IsPersonVerified;
string providerCode = signin.ProviderCode;
}
else
{
// 실패 시 로직을 구현해 주세요.
}
Notes
- 계정 유형(
signin.AccountType)은 숫자 코드로 제공돼요. 예: 2=Facebook, 3=Twitter, 6=Naver, 9=Google+, 11=스토브 PC 가입, 12=Apple, 13=LINE, 14=LINE Games, 15=Steam, 16=VTCO 등.
See Also
Stove_GetUser
종류 함수 · 모듈 Base · 버전 3.5.0
Description
로그인한 사용자 정보를 조회해요.
Declaration
public static IStoveResult Stove_GetUser(ref IStoveUser user)
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
user | IStoveUser | Y | 사용자 정보를 받을 ref 변수 |
Returns
| Type | Description |
|---|---|
IStoveResult | 호출 결과. result.IsSuccessful로 성공 여부를 확인 |
Error Codes
| Code | Name | Description | Show to User | In-Game Message |
|---|---|---|---|---|
| 0 | k_EStoveCommonResultCode_Success | 성공 | x | |
| 5 | k_EStoveCommonResultCode_InvalidParam | outUser가 null(표면 레벨 검증) (파라미터 확인) | x | |
| 16 | k_EStoveCommonResultCode_BaseNotInitialized | SDK가 초기화되지 않음 (Stove_Initialize() 호출 여부 확인) | x | |
| 253 | k_EStoveCommonResultCode_UnmanagedException | SDK 내부에서 알 수 없는 예외 발생 (로그 확인 후 재시도) | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
| 254 | k_EStoveCommonResultCode_ManagedException | 래퍼에서 예외 발생 시 반환값으로 전달 (로그 확인 후 재시도) | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
전체 목록: EStoveCommonResultCode
Example
using static Stove.PCSDK.V3.Base;
IStoveUser user = default;
IStoveResult result = Stove_GetUser(ref user);
if (result.IsSuccessful)
{
// 성공 시 로직을 구현해 주세요.
string nickName = user.NickName;
ulong userId = user.UserId;
}
else
{
// 실패 시 로직을 구현해 주세요.
}
Notes
- 로그인한 사용자의 국가 · 지역 정보는 Stove_GetGds, 가입 정보는 Stove_GetSignin으로 별도 조회해요.
See Also
Stove_GetVersion
종류 함수 · 모듈 Base · 버전 3.5.0
Description
SDK 버전 정보를 조회해요.
Declaration
public static IStoveResult Stove_GetVersion(ref string version, uint length)
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
version | ref string | Y | 버전 문자열을 받을 변수. 호출 전 값은 무시되고, 호출 후 결과 문자열로 대체됨 |
length | uint | Y | 내부적으로 사용하는 문자열 버퍼의 길이 |
Returns
| Type | Description |
|---|---|
IStoveResult | 호출 결과. result.IsSuccessful로 성공 여부를 확인 |
Error Codes
| Code | Name | Description | Show to User | In-Game Message |
|---|---|---|---|---|
| 0 | k_EStoveCommonResultCode_Success | 성공 | x | |
| 5 | k_EStoveCommonResultCode_InvalidParam | 버퍼가 null이거나 length가 0, 혹은 버퍼가 작아 문자열이 잘림 (length 값을 늘려 재시도) | x | |
| 251 | k_EStoveCommonResultCode_PcsdkDllNotFound | DLL 경로를 찾지 못함 (SDK 배포 상태 확인) | x | |
| 253 | k_EStoveCommonResultCode_UnmanagedException | SDK 내부에서 알 수 없는 예외 발생 (로그 확인 후 재시도) | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
| 254 | k_EStoveCommonResultCode_ManagedException | 래퍼에서 예외 발생 시 반환값으로 전달 (로그 확인 후 재시도) | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
전체 목록: EStoveCommonResultCode
Example
using static Stove.PCSDK.V3.Base;
string version = null;
IStoveResult result = Stove_GetVersion(ref version, 64);
if (result.IsSuccessful)
{
// 성공 시 로직을 구현해 주세요. version을 사용합니다.
}
else
{
// 실패 시 로직을 구현해 주세요.
}
Notes
- 이 함수는 동기 함수이며 콜백을 받지 않아요.
Stove_Initialize
종류 함수 · 모듈 Base · 버전 3.5.0
Description
SDK를 초기화해요. 이 API에는 두 가지 오버로드가 있어요.
- 인자 없는 오버로드: SDK만 초기화해요.
Stove_RestartAppIfNecessary()가 캐시해 둔 environment/gameId/appKey 값을 재사용해요. IStoveInitializeParam을 받는 오버로드: 단일바이너리(BaseSDK Consolidation) 통합 이후, SDK 초기화와 함께 View · IAP 모듈의 초기화도 함께 처리해요. SDK 부분은 마찬가지로Stove_RestartAppIfNecessary()가 캐시한 environment/gameId/appKey 값을 재사용해요. 여기에 더해initParam.MainWndHandle이 0이 아니면 View 모듈이 초기화되고,initParam.ShopKey가 비어 있지 않고MainWndHandle도 지정되어 있으면 IAP 모듈까지 함께 초기화돼요.
이 API를 호출하기 전에 Stove_RestartAppIfNecessary()를 먼저 호출해야 해요.
Declaration
public static IStoveResult Stove_Initialize()
public static IStoveResult Stove_Initialize(IStoveInitializeParam initParam)
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
initParam | IStoveInitializeParam | N | ShopKey, MainWndHandle을 담은 파라미터. 생략(무인자 오버로드)하면 SDK만 초기화 |
Returns
| Type | Description |
|---|---|
IStoveResult | 호출 결과. result.IsSuccessful로 성공 여부를 확인 |
Error Codes
| Code | Name | Description | Show to User | In-Game Message |
|---|---|---|---|---|
| 0 | k_EStoveCommonResultCode_Success | 성공 | x | |
| 1 | k_EStoveCommonResultCode_Fail | 필수 정보 파싱 실패(하위 계층) (로그 확인 후 재시도) | x | |
| 5 | k_EStoveCommonResultCode_InvalidParam | environment/gameId/appKey 중 하나라도 비어 있음(Stove_RestartAppIfNecessary에서 캐시된 값 기준) (Stove_RestartAppIfNecessary 호출 파라미터 확인) | x | |
| 18 | k_EStoveCommonResultCode_AlreadyInitialized | 이미 초기화됨 (Stove_Uninitialize() 호출 후 재시도) | x | |
| 251 | k_EStoveCommonResultCode_PcsdkDllNotFound | 내부 버전 조회(GetVersion) 실패 결과가 그대로 전파됨 (SDK 배포 상태 확인) | x | |
| 253 | k_EStoveCommonResultCode_UnmanagedException | SDK 내부에서 알 수 없는 예외 발생 (로그 확인 후 재시도) | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
| 254 | k_EStoveCommonResultCode_ManagedException | 래퍼에서 예외 발생 시 반환값으로 전달 (로그 확인 후 재시도) | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
| 302 | k_EStoveResultCode_NotFoundRequiredInformation | 하위 계층(TokenActor)에서 필수 파라미터 누락 감지 (Stove_RestartAppIfNecessary 호출 파라미터 확인) | x | |
| 304 | k_EStoveResultCode_NeedStoveLauncher | Stove_RestartAppIfNecessary를 먼저 호출하지 않음 (Stove_RestartAppIfNecessary 선행 호출) | O | 게임이 스토브 PC 클라이언트를 통해 실행되지 않아 종료됩니다.클라이언트에서 다시 게임을 실행해주세요.클라이언트 미설치 시 스토브 홈페이지에서 설치해주세요.[확인] |
전체 목록: EStoveCommonResultCode, EStoveResultCode
아래 코드를 받으면 반드시 게임을 종료해야 해요. 정상 진행이 불가능한 상태예요.
304k_EStoveResultCode_NeedStoveLauncher— 게임 종료 후 재실행이 필요해요
Example
using static Stove.PCSDK.V3.Base;
var initParam = new IStoveInitializeParam
{
ShopKey = "your_shop_key",
MainWndHandle = hWnd
};
IStoveResult result = Stove_Initialize(initParam);
if (result.IsSuccessful)
{
// 성공 시 로직을 구현해 주세요.
}
else
{
// 실패 시 로직을 구현해 주세요.
}
Notes
IStoveInitializeParam오버로드는 성공 시 View/IAP 서브 초기화까지 수행해요. 그 서브 초기화가 실패하면 이 API 자체가 IAP/View 실패 코드로 실패 반환되지만, SDK 자체는 계속 동작해요.- 옛
IStoveInitializeParam에 있던Environment/GameId/AppKey필드는Stove_RestartAppIfNecessary의IStoveRestartAppIfNecessaryParam으로 옮겨졌어요. 이 API의IStoveInitializeParam은ShopKey/MainWndHandle2개 필드만 가져요. - 종료할 때는 반드시 Stove_Uninitialize를 호출해야 해요.
See Also
Stove_ManualPopup
종류 함수 · 모듈 View · 버전 3.5.0
Description
Stove_ManualPopup은 popupParam.ResourceKey로 지정한 팝업 콘텐츠를 서버에서 조회해 웹뷰로 표시해요. Stove_AutoPopup과 달리 게임이 원하는 시점에 임의로 호출할 수 있어요.
SDK 초기화(Stove_Initialize) 이후에 호출해야 해요.
팝업이 하나도 생성되지 않고 종료되는 모든 경로(파라미터 오류, 미초기화, 조회 결과 없음, 웹뷰 생성 실패 등)에서
onDestroy에k_EStoveCommonResultCode_PopupNotCreated(33)가 1회 전달돼요. 이 코드는 내부 정리 신호이며onFinished에는 전달되지 않아요.
Declaration
public static void Stove_ManualPopup(IStoveManualPopupParam popupParam, OnViewPopupCallback onFinished, OnViewPopupDestroyCallback onDestroy);
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
popupParam | IStoveManualPopupParam | Y | 웹뷰 표시 모드(WebViewMode)와 표시할 팝업을 지정하는 ResourceKey를 담은 파라미터예요. |
onFinished | OnViewPopupCallback | Y | 팝업 표시가 완료되었을 때 호출되는 콜백이에요. |
onDestroy | OnViewPopupDestroyCallback | N | 팝업 웹뷰가 완전히 파괴되었을 때 호출되는 콜백이에요. |
Returns
없음 (void 함수)
Callback
public delegate void OnViewPopupCallback(IStoveCallbackResult callbackResult);
public delegate void OnViewPopupDestroyCallback(IStoveCallbackResult callbackResult);
| Name | Type | Description |
|---|---|---|
callbackResult | IStoveCallbackResult | 호출 결과예요. callbackResult.Result.IsSuccessful로 성공 여부를 확인해요. |
onFinished는 팝업 표시가 확정된 시점에 1회 호출돼요. onDestroy는 웹뷰가 화면에서 완전히 사라진 시점에 1회 호출돼요. 두 콜백 모두 Stove_RunCallback()을 호출한 스레드에서 실행돼요.
Error Codes
onFinished
| Code | Name | Description | Show to User | In-Game Message |
|---|---|---|---|---|
| 0 | k_EStoveCommonResultCode_Success | 성공 | x | |
| 5 | k_EStoveCommonResultCode_InvalidParam | popupParam.ResourceKey가 빈 문자열 (호출부에서 ResourceKey 값 확인) | x | |
| 17 | k_EStoveCommonResultCode_NotInitialized | 팝업 기능이 초기화되지 않음 (Stove_Initialize 선행 호출 확인) | x | |
| 60 | k_EStoveCommonResultCode_ViewUiNotInitialized | 팝업 UI 서브시스템이 초기화되지 않음(정상 흐름에서는 발생하지 않는 방어적 코드) (재현되면 SDK 지원팀 문의) | x | |
| 65 | k_EStoveCommonResultCode_WebviewCloseAllFail | 팝업 생성 전 기존 웹뷰 일괄 닫기 실패 (로그 확인) | x | |
| 62 | k_EStoveCommonResultCode_WebviewCreateFail | 웹뷰 생성 실패 (재시도 또는 로그 확인) | x | |
| 63 | k_EStoveCommonResultCode_WebviewLoadUrlFail | 웹뷰 URL 로드 실패 (네트워크 상태 확인 후 재시도) | x | |
| 67 | k_EStoveCommonResultCode_NoPopupData | ResourceKey에 해당하는 팝업 데이터가 0건 (ResourceKey 값 확인) | O | 팝업 설정 정보가 존재하지 않아 표시할 창이 없습니다. [확인] |
| 254 | k_EStoveCommonResultCode_ManagedException | 래퍼에서 예외 발생 시 콜백으로 전달 (callbackResult.Result.ExceptionMessage 로그 확인) | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
onDestroy
| Code | Name | Description | Show to User | In-Game Message |
|---|---|---|---|---|
| 0 | k_EStoveCommonResultCode_Success | 웹뷰 정상 종료 | x | |
| 66 | k_EStoveCommonResultCode_WebviewCloseFail | 웹뷰 닫기 실패 (로그 확인) | x | |
| 33 | k_EStoveCommonResultCode_PopupNotCreated | 웹뷰가 생성되지 않고 조기 종료됨(파라미터 오류 포함, 내부 정리 신호) (별도 처리 불필요) | x | |
| 254 | k_EStoveCommonResultCode_ManagedException | 래퍼에서 예외 발생 시 콜백으로 전달 (callbackResult.Result.ExceptionMessage 로그 확인) | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
전체 목록: EStoveCommonResultCode
Example
using static Stove.PCSDK.V3.View;
var popupParam = new IStoveManualPopupParam
{
WebViewMode = EStoveWebViewMode.k_EStoveWebViewMode_Internal,
ResourceKey = "event_2026_summer"
};
Stove_ManualPopup(popupParam,
onFinished: (callbackResult) =>
{
if (callbackResult.Result.IsSuccessful)
{
// 성공 시 로직을 구현해 주세요.
}
else
{
// 실패 시 로직을 구현해 주세요.
}
},
onDestroy: (callbackResult) =>
{
if (callbackResult.Result.IsSuccessful)
{
// 성공 시 로직을 구현해 주세요.
}
else
{
// 실패 시 로직을 구현해 주세요. (코드 33은 무시해도 됩니다.)
}
});
Notes
Stove_AutoPopup은 서버가 자동으로 선정한 팝업을 보여주는 반면,Stove_ManualPopup은 게임이ResourceKey로 특정 팝업 콘텐츠를 직접 지정해요.33(PopupNotCreated)은onDestroy전용 코드이며onFinished에는 절대 전달되지 않아요.
See Also
Stove_NewsPopup
종류 함수 · 모듈 View · 버전 3.5.0
Description
Stove_NewsPopup은 서버에서 뉴스(공지) 팝업 목록을 조회해 웹뷰로 표시해요.
SDK 초기화(Stove_Initialize) 이후에 호출해야 해요. 표시할 팝업 데이터가 없으면 웹뷰를 띄우지 않고 종료해요.
팝업이 하나도 생성되지 않고 종료되는 모든 경로(미초기화, 조회 결과 없음, 웹뷰 생성 실패 등)에서
onDestroy에k_EStoveCommonResultCode_PopupNotCreated(33)가 1회 전달돼요. 이 코드는 내부 정리 신호이며onFinished에는 전달되지 않아요.
Declaration
public static void Stove_NewsPopup(IStovePopupParam popupParam, OnViewPopupCallback onFinished, OnViewPopupDestroyCallback onDestroy);
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
popupParam | IStovePopupParam | Y | 웹뷰 표시 모드(WebViewMode)를 담은 파라미터예요. |
onFinished | OnViewPopupCallback | Y | 팝업 표시가 완료(또는 표시할 데이터가 없어 종료)되었을 때 호출되는 콜백이에요. |
onDestroy | OnViewPopupDestroyCallback | N | 팝업 웹뷰가 완전히 파괴되었을 때 호출되는 콜백이에요. |
Returns
없음 (void 함수)
Callback
public delegate void OnViewPopupCallback(IStoveCallbackResult callbackResult);
public delegate void OnViewPopupDestroyCallback(IStoveCallbackResult callbackResult);
| Name | Type | Description |
|---|---|---|
callbackResult | IStoveCallbackResult | 호출 결과예요. callbackResult.Result.IsSuccessful로 성공 여부를 확인해요. |
onFinished는 팝업 표시(또는 데이터 없음으로 인한 종료)가 확정된 시점에 1회 호출돼요. onDestroy는 웹뷰가 화면에서 완전히 사라진 시점에 1회 호출돼요. 두 콜백 모두 Stove_RunCallback()을 호출한 스레드에서 실행돼요.
Error Codes
onFinished
| Code | Name | Description | Show to User | In-Game Message |
|---|---|---|---|---|
| 0 | k_EStoveCommonResultCode_Success | 성공 | x | |
| 17 | k_EStoveCommonResultCode_NotInitialized | 팝업 기능이 초기화되지 않음 (Stove_Initialize 선행 호출 확인) | x | |
| 60 | k_EStoveCommonResultCode_ViewUiNotInitialized | 팝업 UI 서브시스템이 초기화되지 않음(정상 흐름에서는 발생하지 않는 방어적 코드) (재현되면 SDK 지원팀 문의) | x | |
| 65 | k_EStoveCommonResultCode_WebviewCloseAllFail | 팝업 생성 전 기존 웹뷰 일괄 닫기 실패 (로그 확인) | x | |
| 62 | k_EStoveCommonResultCode_WebviewCreateFail | 웹뷰 생성 실패 (재시도 또는 로그 확인) | x | |
| 63 | k_EStoveCommonResultCode_WebviewLoadUrlFail | 웹뷰 URL 로드 실패 (네트워크 상태 확인 후 재시도) | x | |
| 67 | k_EStoveCommonResultCode_NoPopupData | 서버 조회 결과 표시할 팝업이 0건 (정상 종료로 처리) | O | 팝업 설정 정보가 존재하지 않아 표시할 창이 없습니다. [확인] |
| 254 | k_EStoveCommonResultCode_ManagedException | 래퍼에서 예외 발생 시 콜백으로 전달 (callbackResult.Result.ExceptionMessage 로그 확인) | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
onDestroy
| Code | Name | Description | Show to User | In-Game Message |
|---|---|---|---|---|
| 0 | k_EStoveCommonResultCode_Success | 웹뷰 정상 종료 | x | |
| 66 | k_EStoveCommonResultCode_WebviewCloseFail | 웹뷰 닫기 실패 (로그 확인) | x | |
| 33 | k_EStoveCommonResultCode_PopupNotCreated | 웹뷰가 생성되지 않고 조기 종료됨(내부 정리 신호) (별도 처리 불필요) | x | |
| 254 | k_EStoveCommonResultCode_ManagedException | 래퍼에서 예외 발생 시 콜백으로 전달 (callbackResult.Result.ExceptionMessage 로그 확인) | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
전체 목록: EStoveCommonResultCode
Example
using static Stove.PCSDK.V3.View;
var popupParam = new IStovePopupParam
{
WebViewMode = EStoveWebViewMode.k_EStoveWebViewMode_Internal
};
Stove_NewsPopup(popupParam,
onFinished: (callbackResult) =>
{
if (callbackResult.Result.IsSuccessful)
{
// 성공 시 로직을 구현해 주세요.
}
else
{
// 실패 시 로직을 구현해 주세요.
}
},
onDestroy: (callbackResult) =>
{
if (callbackResult.Result.IsSuccessful)
{
// 성공 시 로직을 구현해 주세요.
}
else
{
// 실패 시 로직을 구현해 주세요. (코드 33은 무시해도 됩니다.)
}
});
Notes
33(PopupNotCreated)은onDestroy전용 코드이며onFinished에는 절대 전달되지 않아요.- 콜백 오류코드 구성은
Stove_CouponPopup과 동일해요.
See Also
Stove_OpenExternalUrl
종류 함수 · 모듈 Base · 버전 3.5.0
Description
외부 브라우저로 URL을 열어요. Onstove 관련 도메인(예: *.onstove.com)을 열 때는 SSO 처리를 함께 수행해요.
Declaration
public static void Stove_OpenExternalUrl(string url, OnOpenExternalUrlCallback onFinished)
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
url | string | Y | 열고자 하는 URL |
onFinished | OnOpenExternalUrlCallback | Y | 결과를 받을 콜백 |
Returns
없음
Callback
public delegate void OnOpenExternalUrlCallback(IStoveCallbackResult callbackResult);
| Name | Type | Description |
|---|---|---|
callbackResult | IStoveCallbackResult | 호출 결과 |
이 콜백은 Stove_RunCallback()을 호출한 스레드에서 실행돼요. 1회성 콜백이에요.
Error Codes
| Code | Name | Description | Show to User | In-Game Message |
|---|---|---|---|---|
| 0 | k_EStoveCommonResultCode_Success | 성공(URL 오픈 성공) | x | |
| 5 | k_EStoveCommonResultCode_InvalidParam | onFinished가 null (콜백 등록 여부 확인) | x | |
| 16 | k_EStoveCommonResultCode_BaseNotInitialized | SDK가 초기화되지 않음 (Stove_Initialize() 호출 여부 확인) | x | |
| 253 | k_EStoveCommonResultCode_UnmanagedException | 브라우저 실행에 실패했거나, 실행 중 알 수 없는 예외가 발생함 (URL 형식과 브라우저 설치 상태 확인) | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
| 254 | k_EStoveCommonResultCode_ManagedException | 래퍼에서 예외 발생 시 콜백으로 전달 (로그 확인) | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
전체 목록: EStoveCommonResultCode
Example
using static Stove.PCSDK.V3.Base;
Stove_OpenExternalUrl("https://www.onstove.com", (callbackResult) =>
{
if (callbackResult.Result.IsSuccessful)
{
// 성공 시 로직을 구현해 주세요.
}
else
{
// 실패 시 로직을 구현해 주세요.
}
});
Notes
- Onstove 관련 도메인(
*.onstove.com등)을 열 때는 SSO 처리가 함께 수행돼요.
Stove_OverImmersionNotification
종류 함수 · 모듈 Base · 버전 3.5.0
Description
한국 과몰입 방지 규제 대상 사용자에게 매시간 알림을 콜백으로 전달해요. 한국 전용 API예요.
이 콜백은 1회성이 아니라 대상 사용자에게 매시간 반복해서 전달돼요.
Declaration
public static void Stove_OverImmersionNotification(OnOverImmersionNotificationCallback onFinished)
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
onFinished | OnOverImmersionNotificationCallback | N | 결과를 받을 콜백 |
Returns
없음
Callback
public delegate void OnOverImmersionNotificationCallback(IStoveCallbackResult callbackResult, IStoveOverImmersionInfo overImmersion);
| Name | Type | Description |
|---|---|---|
callbackResult | IStoveCallbackResult | 호출 결과 |
overImmersion | IStoveOverImmersionInfo | 과몰입 방지 알림 정보. 경고 메시지(Msg), 누적 게임 시간(ElapsedHours, 시간 단위), 메시지 노출 시간(ExposureTime, 초 단위)을 제공 |
이 콜백은 Stove_RunCallback()을 호출한 스레드에서 실행돼요. 대상 사용자에게 매시간 반복해서 전달돼요.
Error Codes
| Code | Name | Description | Show to User | In-Game Message |
|---|---|---|---|---|
| 0 | k_EStoveCommonResultCode_Success | 성공 | x | |
| 5 | k_EStoveCommonResultCode_InvalidParam | onFinished가 null(콜백이 없어 실제로는 전달되지 않는 내부 값) (콜백 등록 여부 확인) | x | |
| 16 | k_EStoveCommonResultCode_BaseNotInitialized | SDK가 초기화되지 않음 (Stove_Initialize() 호출 여부 확인) | x | |
| 31 | k_EStoveCommonResultCode_NotSupportedCountry | 로그인 사용자의 GDS 국가가 한국(kr)이 아님 (국가별 분기 처리) | x | |
| 253 | k_EStoveCommonResultCode_UnmanagedException | SDK 내부에서 알 수 없는 예외 발생 (로그 확인) | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
| 254 | k_EStoveCommonResultCode_ManagedException | 래퍼에서 예외 발생 시 콜백으로 전달 (로그 확인) | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
전체 목록: EStoveCommonResultCode
Example
using static Stove.PCSDK.V3.Base;
Stove_OverImmersionNotification((callbackResult, overImmersion) =>
{
if (callbackResult.Result.IsSuccessful)
{
// 성공 시 로직을 구현해 주세요.
string msg = overImmersion.Msg;
int exposureTime = overImmersion.ExposureTime;
}
else
{
// 실패 시 로직을 구현해 주세요.
}
});
Notes
- 한국 전용 API예요.
- 대상 사용자에게 매시간 반복해서 전달되는 콜백이에요.
See Also
Stove_PCBangCheckStatus
종류 함수 · 모듈 PCBang · 버전 3.5.0
Description
사용자가 현재 이용 중인 PC방의 상태(프리미엄 여부, PSN, 제품 코드)를 조회해요. Stove_PCBangLogin과 별개로 언제든 호출할 수 있는 단발성 조회 API예요.
SDK 초기화 이후에 호출해야 해요.
Declaration
public static void Stove_PCBangCheckStatus(OnPCBangCheckStatusCallback onFinished)
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
onFinished | OnPCBangCheckStatusCallback | Y | 조회 결과를 전달받을 콜백 |
Returns
없음
Callback
public delegate void OnPCBangCheckStatusCallback(IStoveCallbackResult callbackResult, IStovePCBangStatus status);
| Name | Type | Description |
|---|---|---|
callbackResult | IStoveCallbackResult | 호출 결과 |
status | IStovePCBangStatus | 프리미엄 상태, PSN, 제품 코드를 담은 조회 결과 |
Stove_RunCallback()을 호출한 스레드에서 1회 실행돼요.
콜백은 Stove_RunCallback() 을 호출한 스레드에서 실행돼요. SDK 내부 스레드가 아니에요.
Error Codes
| Code | Name | Description | Show to User | In-Game Message |
|---|---|---|---|---|
| 0 | k_EStoveCommonResultCode_Success | 성공 | x | |
| 5 | k_EStoveCommonResultCode_InvalidParam | onFinished가 null (콜백 등록 여부 확인) | x | |
| 17 | k_EStoveCommonResultCode_NotInitialized | PC방 기능이 초기화되지 않음 (Stove_Initialize 선행 호출 확인) | x | |
| 22 | k_EStoveCommonResultCode_HttpError | 요청 HTTP 상태 코드가 200이 아님 (네트워크 상태 확인 후 재시도) | O | 네트워크 연결이 원활하지 않습니다. 네트워크 상태를 확인하고 다시 실행해 주세요. [확인] |
| 23 | k_EStoveCommonResultCode_ResponseError | 응답에 code/message 필드가 없거나 서버가 비즈니스 오류(code != 0)를 반환 (ExternalError 확인 후 재시도) | O | 네트워크 연결이 원활하지 않습니다. 네트워크 상태를 확인하고 다시 실행해 주세요. [확인] |
| 25 | k_EStoveCommonResultCode_ResponseValueIsNull | 응답의 value/data가 JSON null (서버 응답 확인) | O | 네트워크 연결이 원활하지 않습니다. 네트워크 상태를 확인하고 다시 실행해 주세요. [확인] |
| 249 | k_EStoveCommonResultCode_NetworkTransportError | 네트워크 전송 계층 오류(WinHTTP 등) (네트워크 상태 확인 후 재시도) | x | |
| 254 | k_EStoveCommonResultCode_ManagedException | 래퍼에서 예외 발생 시 콜백으로 전달 (예외 메시지 로깅 후 재시도) | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
실패 시 status의 PremiumCheck은 오류 상태 값으로 무효처리되어 전달돼요.
전체 목록: EStoveCommonResultCode
Example
using static Stove.PCSDK.V3.PCBang;
PCBang.Stove_PCBangCheckStatus((callbackResult, status) =>
{
if (callbackResult.Result.IsSuccessful)
{
// 성공 시 로직을 구현해 주세요.
}
else
{
// 실패 시 로직을 구현해 주세요.
}
});
Notes
Stove_PCBangLogin을 호출하지 않은 상태에서도 호출할 수 있는 단발성 조회 API예요.
See Also
Stove_PCBangLogin
종류 함수 · 모듈 PCBang · 버전 3.5.0
Description
로그인한 게임 사용자를 PC방 서비스에 로그인시켜요. 성공하면 onUserLogin 콜백이 1회 호출되고, 이후 onRefreshBenefit 콜백이 4분 주기로 반복 호출되어 갱신된 혜택 정보를 전달해요.
SDK 초기화 이후에 호출해야 해요. 로그아웃(Stove_PCBangLogout)을 호출하기 전까지는 onRefreshBenefit 콜백이 계속 등록된 상태로 유지돼요.
onRefreshBenefit은 PC방 프리미엄 사용자뿐 아니라 무료(Free) 상태에서도 4분마다 반복 호출돼요. 갱신에 실패해도 반복 호출은 멈추지 않아요.
Declaration
public static void Stove_PCBangLogin(OnPCBangLoginCallback onUserLogin, OnRefreshPCBangBenefitCallback onRefreshBenefit)
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
onUserLogin | OnPCBangLoginCallback | N | 최초 로그인 완료 결과를 1회 전달받을 콜백 |
onRefreshBenefit | OnRefreshPCBangBenefitCallback | N | 로그인 성공 후 4분 주기로 갱신된 혜택 정보를 반복 전달받을 콜백 |
두 콜백 중 하나라도 null이면 로그인 요청만 보내고 어떤 콜백도 등록되지 않아요(결과를 전달받을 수 없음).
Returns
없음
Callback
public delegate void OnPCBangLoginCallback(IStoveCallbackResult callbackResult, IStovePCBangLoginOutcome loginOutcome);
public delegate void OnRefreshPCBangBenefitCallback(IStoveCallbackResult callbackResult, IStovePCBangBenefitInfo benefitInfo);
| Name | Type | Description |
|---|---|---|
callbackResult | IStoveCallbackResult | 호출 결과 |
loginOutcome | IStovePCBangLoginOutcome | onUserLogin에 전달되는 로그인 결과(프리미엄 상태, PSN, 잔여 시간) |
benefitInfo | IStovePCBangBenefitInfo | onRefreshBenefit에 전달되는 갱신된 혜택 정보(프리미엄 상태, 잔여 시간) |
두 콜백 모두 Stove_RunCallback()을 호출한 스레드에서 실행돼요. onUserLogin은 최초 로그인 완료 시 1회만 호출되고, onRefreshBenefit은 로그인 성공 후 로그아웃 전까지 4분 주기로 반복 호출돼요.
Error Codes
| Code | Name | Description | Show to User | In-Game Message | Callback |
|---|---|---|---|---|---|
| 0 | k_EStoveCommonResultCode_Success | 성공 | x | 둘 다 | |
| 5 | k_EStoveCommonResultCode_InvalidParam | onFinished가 null (콜백 등록 여부 확인) | x | 둘 다 | |
| 17 | k_EStoveCommonResultCode_NotInitialized | PC방 기능이 초기화되지 않음 (Stove_Initialize 선행 호출 확인) | x | 둘 다 | |
| 22 | k_EStoveCommonResultCode_HttpError | 요청 HTTP 상태 코드가 200이 아님 (네트워크 상태 확인 후 재시도) | O | 네트워크 연결이 원활하지 않습니다. 네트워크 상태를 확인하고 다시 실행해 주세요. [확인] | 둘 다 |
| 23 | k_EStoveCommonResultCode_ResponseError | 응답에 code/message 필드가 없거나 서버가 비즈니스 오류(code != 0)를 반환 (ExternalError 확인 후 재시도) | O | 네트워크 연결이 원활하지 않습니다. 네트워크 상태를 확인하고 다시 실행해 주세요. [확인] | 둘 다 |
| 25 | k_EStoveCommonResultCode_ResponseValueIsNull | 응답의 value/data가 JSON null (서버 응답 확인) | O | 네트워크 연결이 원활하지 않습니다. 네트워크 상태를 확인하고 다시 실행해 주세요. [확인] | 둘 다 |
| 26 | k_EStoveCommonResultCode_ResponseInvalidValueFormat | 복호화된 응답 문자열이 JSON 파싱에 실패 (재시도, 반복되면 문의) | O | 네트워크 연결이 원활하지 않습니다. 네트워크 상태를 확인하고 다시 실행해 주세요. [확인] | 둘 다 |
| 249 | k_EStoveCommonResultCode_NetworkTransportError | 네트워크 전송 계층 오류(WinHTTP 등) (네트워크 상태 확인 후 재시도) | x | 둘 다 | |
| 254 | k_EStoveCommonResultCode_ManagedException | 래퍼에서 예외 발생 시 콜백으로 전달 (예외 메시지 로깅 후 재시도) | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] | 둘 다 |
전체 목록: EStoveCommonResultCode
Example
using static Stove.PCSDK.V3.PCBang;
PCBang.Stove_PCBangLogin(
(callbackResult, loginOutcome) =>
{
if (callbackResult.Result.IsSuccessful)
{
// 성공 시 로직을 구현해 주세요.
}
else
{
// 실패 시 로직을 구현해 주세요.
}
},
(callbackResult, benefitInfo) =>
{
if (callbackResult.Result.IsSuccessful)
{
// 갱신된 혜택 정보 처리 로직을 구현해 주세요.
}
else
{
// 실패 시 로직을 구현해 주세요.
}
});
Notes
onRefreshBenefit은 로그인 성공 후 4분 주기로 반복 호출되며, PC방 프리미엄 상태뿐 아니라 무료(Free) 상태에서도 계속 호출돼요. 한 번 갱신에 실패해도 반복 호출 자체는 멈추지 않아요.onUserLogin의 예외 콜백은 메서드 코드k_EStovePCBangMethodCode_Login(3000)을,onRefreshBenefit의 예외 콜백은k_EStovePCBangMethodCode_RefreshBenefit(3003)을 사용해요 — 두 콜백이 서로 다른 메서드 코드를 가진다는 점에 유의하세요.- 로그인 성공 시점부터
Stove_PCBangLogout을 호출하기 전까지onRefreshBenefit등록이 유지돼요.
See Also
Stove_PCBangLogout
종류 함수 · 모듈 PCBang · 버전 3.5.0
Description
Stove_PCBangLogin으로 로그인한 사용자를 PC방 서비스에서 로그아웃시켜요. 성공하면 Stove_PCBangLogin에서 시작된 혜택 갱신(onRefreshBenefit) 반복 호출이 중단돼요.
SDK 초기화 이후에 호출해야 해요.
Declaration
public static void Stove_PCBangLogout(OnPCBangLogoutCallback onFinished)
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
onFinished | OnPCBangLogoutCallback | Y | 로그아웃 결과를 전달받을 콜백 |
Returns
없음
Callback
public delegate void OnPCBangLogoutCallback(IStoveCallbackResult callbackResult);
| Name | Type | Description |
|---|---|---|
callbackResult | IStoveCallbackResult | 호출 결과 |
Stove_RunCallback()을 호출한 스레드에서 1회 실행돼요.
콜백은 Stove_RunCallback() 을 호출한 스레드에서 실행돼요. SDK 내부 스레드가 아니에요.
Error Codes
| Code | Name | Description | Show to User | In-Game Message |
|---|---|---|---|---|
| 0 | k_EStoveCommonResultCode_Success | 성공 | x | |
| 5 | k_EStoveCommonResultCode_InvalidParam | onFinished가 null (콜백 등록 여부 확인) | x | |
| 17 | k_EStoveCommonResultCode_NotInitialized | PC방 기능이 초기화되지 않음 (Stove_Initialize 선행 호출 확인) | x | |
| 22 | k_EStoveCommonResultCode_HttpError | 요청 HTTP 상태 코드가 200이 아님 (네트워크 상태 확인 후 재시도) | O | 네트워크 연결이 원활하지 않습니다. 네트워크 상태를 확인하고 다시 실행해 주세요. [확인] |
| 23 | k_EStoveCommonResultCode_ResponseError | 응답에 code/message 필드가 없거나 서버가 비즈니스 오류(code != 0)를 반환 (ExternalError 확인 후 재시도) | O | 네트워크 연결이 원활하지 않습니다. 네트워크 상태를 확인하고 다시 실행해 주세요. [확인] |
| 25 | k_EStoveCommonResultCode_ResponseValueIsNull | 응답의 value/data가 JSON null (서버 응답 확인) | O | 네트워크 연결이 원활하지 않습니다. 네트워크 상태를 확인하고 다시 실행해 주세요. [확인] |
| 249 | k_EStoveCommonResultCode_NetworkTransportError | 네트워크 전송 계층 오류(WinHTTP 등) (네트워크 상태 확인 후 재시도) | x | |
| 254 | k_EStoveCommonResultCode_ManagedException | 래퍼에서 예외 발생 시 콜백으로 전달 (예외 메시지 로깅 후 재시도) | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
로그아웃은 AES 복호화 단계를 거치지 않으므로 k_EStoveCommonResultCode_ResponseInvalidValueFormat(26)은 발생하지 않아요.
전체 목록: EStoveCommonResultCode
Example
using static Stove.PCSDK.V3.PCBang;
PCBang.Stove_PCBangLogout((callbackResult) =>
{
if (callbackResult.Result.IsSuccessful)
{
// 성공 시 로직을 구현해 주세요.
}
else
{
// 실패 시 로직을 구현해 주세요.
}
});
Notes
- 로그아웃 성공 시
Stove_PCBangLogin에서 시작된onRefreshBenefit반복 호출이 중단돼요. - 게임 종료 시점에 별도로 로그아웃을 호출할 필요는 없지만, PC방 이용을 명시적으로 마치는 흐름(캐릭터 선택 화면 복귀 등)에서 호출하는 것을 권장해요.
See Also
Stove_RestartAppIfNecessary
종류 함수 · 모듈 Base · 버전 3.5.0
Description
이 API는 게임 실행 파일이 스토브 런처를 통해 실행되었는지 확인해요. 런처를 통하지 않았다면 SDK가 내부적으로 런처를 실행해 앱을 재시작시키고 현재 프로세스는 종료돼요.
이 API는 Stove_Initialize()보다 먼저 호출해야 해요. Stove_Initialize()는 이 API가 캐싱해 둔 environment/gameId/appKey 값을 재사용해요.
재시작이 필요한 경우 현재 프로세스가 종료되므로, 이 API 호출 이후의 코드가 실행되지 않을 수 있어요.
Declaration
public static void Stove_RestartAppIfNecessary(IStoveRestartAppIfNecessaryParam initParam, OnRestartAppIfNecessaryCallback onFinished)
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
initParam | IStoveRestartAppIfNecessaryParam | Y | Environment, GameId, AppKey, WaitTimeMilliSec, LaunchStoveLauncher, PlatformName을 담은 파라미터 |
onFinished | OnRestartAppIfNecessaryCallback | Y | 결과를 받을 콜백 |
Returns
없음
Callback
public delegate void OnRestartAppIfNecessaryCallback(IStoveCallbackResult callbackResult, IStoveRestartAppIfNecessaryOutcome outcome);
| Name | Type | Description |
|---|---|---|
callbackResult | IStoveCallbackResult | 호출 결과 |
outcome | IStoveRestartAppIfNecessaryOutcome | IsRestartRequired 프로퍼티로 재시작 필요 여부를 전달 |
이 콜백은 Stove_RunCallback()을 호출한 스레드에서 실행돼요. 1회성 콜백이며, 재시작이 필요 없어 그대로 진행할 수 있는 경우에도 결과가 전달돼요.
Error Codes
| Code | Name | Description | Show to User | In-Game Message |
|---|---|---|---|---|
| 0 | k_EStoveCommonResultCode_Success | 성공 | x | |
| 29 | k_EStoveCommonResultCode_AsyncOperationInProgress | 직전 비동기 재시작 스레드가 아직 실행 중 (이전 호출 완료 후 재시도) | x | |
| 30 | k_EStoveCommonResultCode_BaseUninitialized | 대기 중 IPC 상태가 초기 상태로 돌아감 (재시도) | x | |
| 253 | k_EStoveCommonResultCode_UnmanagedException | SDK 내부에서 알 수 없는 예외 발생 (로그 확인 후 재시도) | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
| 254 | k_EStoveCommonResultCode_ManagedException | 래퍼에서 예외 발생 시 콜백으로 전달 (로그 확인 후 재시도) | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
| 307 | k_EStoveResultCode_IpcConnectFailed | 런처와의 IPC 연결 실패 (런처 실행 상태 확인 후 재시도) | O | 게임이 스토브 PC 클라이언트를 통해 실행되지 않아 종료됩니다.클라이언트에서 다시 게임을 실행해주세요.클라이언트 미설치 시 스토브 홈페이지에서 설치해주세요.[확인] |
| 308 | k_EStoveResultCode_IpcAesKeyNotReceived | IPC로 AES 키를 수신하지 못함 (런처 실행 상태 확인 후 재시도) | O | 게임이 스토브 PC 클라이언트를 통해 실행되지 않아 종료됩니다.클라이언트에서 다시 게임을 실행해주세요.클라이언트 미설치 시 스토브 홈페이지에서 설치해주세요.[확인] |
| 309 | k_EStoveResultCode_IpcTimeout | 런처와의 통신이 WaitTimeMilliSec를 초과 (대기 시간을 늘려 재시도) | O | 게임이 스토브 PC 클라이언트를 통해 실행되지 않아 종료됩니다.클라이언트에서 다시 게임을 실행해주세요.클라이언트 미설치 시 스토브 홈페이지에서 설치해주세요.[확인] |
전체 목록: EStoveCommonResultCode, EStoveResultCode
아래 코드를 받으면 반드시 게임을 종료해야 해요. 정상 진행이 불가능한 상태예요.
307k_EStoveResultCode_IpcConnectFailed— 게임 종료 후 재실행이 필요해요308k_EStoveResultCode_IpcAesKeyNotReceived— 게임 종료 후 재실행이 필요해요309k_EStoveResultCode_IpcTimeout— 게임 종료 후 재실행이 필요해요
Example
using static Stove.PCSDK.V3.Base;
var initParam = new IStoveRestartAppIfNecessaryParam
{
Environment = "real",
GameId = "your_game_id",
AppKey = "your_app_key",
WaitTimeMilliSec = 10000,
LaunchStoveLauncher = true,
PlatformName = "Stove"
};
Stove_RestartAppIfNecessary(initParam, (callbackResult, outcome) =>
{
if (callbackResult.Result.IsSuccessful)
{
if (outcome.IsRestartRequired)
{
// 런처를 통해 재시작이 진행 중이므로 별도 처리가 필요하지 않습니다.
}
else
{
// 이미 런처를 통해 실행 중이므로 Stove_Initialize()를 계속 진행해 주세요.
}
}
else
{
// 실패 시 로직을 구현해 주세요.
}
});
Notes
- 옛
IStoveInitializeParam이 분리되면서Environment/GameId/AppKey필드가 이 API의IStoveRestartAppIfNecessaryParam으로 옮겨졌어요. 신규Stove_Initialize의 파라미터에는 이 필드들이 없어요. Stove_Initialize()호출 전에 반드시 이 API를 먼저 호출해야 해요.
See Also
Stove_RunCallback
종류 함수 · 모듈 Base · 버전 3.5.0
Description
비동기 API 호출의 결과(콜백)를 처리(dispatch)해요. 게임의 UI(메인) 스레드에서 호출해야 해요.
SDK가 등록해 둔 콜백들은 SDK 내부 스레드가 아니라, 이 함수를 호출한 스레드에서 실행돼요.
게임 루프(예: 매 프레임 또는 매 틱)에서 호출해야 해요.
while(true)형태로 이 함수만 반복 호출하는 방식으로 사용하지 않아요.
Declaration
public static void Stove_RunCallback()
Parameters
없음
Returns
없음
Error Codes
없음
Example
using static Stove.PCSDK.V3.Base;
// 게임 루프 예시
while (isGameRunning)
{
// ... 게임 로직 ...
Stove_RunCallback();
// ... 렌더링 등 나머지 루프 로직 ...
}
Notes
- 모든 비동기 API의 콜백은 이 함수를 호출한 스레드에서 실행돼요.
- 게임 루프 안에서 주기적으로 호출해야 콜백이 지연 없이 처리돼요.
- 대기 시간을 지정하려면 Stove_RunCallbackWithTimeout을 사용해요.
See Also
Stove_RunCallbackWithTimeout
종류 함수 · 모듈 Base · 버전 3.5.0
Description
Stove_RunCallback의 타임아웃 버전이에요. timeoutMillisec으로 대기 시간을 지정할 수 있어요.
게임의 UI(메인) 스레드에서 호출해야 하며, 등록된 콜백은 이 함수를 호출한 스레드에서 실행돼요.
Declaration
public static void Stove_RunCallbackWithTimeout(uint timeoutMillisec)
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
timeoutMillisec | uint | Y | 대기 시간(밀리초) |
Returns
없음
Error Codes
없음
Example
using static Stove.PCSDK.V3.Base;
// 게임 루프 예시 (최대 10ms 대기)
while (isGameRunning)
{
// ... 게임 로직 ...
Stove_RunCallbackWithTimeout(10);
// ... 렌더링 등 나머지 루프 로직 ...
}
Notes
- 모든 비동기 API의 콜백은 이 함수를 호출한 스레드에서 실행돼요.
- 일반적인 사용에는 Stove_RunCallback을 사용하고, 대기 시간 제어가 필요할 때 이 함수를 사용해요.
See Also
Stove_SendLog
종류 함수 · 모듈 Log · 버전 3.5.0
Description
로그 항목을 로컬 데이터베이스에 기록한 뒤 Stove 로그 백엔드로 전송해요.
SDK 초기화 이후에 호출해야 해요.
onFinished콜백의 성공(SUCCESS)은 로그가 로컬 SQLite DB에 기록되는 데 성공했다는 뜻이며, 서버로의 실제 전송 완료를 의미하지 않아요. 서버 전송은 별도의 내부 재전송 경로에서 비동기로 처리되며, 그 과정의 HTTP/네트워크 실패는 이 콜백으로 전달되지 않아요.
Declaration
public static void Stove_SendLog(IStoveSendLogParam logSendParam, OnSendLogCallback onFinished)
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
logSendParam | IStoveSendLogParam | Y | 전송할 로그 항목의 내용 |
onFinished | OnSendLogCallback | Y | 로컬 DB 기록 결과를 전달받을 콜백 |
Returns
없음
Callback
public delegate void OnSendLogCallback(IStoveCallbackResult callbackResult);
| Name | Type | Description |
|---|---|---|
callbackResult | IStoveCallbackResult | 호출 결과(로컬 DB 기록 결과) |
Stove_RunCallback()을 호출한 스레드에서 1회 실행돼요.
콜백은 Stove_RunCallback() 을 호출한 스레드에서 실행돼요. SDK 내부 스레드가 아니에요.
Error Codes
| Code | Name | Description | Show to User | In-Game Message |
|---|---|---|---|---|
| 0 | k_EStoveCommonResultCode_Success | 로컬 DB 기록 성공(서버 전송 완료를 의미하지 않음) | x | |
| 5 | k_EStoveCommonResultCode_InvalidParam | onFinished가 null (콜백 등록 여부 확인) | x | |
| 5 | k_EStoveCommonResultCode_InvalidParam | logSendParam.Contents가 비어있지 않은데 유효한 JSON 형식이 아님 (Contents 값의 JSON 형식 확인) | x | |
| 17 | k_EStoveCommonResultCode_NotInitialized | 로그 기능이 초기화되지 않음 (Stove_Initialize 선행 호출 확인) | x | |
| 44 | k_EStoveCommonResultCode_LocalDbWriteFailed | 로컬 DB에 로그 레코드 기록 실패 (디스크 공간/권한 확인) | x | |
| 82 | k_EStoveCommonResultCode_PayloadSizeExceeded | UTF-8로 인코딩한 로그 콘텐츠가 50KB를 초과 (Contents 크기 축소) | x | |
| 253 | k_EStoveCommonResultCode_UnmanagedException | 실행 중 알 수 없는 예외 발생 (예외 로깅 후 재시도) | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
| 254 | k_EStoveCommonResultCode_ManagedException | 래퍼에서 예외 발생 시 콜백으로 전달 (예외 메시지 로깅 후 재시도) | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
전체 목록: EStoveCommonResultCode
Example
using static Stove.PCSDK.V3.Log;
var logSendParam = new IStoveSendLogParam
{
Auid = 123456789L,
Cuid = 1L,
LogGroupId = "login_flow",
Contents = "{\"event\":\"login\"}",
};
Log.Stove_SendLog(logSendParam, (callbackResult) =>
{
if (callbackResult.Result.IsSuccessful)
{
// 성공 시 로직을 구현해 주세요.
}
else
{
// 실패 시 로직을 구현해 주세요.
}
});
Notes
- 이 콜백은 로컬 DB 기록 시점의 결과만 전달해요. 서버 전송이 실제로 실패해도(HTTP 오류, 네트워크 오류 등) 게임 클라이언트에는 알려지지 않으며, 실패한 로그는 다음 전송 시도 때 재전송을 시도하는 구조예요.
- 문자열 필드는 대부분 선택 항목이에요. 값을 설정하지 않은 필드는
null로 두면 되며,null과 빈 문자열("")은 서버에 서로 다른 값으로 전달되므로 혼용하지 않아야 해요. - 디바이스 정보, GDS 정보, 세션 ID, 타임스탬프, 게임 ID·환경 등은 SDK 가 자동으로 채워 전송해요. 게임 측에서는 IStoveSendLogParam 에 노출된 필드만 채우면 돼요.
- 로컬 DB 기록 실패(
k_EStoveCommonResultCode_LocalDbWriteFailed등)를 제외하면 이 콜백은 사실상 항상 성공을 돌려줘요. 게임 로직을 이 콜백의 결과로 분기하도록 설계하지 않는 것을 권장해요.
See Also
- 없음
Stove_SetGameProfile
종류 함수 · 모듈 Base · 버전 3.5.0
Description
게임 프로필 정보를 설정해요.
Declaration
public static IStoveResult Stove_SetGameProfile(IStoveSetGameProfileParam gameProfile)
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
gameProfile | IStoveSetGameProfileParam | Y | 게임 프로필 정보(WorldId, CharacterNo) |
Returns
| Type | Description |
|---|---|
IStoveResult | 호출 결과. result.IsSuccessful로 성공 여부를 확인 |
Error Codes
| Code | Name | Description | Show to User | In-Game Message |
|---|---|---|---|---|
| 0 | k_EStoveCommonResultCode_Success | 성공 | x | |
| 5 | k_EStoveCommonResultCode_InvalidParam | gameProfileParams가 null(표면 레벨 검증) (파라미터 확인) | x | |
| 16 | k_EStoveCommonResultCode_BaseNotInitialized | SDK가 초기화되지 않음 (Stove_Initialize() 호출 여부 확인) | x | |
| 253 | k_EStoveCommonResultCode_UnmanagedException | SDK 내부에서 알 수 없는 예외 발생 (로그 확인 후 재시도) | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
| 254 | k_EStoveCommonResultCode_ManagedException | 래퍼에서 예외 발생 시 반환값으로 전달 (로그 확인 후 재시도) | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
전체 목록: EStoveCommonResultCode
Example
using static Stove.PCSDK.V3.Base;
var gameProfile = new IStoveSetGameProfileParam
{
WorldId = "world_01",
CharacterNo = 12345
};
IStoveResult result = Stove_SetGameProfile(gameProfile);
if (result.IsSuccessful)
{
// 성공 시 로직을 구현해 주세요.
}
else
{
// 실패 시 로직을 구현해 주세요.
}
Notes
gameProfile.CharacterNo는 캐릭터 번호를 나타내요. 예전StoveGameProfileParams의 "worldId Length"라는 필드명은 문서상의 오기였어요.
Stove_SetLanguage
종류 함수 · 모듈 Base · 버전 3.5.0 · 폐기 예정
Description
이 API는 사용이 중단(Deprecated)되었어요. 대신 Stove_SetLanguageEx를 사용해야 해요.
PCSDK가 사용할 언어를 EStoveLocale 열거값으로 설정해요. 신규 flat C 인터페이스는 열거값 기반 언어 설정 API를 더 이상 제공하지 않으므로, 이 함수는 내부적으로 열거값을 문자열로 변환한 뒤 Stove_SetLanguageEx가 사용하는 것과 동일한 네이티브 API에 위임해요.
Declaration
[Obsolete("Use Stove_SetLanguageEx(string language) instead.")]
public static IStoveResult Stove_SetLanguage(EStoveLocale language)
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
language | EStoveLocale | Y | 설정할 언어. 내부적으로 문자열로 변환되어 네이티브 API에 전달됨 |
Returns
| Type | Description |
|---|---|
IStoveResult | 호출 결과. result.IsSuccessful로 성공 여부를 확인 |
Error Codes
| Code | Name | Description | Show to User | In-Game Message |
|---|---|---|---|---|
| 0 | k_EStoveCommonResultCode_Success | 성공 | x | |
| 5 | k_EStoveCommonResultCode_InvalidParam | 지원하지 않는 언어로 판정됨 (지원 언어 목록 확인) | x | |
| 16 | k_EStoveCommonResultCode_BaseNotInitialized | SDK가 초기화되지 않음 (Stove_Initialize() 호출 여부 확인) | x | |
| 253 | k_EStoveCommonResultCode_UnmanagedException | SDK 내부에서 알 수 없는 예외 발생 (로그 확인 후 재시도) | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
| 254 | k_EStoveCommonResultCode_ManagedException | 래퍼에서 예외 발생 시 반환값으로 전달 (로그 확인 후 재시도) | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
전체 목록: EStoveCommonResultCode
Example
using static Stove.PCSDK.V3.Base;
IStoveResult result = Stove_SetLanguage(EStoveLocale.k_EStoveLocale_Ko);
if (result.IsSuccessful)
{
// 성공 시 로직을 구현해 주세요.
}
else
{
// 실패 시 로직을 구현해 주세요.
}
Notes
- 사용이 중단(Deprecated)된 API예요. 신규 코드에서는 Stove_SetLanguageEx를 사용해야 해요.
- 이 함수는 동기 함수이며 콜백을 받지 않아요.
See Also
Stove_SetLanguageEx
종류 함수 · 모듈 Base · 버전 3.5.0
Description
PCSDK가 사용할 언어를 문자열로 설정해요. 열거값 기반의 Stove_SetLanguage는 사용이 중단(Deprecated)되었으므로, 언어 설정에는 이 함수를 사용해야 해요.
Declaration
public static IStoveResult Stove_SetLanguageEx(string language)
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
language | string | Y | 언어 정보 문자열 |
Returns
| Type | Description |
|---|---|
IStoveResult | 호출 결과. result.IsSuccessful로 성공 여부를 확인 |
Error Codes
| Code | Name | Description | Show to User | In-Game Message |
|---|---|---|---|---|
| 0 | k_EStoveCommonResultCode_Success | 성공 | x | |
| 5 | k_EStoveCommonResultCode_InvalidParam | 지원하지 않는 언어 문자열로 판정됨 (지원 언어 목록 확인) | x | |
| 16 | k_EStoveCommonResultCode_BaseNotInitialized | SDK가 초기화되지 않음 (Stove_Initialize() 호출 여부 확인) | x | |
| 253 | k_EStoveCommonResultCode_UnmanagedException | SDK 내부에서 알 수 없는 예외 발생 (로그 확인 후 재시도) | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
| 254 | k_EStoveCommonResultCode_ManagedException | 래퍼에서 예외 발생 시 반환값으로 전달 (로그 확인 후 재시도) | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
전체 목록: EStoveCommonResultCode
Example
using static Stove.PCSDK.V3.Base;
IStoveResult result = Stove_SetLanguageEx("ko");
if (result.IsSuccessful)
{
// 성공 시 로직을 구현해 주세요.
}
else
{
// 실패 시 로직을 구현해 주세요.
}
Notes
- 이 함수는 동기 함수이며 콜백을 받지 않아요.
- 열거값 기반의 Stove_SetLanguage를 대체하는 함수예요.
See Also
Stove_SetPopupDisallowed
종류 함수 · 모듈 View · 버전 3.5.0
Description
Stove_SetPopupDisallowed는 disallowedParam.PopupId로 지정한 팝업을, disallowedParam.Days로 지정한 일수 동안 다시 표시되지 않도록 로컬에 기록해요.
SDK 초기화(Stove_Initialize) 이후에 호출해야 해요.
Declaration
public static void Stove_SetPopupDisallowed(IStoveSetPopupDisallowedParam disallowedParam, OnSetPopupDisallowedCallback onFinished);
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
disallowedParam | IStoveSetPopupDisallowedParam | Y | 억제할 팝업 식별자(PopupId)와 억제 기간(Days, 일 단위)을 담은 파라미터예요. |
onFinished | OnSetPopupDisallowedCallback | Y | 처리 결과를 전달받는 콜백이에요. |
Returns
없음 (void 함수)
Callback
public delegate void OnSetPopupDisallowedCallback(IStoveCallbackResult callbackResult);
| Name | Type | Description |
|---|---|---|
callbackResult | IStoveCallbackResult | 호출 결과예요. callbackResult.Result.IsSuccessful로 성공 여부를 확인해요. |
onFinished는 1회 호출돼요. Stove_RunCallback()을 호출한 스레드에서 실행돼요.
Error Codes
| Code | Name | Description | Show to User | In-Game Message |
|---|---|---|---|---|
| 0 | k_EStoveCommonResultCode_Success | 로컬 설정 파일에 억제 정보 기록 성공 | x | |
| 1 | k_EStoveCommonResultCode_Fail | 로컬 설정 파일 쓰기 실패 (재시도 또는 로그 확인) | x | |
| 17 | k_EStoveCommonResultCode_NotInitialized | 팝업 기능이 초기화되지 않음 (Stove_Initialize 선행 호출 확인) | x | |
| 254 | k_EStoveCommonResultCode_ManagedException | 래퍼에서 예외 발생 시 콜백으로 전달 (callbackResult.Result.ExceptionMessage 로그 확인) | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
전체 목록: EStoveCommonResultCode
Example
using static Stove.PCSDK.V3.View;
var disallowedParam = new IStoveSetPopupDisallowedParam
{
PopupId = 12345,
Days = 7
};
Stove_SetPopupDisallowed(disallowedParam, (callbackResult) =>
{
if (callbackResult.Result.IsSuccessful)
{
// 성공 시 로직을 구현해 주세요.
}
else
{
// 실패 시 로직을 구현해 주세요.
}
});
Notes
- 이 함수는 화면에 표시된 팝업을 즉시 닫는 API가 아니라, 이후 지정한 기간 동안 해당 팝업이 다시 표시되지 않도록 억제하는 API예요.
- 억제 정보는 로컬 파일(
popupConfig.json)에 기록되며, 이후Stove_AutoPopup등이 팝업 목록을 필터링할 때 참조해요. - 이 API는
onDestroy콜백이 없는 단일 콜백 구조예요.
See Also
Stove_ShutdownNotification
종류 함수 · 모듈 Base · 버전 3.5.0
Description
셧다운 적용 대상 사용자에게 셧다운 알림을 콜백으로 전달해요.
이 API는 한국 전용이 아니에요. 셧다운 정책이 적용된 계정이라면 해외 사용자에게도 동작해요.
Declaration
public static void Stove_ShutdownNotification(OnShutdownNotificationCallback onFinished)
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
onFinished | OnShutdownNotificationCallback | N | 결과를 받을 콜백 |
Returns
없음
Callback
public delegate void OnShutdownNotificationCallback(IStoveCallbackResult callbackResult, IStoveShutdownInfo shutdown);
| Name | Type | Description |
|---|---|---|
callbackResult | IStoveCallbackResult | 호출 결과 |
shutdown | IStoveShutdownInfo | 셧다운 알림 정보. 알림 메시지(Msg), 메시지 노출 시간(ExposureTime, 초 단위), 셧다운까지 남은 시간(InadvanceMinutes, 분 단위)을 제공 |
이 콜백은 Stove_RunCallback()을 호출한 스레드에서 실행돼요.
Error Codes
| Code | Name | Description | Show to User | In-Game Message |
|---|---|---|---|---|
| 0 | k_EStoveCommonResultCode_Success | 성공 | x | |
| 5 | k_EStoveCommonResultCode_InvalidParam | onFinished가 null(콜백이 없어 실제로는 전달되지 않는 내부 값) (콜백 등록 여부 확인) | x | |
| 16 | k_EStoveCommonResultCode_BaseNotInitialized | SDK가 초기화되지 않음 (Stove_Initialize() 호출 여부 확인) | x | |
| 253 | k_EStoveCommonResultCode_UnmanagedException | SDK 내부에서 알 수 없는 예외 발생 (로그 확인) | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
| 254 | k_EStoveCommonResultCode_ManagedException | 래퍼에서 예외 발생 시 콜백으로 전달 (로그 확인) | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
전체 목록: EStoveCommonResultCode
Example
using static Stove.PCSDK.V3.Base;
Stove_ShutdownNotification((callbackResult, shutdown) =>
{
if (callbackResult.Result.IsSuccessful)
{
// 성공 시 로직을 구현해 주세요.
string msg = shutdown.Msg;
int inadvanceMinutes = shutdown.InadvanceMinutes;
}
else
{
// 실패 시 로직을 구현해 주세요.
}
});
Notes
- 한국 전용 API가 아니에요. 셧다운 정책이 적용된 계정이면 해외에서도 동작해요.
- 이 콜백은 1회성이 아니에요. 한 번 등록해 두면, 서버가 내려준 사전 안내 시점(예: 셧다운 30분 전, 10분 전 등)마다 그리고 실제 셧다운 시각이 되었을 때 각각 한 번씩, 서버가 지정한 안내 횟수만큼 반복 호출돼요.
See Also
Stove_StartPurchase
종류 함수 · 모듈 IAP · 버전 3.5.0
Description
startPurchaseParam.Products로 전달한 주문 상품 목록에 대해 구매 절차를 시작해요. 진행 방식은 startPurchaseParam.PurchaseParam.Operation(EStovePurchaseOperation) 값에 따라 달라져요.
k_EStovePurchaseOperation_Default: Stove Webview를 사용하지 않아요.onFinished로 전달되는IStoveStartPurchaseOutcome.TempPaymentUrl을 이용해 호출자가 직접 결제 페이지를 열어야 하며, 결제 후에는 Stove_ConfirmPurchase를 호출해 구매를 확정해야 해요.k_EStovePurchaseOperation_WithWebView: Stove 결제 페이지를 Stove Webview 안에서 열어요. 이 경우에도 결제가 끝나면 호출자가Stove_ConfirmPurchase를 호출해 구매를 확정해야 해요.k_EStovePurchaseOperation_WithWebViewAndConfirmResult: Stove 결제 페이지를 Stove Webview 안에서 열고, 결제 성공 시 SDK가 자동으로Stove_ConfirmPurchase를 호출하여 확정된 구매 결과(IsPurchased,PurchasedProducts,ChargeInfos)를onFinished로 돌려줘요. 이 경우 호출자가 별도로Stove_ConfirmPurchase를 호출할 필요가 없어요.
SDK 초기화(Stove_Initialize) 이후에 호출해야 해요.
Declaration
public static void Stove_StartPurchase(IStoveStartPurchaseParam startPurchaseParam, OnStartPurchaseCallback onFinished, OnIAPPopupDestroyCallback onDestroy)
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
startPurchaseParam | IStoveStartPurchaseParam | Y | 주문 상품 목록과 구매 동작 파라미터 |
onFinished | OnStartPurchaseCallback | Y | 구매 결과를 받을 콜백 |
onDestroy | OnIAPPopupDestroyCallback | N | 이 호출로 생성된 팝업이 모두 닫혔을 때 전달되는 콜백 |
Returns
없음
Callback
public delegate void OnStartPurchaseCallback(IStoveCallbackResult callbackResult, IStoveStartPurchaseOutcome outcome);
public delegate void OnIAPPopupDestroyCallback(IStoveCallbackResult callbackResult);
| Name | Type | Description |
|---|---|---|
callbackResult | IStoveCallbackResult | 호출 결과 |
outcome | IStoveStartPurchaseOutcome | 구매 결과. 어떤 필드가 채워지는지는 Operation 값에 따라 달라요(개요 참고) |
Stove_RunCallback()을 호출한 스레드에서 실행돼요.
onFinished는 호출 1건당 1회만 전달돼요.onDestroy는 이 호출로 생성된 팝업이 모두 닫힌 뒤 전달돼요. 웹뷰가 한 번도 생성되지 않고 종료된 경우에도PopupNotCreated(33)와 함께 1회 전달돼요.
Error Codes
| Callback | Code | Name | Description | Show to User | In-Game Message |
|---|---|---|---|---|---|
| onFinished | 0 | k_EStoveCommonResultCode_Success | 성공 | x | |
| onFinished | 17 | k_EStoveCommonResultCode_NotInitialized | 결제 기능이 초기화되지 않음 (Stove_Initialize 선행 호출) | x | |
| onFinished | 5 | k_EStoveCommonResultCode_InvalidParam | onFinished가 null이면 내부적으로 설정되지만 콜백이 없어 실제로 전달되지 않음 (참고용, 별도 처리 불필요) | x | |
| onFinished | 80 | k_EStoveCommonResultCode_ParameterLengthExceeded | ServiceTxnNo가 50자 초과, 또는 ExtraData가 500자 초과 (길이 제한에 맞게 값 조정) | O | 결제 정보가 유효하지 않아 결제를 진행할 수 없습니다. 다시 시도해 주세요. [확인] |
| onFinished | 81 | k_EStoveCommonResultCode_InvalidJsonString | ExtraData가 비어있지 않은데 유효한 JSON이 아님 (ExtraData 형식 확인) | O | 결제 정보가 유효하지 않아 결제를 진행할 수 없습니다. 다시 시도해 주세요. [확인] |
| onFinished | 503 | k_EStoveResultCode_InvalidOrderProductInformation | 주문 상품 중 Quantity <= 0 또는 SalePrice < 0인 항목 존재 (주문 상품 값 확인) | O | 결제 정보가 유효하지 않아 결제를 진행할 수 없습니다. 다시 시도해 주세요. [확인] |
| onFinished | 252 | k_EStoveCommonResultCode_NotImplemented | PurchaseParam.Operation 값이 알 수 없는 값 (EStovePurchaseOperation 값 중 하나로 지정) | x | |
| onFinished | 60 | k_EStoveCommonResultCode_ViewUiNotInitialized | 웹뷰 결제창을 열어야 하는데 View UI가 초기화되지 않음 (SDK 팀 문의) | x | |
| onFinished | 65 | k_EStoveCommonResultCode_WebviewCloseAllFail | 새 결제 웹뷰를 열기 전 기존 웹뷰 정리 실패 (재시도) | x | |
| onFinished | 62 | k_EStoveCommonResultCode_WebviewCreateFail | 결제 웹뷰 생성 실패 (재시도) | x | |
| onFinished | 63 | k_EStoveCommonResultCode_WebviewLoadUrlFail | 결제 웹뷰의 URL 로드 실패 (재시도) | x | |
| onFinished | 34 | k_EStoveCommonResultCode_WebviewClosedBeforeComplete | WithWebViewAndConfirmResult 동선에서 결제 완료 통지 수신 전 웹뷰가 닫힘 (사용자에게 재구매 안내) | O | 구매가 정상적으로 완료되지 않았습니다. 다시 시도해 주세요. [확인] |
| onFinished | 254 | k_EStoveCommonResultCode_ManagedException | 래퍼에서 예외 발생 시 콜백으로 전달 (ExceptionMessage 로깅) | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
| onFinished | 253 | k_EStoveCommonResultCode_UnmanagedException | 알 수 없는 예외 발생 (로그 확인 후 SDK 팀 문의) | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
| onDestroy | 33 | k_EStoveCommonResultCode_PopupNotCreated | 웹뷰가 한 번도 생성되지 않고 종료된 모든 조기 실패 경로에서 1회 전달 (무시해도 됨) | x | |
| onDestroy | 66 | k_EStoveCommonResultCode_WebviewCloseFail | 웹뷰 정상 종료 시 내부 close 처리 실패 (참고용 로깅) | x |
전체 목록: EStoveCommonResultCode, EStoveResultCode
Example
using static Stove.PCSDK.V3.IAP;
var startPurchaseParam = new IStoveStartPurchaseParam
{
Products = new[]
{
new IStoveOrderProductParam { ProductId = productId, SalePrice = salePrice, Quantity = 1 }
},
PurchaseParam = new IStovePurchaseParam
{
Operation = EStovePurchaseOperation.k_EStovePurchaseOperation_Default
}
};
Stove_StartPurchase(startPurchaseParam,
(callbackResult, outcome) =>
{
if (callbackResult.Result.IsSuccessful)
{
// 성공 시 로직을 구현해 주세요.
// Operation == Default 인 경우 outcome.TempPaymentUrl 로 결제 페이지를 열고,
// 결제 완료 후 Stove_ConfirmPurchase() 를 호출해 구매를 확정해야 합니다.
long txnMasterNo = outcome.TxnMasterNo;
}
else
{
// 실패 시 로직을 구현해 주세요.
}
},
(callbackResult) =>
{
// 구매 과정에서 열린 팝업이 모두 닫혔을 때 로직을 구현해 주세요.
});
Notes
- 이 함수는 비동기 함수이며 결과는
onFinished콜백으로만 전달돼요. Operation이Default또는WithWebView로 시작한 구매는 반드시 Stove_ConfirmPurchase를 호출해 확정해야 해요.WithWebViewAndConfirmResult는 SDK가 자동으로 확정을 처리해요.outcome.PurchaseProgress(EStovePurchaseProgress) 값으로 결제창을 직접 띄워야 하는지 판단할 수 있어요.onDestroy의PopupNotCreated(33)는 신규 C# 표면에서 필터링 없이 그대로 전달돼요(구 인터페이스는 이 값을 삼키고onDestroy를 호출하지 않아요). 33을 받으면 별도 처리 없이 무시해도 돼요.IStoveStartPurchaseOutcome은 구 인터페이스의PurchaseResult계열 타입에서 이름이 바뀌었어요.
See Also
Stove_Uninitialize
종류 함수 · 모듈 Base · 버전 3.5.0
Description
SDK를 종료해요. 게임을 끝낼 때 Stove_Initialize()와 짝을 이루어 호출해야 해요.
Declaration
public static IStoveResult Stove_Uninitialize()
Parameters
없음
Returns
| Type | Description |
|---|---|
IStoveResult | 호출 결과. result.IsSuccessful로 성공 여부를 확인 |
Error Codes
| Code | Name | Description | Show to User | In-Game Message |
|---|---|---|---|---|
| 0 | k_EStoveCommonResultCode_Success | 성공 | x | |
| 16 | k_EStoveCommonResultCode_BaseNotInitialized | 초기화되지 않은 상태에서 호출됨(이 경우에도 이후 정리 루틴은 계속 진행됨) (Stove_Initialize() 호출 여부 확인) | x | |
| 253 | k_EStoveCommonResultCode_UnmanagedException | SDK 내부에서 알 수 없는 예외 발생 (로그 확인) | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
| 254 | k_EStoveCommonResultCode_ManagedException | 래퍼에서 예외 발생 시 반환값으로 전달 (로그 확인) | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
전체 목록: EStoveCommonResultCode
Example
using static Stove.PCSDK.V3.Base;
IStoveResult result = Stove_Uninitialize();
if (result.IsSuccessful)
{
// 성공 시 로직을 구현해 주세요.
}
else
{
// 실패 시 로직을 구현해 주세요.
}
Notes
- 종료가 진행되는 동안 대기 중이던 콜백 큐는 폐기 모드로 drain되어, 대기 중이던 사용자 delegate는 호출되지 않아요.
- API 이름은
Stove_Uninitialize이며,Stove_UnInitialize(대문자 I)가 아니에요.
See Also
Stove_VerifyIdentificationPopup
종류 함수 · 모듈 View · 버전 3.5.0
Description
Stove_VerifyIdentificationPopup은 본인인증 팝업을 웹뷰로 표시해요. popupParam.CompareIdentifier가 true이면 인증된 식별자를 로그인한 사용자와 비교해요.
SDK 초기화(Stove_Initialize) 이후에 호출해야 해요.
한국(
kr) 이외의 GDS 국가에서 호출하면k_EStoveCommonResultCode_NotSupportedCountry(31)로 실패해요. 웹뷰가 생성되지 않으므로onDestroy에도k_EStoveCommonResultCode_PopupNotCreated(33)가 함께 전달돼요.
Declaration
public static void Stove_VerifyIdentificationPopup(IStoveVerifyIdentificationPopupParam popupParam, OnViewPopupCallback onFinished, OnVerifyIdentificationPopupDestroyCallback onDestroy);
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
popupParam | IStoveVerifyIdentificationPopupParam | Y | 웹뷰 표시 모드(WebViewMode)와 인증된 식별자를 로그인 사용자와 비교할지 여부(CompareIdentifier)를 담은 파라미터예요. |
onFinished | OnViewPopupCallback | Y | 팝업 표시가 완료되었을 때 호출되는 콜백이에요. |
onDestroy | OnVerifyIdentificationPopupDestroyCallback | N | 팝업 웹뷰가 완전히 파괴되었을 때 호출되는 콜백이에요. 발급된 SIM 키를 함께 전달해요. |
Returns
없음 (void 함수)
Callback
public delegate void OnViewPopupCallback(IStoveCallbackResult callbackResult);
public delegate void OnVerifyIdentificationPopupDestroyCallback(IStoveCallbackResult callbackResult, IStoveVerifyIdentificationPopupDestroyInfo info);
| Name | Type | Description |
|---|---|---|
callbackResult | IStoveCallbackResult | 호출 결과예요. callbackResult.Result.IsSuccessful로 성공 여부를 확인해요. |
info | IStoveVerifyIdentificationPopupDestroyInfo | info.SimKey에 인증 성공 시 발급된 SIM 키가 담겨요. 인증 실패 시 빈 문자열("")이에요. |
onFinished는 팝업 표시가 확정된 시점에 1회 호출돼요. onDestroy는 웹뷰가 화면에서 완전히 사라진 시점에 1회 호출돼요. 두 콜백 모두 Stove_RunCallback()을 호출한 스레드에서 실행돼요.
Error Codes
onFinished
| Code | Name | Description | Show to User | In-Game Message |
|---|---|---|---|---|
| 0 | k_EStoveCommonResultCode_Success | 성공 | x | |
| 17 | k_EStoveCommonResultCode_NotInitialized | 팝업 기능이 초기화되지 않음 (Stove_Initialize 선행 호출 확인) | x | |
| 31 | k_EStoveCommonResultCode_NotSupportedCountry | 로그인한 사용자의 GDS 국가가 한국(kr)이 아님 (한국 외 국가에서는 이 API를 호출하지 않도록 처리) | x | |
| 60 | k_EStoveCommonResultCode_ViewUiNotInitialized | 팝업 UI 서브시스템이 초기화되지 않음(정상 흐름에서는 발생하지 않는 방어적 코드) (재현되면 SDK 지원팀 문의) | x | |
| 65 | k_EStoveCommonResultCode_WebviewCloseAllFail | 팝업 생성 전 기존 웹뷰 일괄 닫기 실패 (로그 확인) | x | |
| 62 | k_EStoveCommonResultCode_WebviewCreateFail | 웹뷰 생성 실패 (재시도 또는 로그 확인) | x | |
| 63 | k_EStoveCommonResultCode_WebviewLoadUrlFail | 웹뷰 URL 로드 실패 (네트워크 상태 확인 후 재시도) | x | |
| 67 | k_EStoveCommonResultCode_NoPopupData | 서버 조회 결과 표시할 팝업이 0건 (정상 종료로 처리) | O | 팝업 설정 정보가 존재하지 않아 표시할 창이 없습니다. [확인] |
| 254 | k_EStoveCommonResultCode_ManagedException | 래퍼에서 예외 발생 시 콜백으로 전달 (callbackResult.Result.ExceptionMessage 로그 확인) | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
onDestroy
| Code | Name | Description | Show to User | In-Game Message |
|---|---|---|---|---|
| 0 | k_EStoveCommonResultCode_Success | 웹뷰 정상 종료 | x | |
| 66 | k_EStoveCommonResultCode_WebviewCloseFail | 웹뷰 닫기 실패 (로그 확인) | x | |
| 33 | k_EStoveCommonResultCode_PopupNotCreated | 웹뷰가 생성되지 않고 조기 종료됨(국가 제한 포함, 내부 정리 신호). 이 경우 info.SimKey는 빈 문자열이에요. (별도 처리 불필요) | x | |
| 254 | k_EStoveCommonResultCode_ManagedException | 래퍼에서 예외 발생 시 콜백으로 전달 (callbackResult.Result.ExceptionMessage 로그 확인) | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
전체 목록: EStoveCommonResultCode
Example
using static Stove.PCSDK.V3.View;
var popupParam = new IStoveVerifyIdentificationPopupParam
{
WebViewMode = EStoveWebViewMode.k_EStoveWebViewMode_Internal,
CompareIdentifier = true
};
Stove_VerifyIdentificationPopup(popupParam,
onFinished: (callbackResult) =>
{
if (callbackResult.Result.IsSuccessful)
{
// 성공 시 로직을 구현해 주세요.
}
else
{
// 실패 시 로직을 구현해 주세요.
}
},
onDestroy: (callbackResult, info) =>
{
if (callbackResult.Result.IsSuccessful)
{
// info.SimKey를 필요한 곳에 사용해 주세요.
}
else
{
// 실패 시 로직을 구현해 주세요. (코드 33은 무시해도 됩니다.)
}
});
Notes
- 이 API는 한국 전용이에요. 로그인한 사용자의 GDS 국가가 한국이 아니면 항상
NotSupportedCountry(31)로 실패해요. 33(PopupNotCreated)은onDestroy전용 코드이며onFinished에는 절대 전달되지 않아요.- 다른 팝업 API들과 달리
onDestroy콜백 타입이OnVerifyIdentificationPopupDestroyCallback으로,IStoveVerifyIdentificationPopupDestroyInfo인자를 추가로 전달해요.
See Also
Stove_VietnamAgeRatingNotification
종류 함수 · 모듈 Base · 버전 3.5.0
Description
베트남 연령 등급 안내 정보를 콜백으로 전달해요. 베트남 전용 API예요.
1회성 콜백이에요. 렌더링이 가능한 시점 이후에 호출해야 해요.
Declaration
public static void Stove_VietnamAgeRatingNotification(OnVietnamAgeRatingNotificationCallback onFinished)
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
onFinished | OnVietnamAgeRatingNotificationCallback | N | 결과를 받을 콜백 |
Returns
없음
Callback
public delegate void OnVietnamAgeRatingNotificationCallback(IStoveCallbackResult callbackResult, IStoveVietnamAgeRatingInfo ageRatingInfo);
| Name | Type | Description |
|---|---|---|
callbackResult | IStoveCallbackResult | 호출 결과 |
ageRatingInfo | IStoveVietnamAgeRatingInfo | 연령 등급 오버레이 정보. 오버레이 표시 상태(OverlayMode), 오버레이 색상 종류(OverlayType, 0=black·1=white), 오버레이 크기(OverlayScale, 0.0 ~ 1.0), 오버레이 투명도(OverlayOpacity, 0.0 ~ 1.0), 게임 등급(AgeRating, 0=전체이용가·12=12세·16=16세·18=18세), 안내 메시지(Msg), 표시 위치 X · Y(DisplayPositionX / DisplayPositionY, 화면 좌상단 기준 0.0 ~ 1.0), 폰트 선택용 언어 코드(Language)를 제공 |
이 콜백은 Stove_RunCallback()을 호출한 스레드에서 실행돼요. 1회성 콜백이며, 렌더링이 가능한 시점 이후에 호출해야 해요.
Error Codes
| Code | Name | Description | Show to User | In-Game Message |
|---|---|---|---|---|
| 0 | k_EStoveCommonResultCode_Success | 성공 | x | |
| 5 | k_EStoveCommonResultCode_InvalidParam | onFinished가 null(콜백이 없어 실제로는 전달되지 않는 내부 값) (콜백 등록 여부 확인) | x | |
| 16 | k_EStoveCommonResultCode_BaseNotInitialized | SDK가 초기화되지 않음 (Stove_Initialize() 호출 여부 확인) | x | |
| 31 | k_EStoveCommonResultCode_NotSupportedCountry | 로그인 사용자의 GDS 국가가 베트남(vn)이 아님 (국가별 분기 처리) | x | |
| 253 | k_EStoveCommonResultCode_UnmanagedException | SDK 내부에서 알 수 없는 예외 발생 (로그 확인) | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
| 254 | k_EStoveCommonResultCode_ManagedException | 래퍼에서 예외 발생 시 콜백으로 전달 (로그 확인) | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
전체 목록: EStoveCommonResultCode
Example
using static Stove.PCSDK.V3.Base;
Stove_VietnamAgeRatingNotification((callbackResult, ageRatingInfo) =>
{
if (callbackResult.Result.IsSuccessful)
{
// 성공 시 로직을 구현해 주세요.
int overlayMode = ageRatingInfo.OverlayMode;
string msg = ageRatingInfo.Msg;
}
else
{
// 실패 시 로직을 구현해 주세요.
}
});
Notes
- 베트남 전용 API예요.
- 1회성 콜백이며, 렌더링이 가능한 시점 이후에 호출해야 해요.
See Also
Stove_VietnamOverimmersionNotification
종류 함수 · 모듈 Base · 버전 3.5.0
Description
베트남 과몰입 방지 안내 정보를 콜백으로 전달해요. 베트남 전용 API예요.
1회성 콜백이에요. 렌더링이 가능한 시점 이후에 호출해야 해요.
Declaration
public static void Stove_VietnamOverimmersionNotification(OnVietnamOverimmersionNotificationCallback onFinished)
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
onFinished | OnVietnamOverimmersionNotificationCallback | N | 결과를 받을 콜백 |
Returns
없음
Callback
public delegate void OnVietnamOverimmersionNotificationCallback(IStoveCallbackResult callbackResult, IStoveVietnamOverimmersionInfo overimmersionInfo);
| Name | Type | Description |
|---|---|---|
callbackResult | IStoveCallbackResult | 호출 결과 |
overimmersionInfo | IStoveVietnamOverimmersionInfo | 과몰입 방지 오버레이 정보. 오버레이 표시 상태(OverlayMode), 오버레이 색상 종류(OverlayType, 0=black·1=white), 오버레이 크기(OverlayScale, 0.0 ~ 1.0), 오버레이 투명도(OverlayOpacity, 0.0 ~ 1.0), 게임 등급(AgeRating, 0=전체이용가·12=12세·16=16세·18=18세), 경고 메시지(Msg), 서식 태그(<b>, <color=#RRGGBBAA> 등)가 포함된 서식 메시지(StyledMsg), 누적 게임 시간(ElapsedMinutes, 분 단위), 메시지 노출 시간(ExposureTime, 초 단위), 확장 애니메이션 시간(ExpandAnimationTime, 초 단위), 표시 위치 X · Y(DisplayPositionX / DisplayPositionY, 화면 좌상단 기준 0.0 ~ 1.0), 폰트 선택용 언어 코드(Language)를 제공 |
이 콜백은 Stove_RunCallback()을 호출한 스레드에서 실행돼요. 1회성 콜백이며, 렌더링이 가능한 시점 이후에 호출해야 해요.
Error Codes
| Code | Name | Description | Show to User | In-Game Message |
|---|---|---|---|---|
| 0 | k_EStoveCommonResultCode_Success | 성공 | x | |
| 5 | k_EStoveCommonResultCode_InvalidParam | onFinished가 null(콜백이 없어 실제로는 전달되지 않는 내부 값) (콜백 등록 여부 확인) | x | |
| 16 | k_EStoveCommonResultCode_BaseNotInitialized | SDK가 초기화되지 않음 (Stove_Initialize() 호출 여부 확인) | x | |
| 31 | k_EStoveCommonResultCode_NotSupportedCountry | 로그인 사용자의 GDS 국가가 베트남(vn)이 아님 (국가별 분기 처리) | x | |
| 253 | k_EStoveCommonResultCode_UnmanagedException | SDK 내부에서 알 수 없는 예외 발생 (로그 확인) | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
| 254 | k_EStoveCommonResultCode_ManagedException | 래퍼에서 예외 발생 시 콜백으로 전달 (로그 확인) | O | 일시적으로 문제가 발생했습니다. 다시 시도해 주세요. [확인] |
전체 목록: EStoveCommonResultCode
Example
using static Stove.PCSDK.V3.Base;
Stove_VietnamOverimmersionNotification((callbackResult, overimmersionInfo) =>
{
if (callbackResult.Result.IsSuccessful)
{
// 성공 시 로직을 구현해 주세요.
string styledMsg = overimmersionInfo.StyledMsg;
int elapsedMinutes = overimmersionInfo.ElapsedMinutes;
}
else
{
// 실패 시 로직을 구현해 주세요.
}
});
Notes
- 베트남 전용 API예요.
- 1회성 콜백이며, 렌더링이 가능한 시점 이후에 호출해야 해요.
See Also
StoveReadOnlyArrayEnumerator
종류 구조체 · 모듈 Base · 버전 3.5.0
Description
SDK 의 읽기 전용 목록 래퍼 구조체(IStoveProductList, IStoveInventoryList, IStoveShopCategoryList 등)가 공유하는 boxing 없는 배열 열거자예요. IEnumerator<T> 를 구현해 foreach 순회를 지원해요.
class Base 안이 아니라 namespace Stove.PCSDK.V3 최상위(네임스페이스 레벨)에 선언되어 있어, 특정 모듈 클래스에 속하지 않고 여러 모듈의 목록형 타입이 공통으로 사용해요. 게임 코드가 직접 생성하지 않으며, 목록형 타입의 GetEnumerator() 가 내부적으로 반환해요.
Declaration
public struct StoveReadOnlyArrayEnumerator<T> : IEnumerator<T>
{
public T Current { get; }
public bool MoveNext();
public void Reset();
public void Dispose();
}
Members
| Name | Type | Access | Description |
|---|---|---|---|
Current | T | 읽기 (프로퍼티) | 열거자가 현재 가리키는 요소예요. |
MoveNext | bool | 메서드 | 다음 요소로 이동해요. 이동에 성공하면 true, 배열의 끝에 도달하면 false 를 반환해요. |
Reset | void | 메서드 | 열거자를 초기 위치(요소를 가리키기 전)로 되돌려요. |
Dispose | void | 메서드 | IDisposable 구현이에요. 별도로 해제할 리소스가 없어 아무 동작도 하지 않아요. |
Example
using static Stove.PCSDK.V3.Base;
using static Stove.PCSDK.V3.IAP;
void OnFetchProductsCallback(IStoveCallbackResult callbackResult, IStoveProductList products)
{
if (callbackResult.Result.IsSuccessful)
{
// IStoveProductList.GetEnumerator() 가 StoveReadOnlyArrayEnumerator<IStoveProduct> 를 반환하므로
// 게임 코드는 foreach 로 목록을 그대로 순회할 수 있습니다.
foreach (IStoveProduct product in products)
{
// 각 항목을 처리하는 로직을 구현해 주세요.
}
}
else
{
// 실패 시 로직을 구현해 주세요.
}
}
Notes
- 게임 코드가 이 타입을 직접 다룰 일은 거의 없어요.
IStoveProductList,IStoveInventoryList,IStoveShopCategoryList등IReadOnlyList<T>를 구현하는 목록형 타입에foreach를 사용하면 내부적으로 이 열거자가 쓰예요. - 내부 배열이
null이면 빈 시퀀스로 취급해요(MoveNext()가 즉시 false 를 반환). - 이 타입에는 대응하는
EStoveBaseTypeKind값이 없어요. 특정 기능의 데이터/파라미터 타입이 아니라 여러 모듈의 목록형 타입이 공유하는 C# 전용 헬퍼이기 때문이에요.
See Also
- 없음