- Last Updated
PC SDK Unity Reference
Based on SDK version 3.5.0. 100 items combined in alphabetical order.
Contents
Basic Integration Guide
Kind Integration Guide · Module Base · Version 3.5.0
Description
The C# API in this guide is a managed wrapper for calling all SDK functions in a .NET (Mono / IL2CPP) environment. Internally, it calls C flat functions in the native DLL via P/Invoke, but the caller only needs to deal with managed types (readonly struct, struct, enum, delegate).
Compatibility: C# 7.3 (.NET Framework 4.6, Unity 2019 Mono) or later.
| Category | Form |
|---|---|
| SDK API Methods | public static methods (static partial class per module) |
| Results / Data Types | readonly struct — Immutable, get-only property, automatically managed by the garbage collector |
| Parameter Type | General struct — get/set property; the caller must fill it in and pass it directly |
| Enumeration | enum (value prefix k_E...) |
| Callback | delegate (passing context via lambda capture) |
Declaration Forms
All types are defined under the Stove.PCSDK.V3 namespace, and each module has static partial class (Base, IAP, Log, PCBang, View). Methods, structures, callback delegates, and enumerations are declared together within the same class. The GamingServices module is not provided in the new interface.
using Stove.PCSDK.V3;
// Or use static imports on a per-module basis:
using static Stove.PCSDK.V3.Base;
using static Stove.PCSDK.V3.IAP;
If you use using static, you can call it directly, like Stove_Initialize(), without a class prefix.
Naming Rules
| Category | Pattern | Example |
|---|---|---|
| SDK Methods | Stove_<Method> (Method without a module token. However, the PC Bang module retains Stove_PCBang<Method>) | Stove_Initialize, Stove_StartPurchase, Stove_FetchProducts, Stove_PCBangLogin |
| Results / Data Structures | IStove<Name> | IStoveResult, IStoveCallbackResult, IStoveUser |
| Parameter Structure | IStove<Name>Param or IStove<Name>Params | IStoveInitializeParam, IStoveSetGameProfileParam |
| Callback delegate | On<Action>Callback | OnRestartAppIfNecessaryCallback, OnAccessTokenRenewedCallback |
| Enumeration | EStove<Module><Name> | EStoveBaseMethodCode, EStoveCommonResultCode, EStoveLocale |
| Enumeration values | k_E<Enum><Value> | k_EStoveCommonResultCode_Success, k_EStoveLocale_Ko |
Memory Lifetime
All types in this guide are managed (C#) types and are handled by the garbage collector. Unlike with the Native API, there is no need to explicitly call Destroy().
| Item | C# | Native (ref.) |
|---|---|---|
| Results / Data Objects | readonly struct Value copying, GC management | IStove* Pointer, Caller Destroy |
| Parameter Object | General struct: Create it directly and then pass in the value | Created by the Factory function; destroyed by the caller |
| Callback Results | IStoveCallbackResult (struct), automatically destroyed after the callback ends | IStoveCallbackResult* SDK Ownership |
| Passing a Callback Context | Lambda Capture | void* userData Parameter |
The asynchronous methods of this API do not accept a separate userData parameter. Please pass the game-side context to be used within the callback via lambda capture ((cr, t) => { myCtx.Apply(t); }).
Since all parameters passed to the callback are managed structs (value copies), they can be captured and used safely even after the callback has finished. The "valid only during the callback" restriction of the Native API does not apply to this guide.
Initialization Order
- Create the
IStoveRestartAppIfNecessaryParamstructure and setEnvironment,GameId,AppKey,WaitTimeMilliSec,LaunchStoveLauncher, andPlatformName. (IStoveRestartAppIfNecessaryParam) - Calls Stove_RestartAppIfNecessary(restartParam, onFinished) — asynchronously. The callback is dispatched when
Stove_RunCallback()is called. - In the game's main loop (main/UI thread), it begins calling Stove_RunCallback() every frame. This loop must start running immediately after the call to
Stove_RestartAppIfNecessary()so that the callback in (2) above is dispatched, leading to the initialization in (4). - Create the
IStoveInitializeParamstructure in theoutcome.IsRestartRequired == falsebranch of the callback. To use View, also setMainWndHandle; to use IAP, also setShopKey. (IfIsRestartRequired == true, the SDK handles relaunch via the launcher, so the current process is terminated. IStoveInitializeParam) - Calls Stove_Initialize(initParam) in the same block — synchronously, immediately returns
IStoveResult. Checks for success usingresult.IsSuccessful. - Call Stove_Uninitialize() upon termination.
The new interface does not require module-specific initialization or termination. Stove_Initialize() All features—including payment, pop-ups, PC Bang, and logs—operate together in a single step.
using Stove.PCSDK.V3;
using static Stove.PCSDK.V3.Base;
// 1) Check the launcher / Create and configure the restart parameter structure
var restartParam = new IStoveRestartAppIfNecessaryParam
{
Environment = "LIVE", // "QA" / "SANDBOX" / "LIVE"
GameId = "my_game_id",
AppKey = "my_app_key",
WaitTimeMilliSec = 5000,
LaunchStoveLauncher = true,
PlatformName = "stove",
};
// 2) Check if the launcher is running (asynchronous). The callback is dispatched when Stove_RunCallback() is called.
Stove_RestartAppIfNecessary(restartParam, (callbackResult, outcome) =>
{
if (outcome.IsRestartRequired)
return; // The SDK is being relaunched via the launcher; the current process has been terminated.
// 4) SDK Initialization (Synchronous). View and IAP are also initialized based on the MainWndHandle and ShopKey settings in initParam.
var initParam = new IStoveInitializeParam
{
// To use View, set MainWndHandle; to use IAP, set ShopKey as well.
// MainWndHandle = myWindowHandle,
// ShopKey = "my_shop_key",
};
var result = Stove_Initialize(initParam);
if (result.IsSuccessful)
{
// Initialization complete; SDK is now available
}
else
{
// Error Handling: result.ResultCode, result.ExceptionMessage
}
});
// 3) Execute the callback on every frame / every tick (main / UI thread)
// This loop must begin immediately after the call to `Stove_RestartAppIfNecessary()` so that the callback in (2) above is dispatched, leading to the initialization in (4).
void OnUpdate()
{
Stove_RunCallback();
}
// 5) Upon completion
Stove_Uninitialize();
Callback Execution Rules
- The callbacks for all asynchronous methods run on the thread (main or UI thread) where
Stove_RunCallback()orStove_RunCallbackWithTimeout(timeoutMillisec)is called. They do not run on an internal SDK thread. - The callback signature is of the form
delegate void On<Action>Callback(IStoveCallbackResult callbackResult, ...), and success is determined bycallbackResult.Result.IsSuccessful. - One-time callbacks (such as
Stove_VietnamAgeRatingNotificationandStove_VietnamOverimmersionNotification) must be called after rendering is possible. Register and call them after the first frame has been rendered following the start of the game. - Delegates registered with repeatable callbacks (such as
Stove_AccessTokenRenewedandStove_OverImmersionNotification) are referenced until the SDK is closed or the registration is canceled. Be mindful of the lifetime of the captured objects. - The
onFinishedcallback for a one-time asynchronous method is a required parameter. If it is not specified, ak_EStoveCommonResultCode_InvalidParam(5) error occurs.
Common Interface
For types shared by all modules, we only provide links to the respective documents. Please refer to each document for details.
- IStoveResult — The result of calling a synchronous method. It is an immutable struct that contains the method code, result code, and managed exception message.
- IStoveCallbackResult — This is the result passed via an asynchronous callback. It contains both
IStoveResultand external error information (such as HTTP status codes).
| Type | Document |
|---|---|
IStoveResult | IStoveResult |
IStoveCallbackResult | IStoveCallbackResult |
C# does not have a public type corresponding to the native IStoveTypeBase. Runtime type identification is used only during internal marshaling (interoperability with native DLLs) and is not exposed on the API surface. For more information, see the EStoveBaseTypeKind documentation.
Notes
Stove_RestartAppIfNecessary()must be called beforeStove_Initialize(), and to receive its callback,Stove_RunCallback()must be running in the game loop immediately after the call.Stove_Initialize()is a synchronous method, so it does not accept a callback, but it must be called from within the callback ofStove_RestartAppIfNecessary()(theoutcome.IsRestartRequired == falsebranch).- The asynchronous methods of this API do not accept the
userDataparameter. Please pass the context to be used within the callback via lambda capture.
See Also
| Document | Content |
|---|---|
| IStoveRestartAppIfNecessaryOutcome | Stove_RestartAppIfNecessary() Result passed to the callback (IsRestartRequired) |
EStoveBaseMethodCode
Kind Enum · Module Base · Version 3.5.0
Description
Identifies which SDK method generated this result based on the value returned by IStoveResult.MethodCode. It is used for logging and error routing.
Declaration
public enum EStoveBaseMethodCode
{
k_EStoveBaseMethodCode_Invalid = -1,
k_EStoveBaseMethodCode_BaseInitialize = 1,
// ... See the table of enumerated values below
k_EStoveBaseMethodCode_GetTranslateLanguage = 119,
k_EStoveBaseMethodCode_Max = 0x7fffffff
}
Enum Values
Lifecycle / Versioning
| Code | Name | Description |
|---|---|---|
| -1 | k_EStoveBaseMethodCode_Invalid | Not used |
| 1 | k_EStoveBaseMethodCode_BaseInitialize | Stove_Initialize |
| 2 | k_EStoveBaseMethodCode_BaseUninitialize | Stove_Uninitialize |
| 5 | k_EStoveBaseMethodCode_BaseGetVersion | Stove_GetVersion |
| — | 6 ~ 63 | Not in use (reserved section) |
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 | Not used (deprecated internal method) |
| 72 | k_EStoveBaseMethodCode_SetGameProfile | Stove_SetGameProfile |
| 73 | k_EStoveBaseMethodCode_GetGds | Stove_GetGds |
| 74 | k_EStoveBaseMethodCode_GetSignin | Stove_GetSignin |
| 75 | k_EStoveBaseMethodCode_RestartAppIfNecessary | Stove_RestartAppIfNecessary (Scheduled for disposal) |
| 76 | k_EStoveBaseMethodCode_RestartAppIfNecessaryAsync | Asynchronous processing path for Stove_RestartAppIfNecessary |
| 77 | k_EStoveBaseMethodCode_OpenExternalUrl | Stove_OpenExternalUrl |
| 78 | k_EStoveBaseMethodCode_GetCloudSavingPath | Stove_GetCloudSavingPath — Exclusive to StoreIndi |
| 79 | k_EStoveBaseMethodCode_VietnamAgeRatingNotification | Stove_VietnamAgeRatingNotification |
| 80 | k_EStoveBaseMethodCode_VietnamOverimmersionNotification | Stove_VietnamOverimmersionNotification |
| 81 | k_EStoveBaseMethodCode_CloseAllPopups | Stove_CloseAllPopups (Single binary integration — Closes both the IAP and View pop-ups) |
| — | 82 ~ 95 | Not in use (reserved section) |
Private getters (private getters exposed to other SDK modules—not exposed to the game)
| Code | Name | Description |
|---|---|---|
| 115 | k_EStoveBaseMethodCode_GetEnvPrivate | Private getter — For use by other SDK modules only; not exposed to the game |
| 116 | k_EStoveBaseMethodCode_GetGameIdPrivate | Private getter — For use by other SDK modules only; not exposed to the game |
| 117 | k_EStoveBaseMethodCode_GetMemberNoPrivate | Private getter — For use by other SDK modules only; not exposed to the game |
| 118 | k_EStoveBaseMethodCode_GetPublicIp | Private getter — For use by other SDK modules only; not exposed to the game |
| 119 | k_EStoveBaseMethodCode_GetTranslateLanguage | Private getter — For use by other SDK modules only; not exposed to the game |
Other
| Code | Name | Description |
|---|---|---|
| — | 120 ~ 0x7ffffffe | Not in use (reserved section) |
| 0x7fffffff | k_EStoveBaseMethodCode_Max | Not used |
Values whose names contain Internal (3, 4, 96–108, 110–114) are excluded from the table. 109 is a reserved number that appears in the source without a name, accompanied only by a "Deprecated" comment.
Example
using static Stove.PCSDK.V3.Base;
IStoveResult result = Stove_Initialize();
if (result.MethodCode == (uint)EStoveBaseMethodCode.k_EStoveBaseMethodCode_BaseInitialize)
{
// Please implement logic to verify that this result was generated by a call to `Stove_Initialize()`.
}
Notes
- The code for the "Internal" methods starting with line 96 is used for internal SDK operations, such as reporting playtime, configuring the server, and processing tokens, and does not correspond to any APIs that can be called directly from the game.
- The private getters numbered 115–119 were included in the table because their names do not contain
Internal, but they are private APIs exposed only to other SDK modules and are not available in the game. - Since
IStoveResult.MethodCodeis of typeuint, it is cast to(uint)EStoveBaseMethodCode.k_...when compared to this enumeration value. - In the previous version, there was no underscore in the value name (
k_EStoveBaseMethodCodeBaseInitialize). In the current source, an underscore is inserted between the enumeration name and the value name, as ink_EStoveBaseMethodCode_BaseInitialize.
Changelog
| Version | Change |
|---|---|
| 3.5.0 | First Published |
See Also
EStoveBaseTypeKind
Kind Enum · Module Base · Version 3.5.0
Description
This is the value that identifies concrete type in the SDK structure. In the new flat C interface, it is used to request a specific parameter object with Stove_CreateParam() and to identify the runtime type with IStoveTypeBase::GetTypeKind().
The C# interface does not have a public function corresponding to Stove_CreateParam(). Parameter structures such as IStoveInitializeParam and IStoveSetGameProfileParam are created directly by the game code as new IStoveXxx { ... }, and this enumeration is used only internally by the SDK during the marshaling process (interoperability with native DLLs).
The value range is 0 to 999.
Declaration
public enum EStoveBaseTypeKind
{
k_EStoveBaseTypeKind_Invalid = -1,
k_EStoveBaseTypeKind_Base = 0,
// ... See the table of enumerated values below
k_EStoveBaseTypeKind_SetGameProfileParam = 502,
k_EStoveBaseTypeKind_Max = 0x7fffffff,
}
Enum Values
Result / Data types (returned by the SDK or passed via callback)
| Code | Name | Description |
|---|---|---|
| -1 | k_EStoveBaseTypeKind_Invalid | Not used |
| 0 | k_EStoveBaseTypeKind_Base | This is an internal type. There is no corresponding public struct in the C# interface. |
| 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 | Not used (reserved range between the result/data type and the parameter type range) |
Parameter types (used internally for parameter marshaling)
| Code | Name | Description |
|---|---|---|
| 500 | k_EStoveBaseTypeKind_RestartAppIfNecessaryParam | IStoveRestartAppIfNecessaryParam |
| 501 | k_EStoveBaseTypeKind_InitializeParam | IStoveInitializeParam |
| 502 | k_EStoveBaseTypeKind_SetGameProfileParam | IStoveSetGameProfileParam |
| — | 503 ~ 0x7ffffffe | Not in use (reserved section) |
| 0x7fffffff | k_EStoveBaseTypeKind_Max | Not used |
Example
// The C# game code does not handle this enumeration directly.
// Parameters use value types that are created directly, as shown below.
IStoveSetGameProfileParam gameProfileParam = new IStoveSetGameProfileParam
{
WorldId = "world_01",
CharacterNo = 123456789L,
};
Notes
- In the new flat C interface, this enumeration is used directly in the
Stove_CreateParam()call, but since the C# interface lacks a corresponding public constructor, there is rarely a need to reference this enumeration in the game code. - The value 500 (
k_EStoveBaseTypeKind_RestartAppIfNecessaryParam) has been added, andInitializeParamandSetGameProfileParamhave been shifted one position to 501 and 502, respectively; as a result, the numbering differs from the previous format (InitializeParam=500,GameProfileParams=501). StoveOverImmersionInfo(7) andStoveShutdownInfo(10) were previously namedStoveOverImmersionandStoveShutdown.
Changelog
| Version | Change |
|---|---|
| 3.5.0 | First Published |
See Also
EStoveCommonResultCode
Kind Result Code · Module Base · Version 3.5.0
Description
This is the result code used by all Stove SDK modules. It is retrieved as IStoveResult.ResultCode; a value of 0 (Success) indicates success. The value range is 0–299.
For the dedicated codes reassigned by module-specific bands, see EStoveResultCode (300–503).
Declaration
public enum EStoveCommonResultCode
{
k_EStoveCommonResultCode_Success = 0,
k_EStoveCommonResultCode_Fail = 1,
// ... See the table of enumerated values below
k_EStoveCommonResultCode_UnknownError = 255,
k_EStoveCommonResultCode_Max = 0x7fffffff
}
Enum Values
General Results
| Code | Name | Description | Show to User | In-Game Message |
|---|---|---|---|---|
| 0 | k_EStoveCommonResultCode_Success | Success | x | |
| 1 | k_EStoveCommonResultCode_Fail | General Failure (Check the logs or ErrorMessage for the specific cause) | x |
Configuration/Parameter Validation Failed
| Code | Name | Description | Show to User | In-Game Message |
|---|---|---|---|---|
| 2 | k_EStoveCommonResultCode_InvalidConfig | The setting is invalid (please verify the setting) | x | |
| 3 | k_EStoveCommonResultCode_InvalidLogLevel | The log level value is invalid (Check the log level value) | x | |
| 4 | k_EStoveCommonResultCode_InvalidLogPath | The log path is invalid (Check the log path) | x | |
| 5 | k_EStoveCommonResultCode_InvalidParam | The parameter is invalid (Check the parameter value in the calling code and correct it). | x | |
| — | 6 ~ 15 | Not in use (reserved section) | x |
Initialization State Error
| Code | Name | Description | Show to User | In-Game Message |
|---|---|---|---|---|
| 16 | k_EStoveCommonResultCode_BaseNotInitialized | The SDK has not been initialized (preceding call Stove_Initialize()) | x | |
| 17 | k_EStoveCommonResultCode_NotInitialized | This module has not been initialized (initialize this module first) | x | |
| 18 | k_EStoveCommonResultCode_AlreadyInitialized | It has already been initialized (removing duplicate initialization calls) | x |
Token/Entity Error
| Code | Name | Description | Show to User | In-Game Message |
|---|---|---|---|---|
| 19 | k_EStoveCommonResultCode_InvalidAccessToken | The AccessToken is invalid (reissue the token using Stove_GetAccessToken(), etc.) | O | Your login session has expired. Please close the game and restart it. [OK] |
| 20 | k_EStoveCommonResultCode_NullTokenEntity | The token entity is null (Check token issuance status) | x | |
| 21 | k_EStoveCommonResultCode_NullEntity | The entity is null (Check if the response object is null) | x |
HTTP/Response Errors
| Code | Name | Description | Show to User | In-Game Message |
|---|---|---|---|---|
| 22 | k_EStoveCommonResultCode_HttpError | An HTTP error has occurred (Please check your network connection and try again). | O | The network connection is unstable. Please check your network status and try again. [OK] |
| 23 | k_EStoveCommonResultCode_ResponseError | Server response error (Check server response) | O | The network connection is unstable. Please check your network status and try again. [OK] |
| 24 | k_EStoveCommonResultCode_ResponseInvalidCode | The server response code is invalid (Check the server response code) | O | The network connection is unstable. Please check your network status and try again. [OK] |
| 25 | k_EStoveCommonResultCode_ResponseValueIsNull | The server response value is null (Check the server response value) | O | The network connection is unstable. Please check your network status and try again. [OK] |
| 26 | k_EStoveCommonResultCode_ResponseInvalidValueFormat | The server response format is invalid (Check the server response format) | O | The network connection is unstable. Please check your network status and try again. [OK] |
Other Conditions
| Code | Name | Description | Show to User | In-Game Message |
|---|---|---|---|---|
| — | 27, 28 | Not in use (discontinued number) | x | |
| 29 | k_EStoveCommonResultCode_AsyncOperationInProgress | An asynchronous operation is already in progress (will be called again after the current asynchronous operation is complete) | x | |
| 30 | k_EStoveCommonResultCode_BaseUninitialized | The SDK has already been deactivated (Stove_Uninitialize) (Stove_Initialize() called again) | x | |
| 31 | k_EStoveCommonResultCode_NotSupportedCountry | This country/region is not supported (Call terminated after checking country/region restrictions) | x | |
| 33 | k_EStoveCommonResultCode_PopupNotCreated | The popup was closed without being created. This is code intended solely for internal cleanup; it is passed only to the onDestroy callback, and the wrapper intercepts it so that the user's delegate is not called (it is not passed to the game code). | x | |
| 34 | k_EStoveCommonResultCode_WebviewClosedBeforeComplete | The WebView closed before the operation was completed (treat this as a user cancellation and determine whether to retry). | O | The purchase was not completed successfully. Please try again. [OK] |
| — | 32, 35 ~ 39 | Not in use (reserved section) | x |
Local DB Failure (Common to All Stove SDK Modules)
| Code | Name | Description | Show to User | In-Game Message |
|---|---|---|---|---|
| 40 | k_EStoveCommonResultCode_LocalDbCreateWorkingDirectoryFailed | Failed to create the local DB working directory (check directory permissions/path) | x | |
| 41 | k_EStoveCommonResultCode_LocalDbConnectFailed | Failed to connect to the local database (Retrying) | x | |
| 42 | k_EStoveCommonResultCode_LocalDbCreateTableFailed | Failed to create a local database table (Retrying) | x | |
| 43 | k_EStoveCommonResultCode_LocalDbDisconnectFailed | Failed to disconnect from the local database (retrying) | x | |
| 44 | k_EStoveCommonResultCode_LocalDbWriteFailed | Failed to write to the local database (retrying) | x | |
| — | 45 ~ 59 | Not in use (Reserved range for Local DB/payload/storage) | x |
Web View/Pop-up UI Failure (Common to All Modules)
| Code | Name | Description | Show to User | In-Game Message |
|---|---|---|---|---|
| 60 | k_EStoveCommonResultCode_ViewUiNotInitialized | The Popup/WebView UI subsystem has not been initialized (Check whether View/IAP has been initialized) | x | |
| 61 | k_EStoveCommonResultCode_ViewUiUninitFailed | Failed to close the Popup/WebView UI subsystem (check the log) | x | |
| 62 | k_EStoveCommonResultCode_WebviewCreateFail | Failed to create a WebView (Retrying) | x | |
| 63 | k_EStoveCommonResultCode_WebviewLoadUrlFail | Failed to load the URL in the WebView (Check the URL/network status) | x | |
| 64 | k_EStoveCommonResultCode_WebviewCreateCookieFail | Failed to set WebView cookies (Retrying) | O | (View) The page cannot be loaded. Please try again. [OK] (IAP) You must agree to the terms and conditions to make a purchase. We were unable to load the terms and conditions screen. Please try again. [OK] |
| 65 | k_EStoveCommonResultCode_WebviewCloseAllFail | Failed to close all web views/pop-ups (retrying) | x | |
| 66 | k_EStoveCommonResultCode_WebviewCloseFail | Failed to close the WebView/popup (Retrying) | x | |
| 67 | k_EStoveCommonResultCode_NoPopupData | There is no pop-up data to display (Treated as normal (no pop-up to display)). | O | There is no pop-up configuration information, so there is no window to display. [OK] |
| 68 | k_EStoveCommonResultCode_CloseAllPopupsFailed | Stove_CloseAllPopups() Failed to close one or more pop-ups (IAP+View combined call) (Retry) | x | |
| — | 69 ~ 79 | Not in use (reserved for WebView/pop-up UI code) | x |
Parameter/Payload Validation (Common to All Modules)
| Code | Name | Description | Show to User | In-Game Message |
|---|---|---|---|---|
| 80 | k_EStoveCommonResultCode_ParameterLengthExceeded | The request parameter exceeds the maximum length (Check parameter length) | O | The payment information is invalid, so we cannot process the payment. Please try again. [OK] |
| 81 | k_EStoveCommonResultCode_InvalidJsonString | The JSON string format is invalid (please check the request payload) | O | The payment information is invalid, so we cannot process the payment. Please try again. [OK] |
| 82 | k_EStoveCommonResultCode_PayloadSizeExceeded | The payload exceeds the maximum allowed size (Check payload size) | x | |
| — | 83 ~ 248 | Not in use (reserved section) | x |
Network Transmission Failure
| Code | Name | Description | Show to User | In-Game Message |
|---|---|---|---|---|
| 249 | k_EStoveCommonResultCode_NetworkTransportError | This is a network transmission error. The HTTP backend's native error code IStoveCallbackResult.ExternalError is returned (e.g., WinHTTP 12002/12007/12029) (Check the ExternalError value and try again). | x | |
| — | 250 | Not in use (reserved section) | x |
System/Runtime Failure
| Code | Name | Description | Show to User | In-Game Message |
|---|---|---|---|---|
| 251 | k_EStoveCommonResultCode_PcsdkDllNotFound | The PCSDK DLL cannot be found (Check the PCSDK DLL location) | x | |
| 252 | k_EStoveCommonResultCode_NotImplemented | This feature is not implemented (remove the call or check for an alternative API) | x | |
| 253 | k_EStoveCommonResultCode_UnmanagedException | An unmanaged exception has occurred (check the exception log) | O | A temporary issue has occurred. Please try again. [OK] |
| 254 | k_EStoveCommonResultCode_ManagedException | A managed exception has occurred (check the exception log) | O | A temporary issue has occurred. Please try again. [OK] |
| 255 | k_EStoveCommonResultCode_UnknownError | Unknown error (check detailed log) | x | |
| — | 256 ~ 0x7ffffffe | Not in use (reserved section) | x | |
| 0x7fffffff | k_EStoveCommonResultCode_Max | Not used | x |
If you receive the code below, you must exit the game. The game cannot continue normally.
19k_EStoveCommonResultCode_InvalidAccessToken— The game has closed due to a expired login session; please restart it.
Example
using static Stove.PCSDK.V3.Base;
IStoveResult result = Stove_Uninitialize();
if (result.IsSuccessful)
{
// Please implement the logic for a successful outcome.
}
else
{
// Please implement the logic for when an error occurs.
}
Notes
- These are the result codes used in common by all SDK APIs and other SDK modules.
- The dedicated codes, which have been reorganized by module-specific bands, are defined as EStoveResultCode (300–503), and their numbers do not overlap with this enumeration.
- The range has significantly expanded with the consolidation into a single binary. In the previous version, this enumeration was defined only up to the 32 range, but now, code for the WebView/pop-up UI (60–68) and parameter/payload validation (80–82), among others, has been incorporated into this enumeration, resulting in values distributed across the entire range from 0 to 255.
k_EStoveCommonResultCode_PopupNotCreated(33) is intended solely for internal use and is not passed to user delegates; however, since its name does not includeInternal, it has been included in the table.
Changelog
| Version | Change |
|---|---|
| 3.5.0 | Initial release (WebView/pop-up UI compared to the previous version; code for parameter/payload validation incorporated) |
See Also
EStoveDiscountType
Kind Enum · Module IAP · Version 3.5.0
Description
This is the value returned by IStoveProduct.DiscountType. It determines whether the value of IStoveProduct.DiscountTypeValue should be interpreted as a percentage or a fixed amount.
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 | No discounts |
| 1 | k_EStoveDiscountType_FixedRate | Percentage discount (e.g., if DiscountTypeValue is 10, that’s a 10% discount) |
| 2 | k_EStoveDiscountType_FlatRate | Fixed-amount discount (e.g., DiscountTypeValue is a fixed-amount discount in the product's currency) |
| 0x7fffffff | k_EStoveDiscountType_Max | Not used |
Example
if (product.DiscountType == EStoveDiscountType.k_EStoveDiscountType_FixedRate)
{
// Please implement logic that interprets `product.DiscountTypeValue` as a percentage.
}
Notes
- This value is valid only for products where
IStoveProduct.IsDiscountedistrue.
See Also
EStoveIAPMethodCode
Kind Enum · Module IAP · Version 3.5.0
Description
Retrieve IStoveResult.MethodCode and identify which payment API generated this result. Use this for logging or error-handling branches.
Values are assigned sequentially within the IAP module block (2000 series).
Declaration
public enum EStoveIAPMethodCode
{
k_EStoveIAPMethodCode_Invalid = -1,
k_EStoveIAPMethodCode_FetchShopCategories = 2000,
// ... See the table of enumerated values below
k_EStoveIAPMethodCode_Max = 0x7fffffff
}
Enum Values
| Code | Name | Description |
|---|---|---|
| -1 | k_EStoveIAPMethodCode_Invalid | Not used |
| 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 — Lost Ark Mobile Exclusive |
| 0x7fffffff | k_EStoveIAPMethodCode_Max | Not used |
Example
if (callbackResult.Result.MethodCode == (uint)EStoveIAPMethodCode.k_EStoveIAPMethodCode_StartPurchase)
{
// This is the result of the Stove_StartPurchase() call.
}
Notes
- The module-specific
EStoveIAPResultCodehas been removed. The resulting code has been consolidated into common (EStoveCommonResultCode) and module-specific (EStoveResultCode) enumerations. - Since
IStoveResult.MethodCodeis of typeuint, a type cast is required when comparing them. - Lifecycle codes such as
Initialize,Uninitialize, andGetVersion, which existed prior to the single-binary integration, have been moved to the enumeration on the Base side.
See Also
EStoveIAPTypeKind
Kind Enum · Module IAP · Version 3.5.0
Description
In the Native (C) interface, Stove_CreateParam() is used to create the desired payment parameter object, and IStoveTypeBase::GetTypeKind() is used to determine the object's actual type at runtime.
In C# interfaces, parameters are provided as regular structs (such as IStoveFetchProductsParam), so the caller never uses these values directly. The Interop layer uses these values internally when creating native parameter objects.
The value range is 2000–2999. Within this range, the 2000s represent the result/data types passed by the SDK via callbacks, while the 2500s represent parameter types. Since there are more than 20 values, they are grouped by category.
Declaration
public enum EStoveIAPTypeKind
{
k_EStoveIAPTypeKind_Invalid = -1,
k_EStoveIAPTypeKind_ShopCategory = 2000,
// ... See the table of enumerated values below
k_EStoveIAPTypeKind_Max = 0x7fffffff
}
Enum Values
| Code | Name | Description |
|---|---|---|
| -1 | k_EStoveIAPTypeKind_Invalid | Not used |
Results / Data Types (Passed by the SDK via callback)
| Code | Name | Description |
|---|---|---|
| 2000 | k_EStoveIAPTypeKind_ShopCategory | IStoveShopCategory — Store Category Entry |
| 2001 | k_EStoveIAPTypeKind_Product | IStoveProduct — Product Item |
| 2002 | k_EStoveIAPTypeKind_StartPurchaseOutcome | IStoveStartPurchaseOutcome — Purchase Start Result (renamed from PurchaseResult) |
| 2003 | k_EStoveIAPTypeKind_PurchasedProduct | IStovePurchasedProduct — Items with confirmed purchases |
| 2004 | k_EStoveIAPTypeKind_ChargeInfo | IStoveChargeInfo — Payment Currency (Charge) Information |
| 2005 | k_EStoveIAPTypeKind_InventoryItem | IStoveInventoryItem — Inventory (Purchase History) Item |
| — | 2006 | Not used (VoidedPurchase — demoted to internal use only) |
| — | 2007 | Not in use (The "Refund Inquiry (VoidedPurchasesEx)" function was removed from the source code and remains only as a reservation number) |
| 2008 | k_EStoveIAPTypeKind_ConfirmPurchaseOutcome | IStoveConfirmPurchaseOutcome — Purchase Confirmation Results |
| 2009 | k_EStoveIAPTypeKind_WithdrawGameOutcome | IStoveWithdrawGameOutcome — Game Account Deletion Results (Lost Ark Mobile Only) |
| 2010 | k_EStoveIAPTypeKind_TermsAgreementOutcome | IStoveTermsAgreementOutcome — Terms and Conditions Acceptance Inquiry Results |
| 2011 | k_EStoveIAPTypeKind_ShopCategoryList | IStoveShopCategoryList — List of Store Categories |
| 2012 | k_EStoveIAPTypeKind_ProductList | IStoveProductList — Product List |
| 2013 | k_EStoveIAPTypeKind_InventoryList | IStoveInventoryList — Inventory (Purchase History) List |
Parameter Type (Created by the caller using Stove_CreateParam)
| Code | Name | Description |
|---|---|---|
| 2500 | k_EStoveIAPTypeKind_FetchProductsParam | IStoveFetchProductsParam — Product Search Parameters |
| 2501 | k_EStoveIAPTypeKind_OrderProductParam | IStoveOrderProductParam — Order Item Parameters |
| 2502 | k_EStoveIAPTypeKind_PurchaseParam | IStovePurchaseParam — Purchase Action Parameters |
| 2503 | k_EStoveIAPTypeKind_StartPurchaseParam | IStoveStartPurchaseParam — Start Purchase Parameter |
| 2504 | k_EStoveIAPTypeKind_FetchTermsAgreementParam | IStoveFetchTermsAgreementParam — Terms of Service Agreement Lookup Parameter |
| — | 2505 | Not used (PaymentParam — demoted to internal use only) |
| 2506 | k_EStoveIAPTypeKind_WithdrawGameParam | IStoveWithdrawGameParam — Game Exit Parameter (Lost Ark Mobile Only) |
| 2507 | k_EStoveIAPTypeKind_ConfirmPurchaseParam | IStoveConfirmPurchaseParam — Purchase Confirmation Parameter |
| — | 2508 | Not in use (The "Refund Inquiry (FetchVoidedPurchasesExParam)" function has been removed from the source code and is now listed only by reservation number) |
| Code | Name | Description |
|---|---|---|
| 0x7fffffff | k_EStoveIAPTypeKind_Max | Not used |
The numbers related to VoidedPurchase and PaymentParam have been designated for internal use only and excluded from the table. The numbers related to VoidedPurchasesEx and FetchVoidedPurchasesExParam (2007, 2508) remain only as reservation numbers, as the refund lookup feature itself has been removed from the source code. The VoidedPurchase family of types is not available in the v2 Managed API.
Example
// The C# interface does not use this value directly, and
// We create and use a struct that corresponds to the following right away.
var fetchProductsParam = new IStoveFetchProductsParam { CategoryId = "", PageIndex = 1, PageSize = 20 };
Notes
- The TypeKind enumerations for each module—such as Base and IAP—use distinct integer ranges.
- The 2000 series (results/data types) is not created directly by the caller; it appears only as the type of the value passed to the callback.
k_EStoveIAPTypeKind_StartPurchaseOutcomecorresponds toIStovePurchaseResultin the old interface. The name has been changed.
See Also
EStoveLocale
Kind Enum · Module Base · Version 3.5.0
Description
This is the PCSDK UI language selector. k_EStoveLocale_System follows the user's OS language.
It is used in the Stove_SetLanguage(EStoveLocale language) overload marked as [Obsolete]. This overload internally converts the value to a string and calls the same native API as Stove_SetLanguageEx(string language).
The
Stove_SetLanguage(EStoveLocale)overload that uses this enumeration is marked as[Obsolete("Use Stove_SetLanguageEx(string language) instead.")]. New code must useStove_SetLanguageEx(string), which accepts a 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 | Not used |
| 0 | k_EStoveLocale_System | Follows the OS language (mapped to the "system" string) |
| 1 | k_EStoveLocale_En | English ("en") |
| 2 | k_EStoveLocale_Ko | Korean ("ko") |
| 3 | k_EStoveLocale_Ja | Japanese ("ja") |
| 4 | k_EStoveLocale_ZhCn | Simplified Chinese ("zh-cn") |
| 5 | k_EStoveLocale_ZhTw | Traditional Chinese ("zh-tw") |
| 6 | k_EStoveLocale_De | German ("de") |
| 7 | k_EStoveLocale_Fr | French ("fr") |
| 8 | k_EStoveLocale_Es | Spanish ("es") |
| 9 | k_EStoveLocale_Pt | Portuguese ("pt") |
| 10 | k_EStoveLocale_Th | Thai ("th") |
| 11 | k_EStoveLocale_Vi | Vietnamese ("vi") |
| 0x7fffffff | k_EStoveLocale_Max | Not used |
Example
using static Stove.PCSDK.V3.Base;
// New code should use `Stove_SetLanguageEx(string)`.
IStoveResult result = Stove_SetLanguageEx("ko");
Notes
EStoveLocaleis an enumeration found only in C# interfaces. The new flat C interface has no corresponding enumeration; instead, the language setting is provided asStove_SetLanguage(), which accepts only a single string (const wchar_t*).- In the C# source code (
BaseAPIV2.cs),LocaleToString()converts this enumeration value to a lowercase string. The mapping rule is'_' → '-'(e.g.,k_EStoveLocale_ZhCn→ "zh-cn"). k_EStoveLocale_Invalidandk_EStoveLocale_Maxare both treated as "system" during conversion.- The
Stove_SetLanguage(EStoveLocale)API that uses this enumeration is[Obsolete]itself, and new code must useStove_SetLanguageEx(string).
Changelog
| Version | Change |
|---|---|
| 3.5.0 | First Published |
See Also
- None
EStoveLogMethodCode
Kind Enum · Module Log · Version 3.5.0
Description
This value identifies the API of the logging feature that generated IStoveResult. It can be queried as IStoveResult.MethodCode and is used in log entries or error-handling branches.
The integer range used by this enumeration is 6000 to 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 | Not used |
| 6000 | k_EStoveLogMethodCode_SendLog | Stove_SendLog |
| 0x7fffffff | k_EStoveLogMethodCode_Max | Not used |
Example
using static Stove.PCSDK.V3.Log;
void OnSendLogCallback(IStoveCallbackResult callbackResult)
{
uint methodCode = callbackResult.Result.MethodCode; // k_EStoveLogMethodCode_SendLog
}
Notes
- Since the log feature has only one public API, Stove_SendLog, it also has only one MethodCode value.
- The module-specific result code enumeration
EStoveLogResultCodefrom the previous interface has been removed. The cause of failure is identified asIStoveResult.ResultCode, and the values are defined in the module-specific EStoveResultCode or the common EStoveCommonResultCode.
See Also
EStoveLogTypeKind
Kind Enum · Module Log · Version 3.5.0
Description
This is the value that identifies concrete type in the parameter structure handled by the log function.
The integer range used by this enumeration is 6000 to 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 | Not used |
| 6500 | k_EStoveLogTypeKind_SendLogParam | IStoveSendLogParam |
| 0x7fffffff | k_EStoveLogTypeKind_Max | Not used |
Example
// The C# interface creates and uses the `IStoveSendLogParam` directly, and
// Do not pass this enumeration value directly to an API call.
Notes
- The log function defines only one parameter type, IStoveSendLogParam, and has no result or data type (the callback passes only
IStoveCallbackResult). - The range
6000–6999is reserved exclusively for Log, so it does not overlap with the TypeKind values of other modules.
See Also
EStoveOverlayMode
Kind Enum · Module Base · Version 3.5.0
Description
This value indicates the display status of regulatory/notification overlays, such as Vietnam age rating notices and excessive use prevention notices.
Queries IStoveVietnamAgeRatingInfo.OverlayMode and IStoveVietnamOverimmersionInfo.OverlayMode (both properties are of type int and hold values from this enumeration).
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 | Not used |
| 0 | k_EStoveOverlayMode_Show | Displays the overlay |
| 1 | k_EStoveOverlayMode_Hide | Hide the overlay |
| 2 | k_EStoveOverlayMode_Expanded | Displays the overlay in its expanded form |
| 0x7fffffff | k_EStoveOverlayMode_Max | Not used |
Example
using static Stove.PCSDK.V3.Base;
void OnVietnamAgeRatingNotificationCallback(IStoveCallbackResult callbackResult, IStoveVietnamAgeRatingInfo ageRatingInfo)
{
if (ageRatingInfo.OverlayMode == (int)EStoveOverlayMode.k_EStoveOverlayMode_Show)
{
// Please implement the logic to display the overlay.
}
}
Notes
k_EStoveOverlayMode_Expandedis a value used exclusively in the Vietnam Excessive Use Prevention Notice (IStoveVietnamOverimmersionInfo).- Since the
OverlayModeproperty is of typeint, it is cast to(int)EStoveOverlayMode.k_...when compared with this enumeration value. - In the previous version, the value names did not have underscores (
k_EStoveOverlayModeInvalid). In the current source, as shown ink_EStoveOverlayMode_Invalid, an underscore is inserted between the enum name and the value name.
Changelog
| Version | Change |
|---|---|
| 3.5.0 | First Published |
See Also
EStovePCBangMethodCode
Kind Enum · Module PCBang · Version 3.5.0
Description
This value identifies the API of the PC Bang feature that created IStoveResult. It can be queried as IStoveResult.MethodCode and is used in log entries or error-handling branches.
The integer range used by this enumeration is 3000 to 3999, and values are assigned sequentially according to the public API order.
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 | Not used |
| 3000 | k_EStovePCBangMethodCode_Login | This is the result of the onUserLogin callback for Stove_PCBangLogin. |
| 3001 | k_EStovePCBangMethodCode_Logout | Stove_PCBangLogout |
| 3002 | k_EStovePCBangMethodCode_CheckStatus | Stove_PCBangCheckStatus |
| 3003 | k_EStovePCBangMethodCode_RefreshBenefit | This is the result of the onRefreshBenefit callback for Stove_PCBangLogin. |
| 0x7fffffff | k_EStovePCBangMethodCode_Max | Not used |
Example
using static Stove.PCSDK.V3.PCBang;
void OnRefreshPCBangBenefitCallback(IStoveCallbackResult callbackResult, IStovePCBangBenefitInfo benefitInfo)
{
uint methodCode = callbackResult.Result.MethodCode; // k_EStovePCBangMethodCode_RefreshBenefit
}
Notes
k_EStovePCBangMethodCode_Loginandk_EStovePCBangMethodCode_RefreshBenefitboth result from a single call to Stove_PCBangLogin, but they are separate pieces of code corresponding to different callbacks (onUserLogin/onRefreshBenefit).onRefreshBenefitis called repeatedly every 4 minutes and is triggered regardless of whether the service is paid or free.- The
CheckUserStatusAPI from the previous interface has been renamed toStove_PCBangCheckStatus. - This enumeration does not have any result codes. The cause of failure is identified as
IStoveResult.ResultCode, and the values are defined in EStoveResultCode (module-specific) or EStoveCommonResultCode (common). There is no result code enumeration specific to the PC Bang function.
See Also
EStovePCBangPremium
Kind Enum · Module PCBang · Version 3.5.0
Description
This value indicates the premium (paid) subscription status of the logged-in user, PC Bang. IStovePCBangLoginOutcome.PremiumCheck, IStovePCBangBenefitInfo.PremiumCheck, and IStovePCBangStatus.PremiumCheck return this value.
This enumeration does not include separate codes for determining success or failure. k_EStovePCBangPremium_Error indicates a server error or an unrecognizable condition, while the success of the call itself is determined separately using 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 | Unable to determine the server error or status. |
| 1 | k_EStovePCBangPremium_Premium | You are now eligible for the Premium (paid) PC Bang benefits. |
| 2 | k_EStovePCBangPremium_Free | You are currently using the free version. |
| 3 | k_EStovePCBangPremium_FreeOther | This is a free service provided by a partner company (third party). |
| 0x7fffffff | k_EStovePCBangPremium_Max | Not used |
Example
using static Stove.PCSDK.V3.PCBang;
void OnPCBangLoginCallback(IStoveCallbackResult callbackResult, IStovePCBangLoginOutcome loginOutcome)
{
if (callbackResult.Result.IsSuccessful)
{
if (loginOutcome.PremiumCheck == EStovePCBangPremium.k_EStovePCBangPremium_Premium)
{
// Please implement the logic for premium benefits.
}
}
}
Notes
- This value is returned by all three structures: IStovePCBangLoginOutcome, IStovePCBangBenefitInfo, and IStovePCBangStatus.
- The benefit renewal callback (
onRefreshBenefit) is called every 4 minutes and is triggered not only when the status isk_EStovePCBangPremium_Premium(paid) but also when it isk_EStovePCBangPremium_Free(free).
See Also
EStovePCBangTypeKind
Kind Enum · Module PCBang · Version 3.5.0
Description
This value identifies each concrete type in the result/data structures passed to the asynchronous callback of the PC Bang function. Since the callback in the C# interface already passes data using structures such as concrete type (IStovePCBangLoginOutcome, etc.), no separate accessor is provided to retrieve this value.
The integer range used by this enumeration is 3000 to 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 | Not used |
| 3000 | k_EStovePCBangTypeKind_StovePCBangLoginOutcome | IStovePCBangLoginOutcome |
| 3001 | k_EStovePCBangTypeKind_StovePCBangBenefitInfo | IStovePCBangBenefitInfo |
| 3002 | k_EStovePCBangTypeKind_StovePCBangStatus | IStovePCBangStatus |
| 0x7fffffff | k_EStovePCBangTypeKind_Max | Not used |
Example
// C# interfaces do not create each struct (such as IStovePCBangLoginOutcome) directly, but rather
// Since the SDK returns this as a callback, do not use this enumeration value directly in API calls.
Notes
- All values included in this enumeration are result/data types returned by the PC Bang function via a callback; there are no input parameter types defined by the caller (the PC Bang function provides only parameterless APIs).
- The range 3000–3999 is reserved exclusively for PCBang, so it does not overlap with the TypeKind values of other modules.
See Also
EStoveProductTypeCode
Kind Enum · Module IAP · Version 3.5.0
Description
This is the value returned as IStoveProduct.ProductTypeCode. It indicates the type of product.
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 | Not Specified |
| 1 | k_EStoveProductTypeCode_IndiePackageGameItem | Indie Game Bundle Items |
| 2 | k_EStoveProductTypeCode_InGameItem | In-game items |
| 3 | k_EStoveProductTypeCode_PackageItem | Package Items |
| 0x7fffffff | k_EStoveProductTypeCode_Max | Not used |
Example
if (product.ProductTypeCode == EStoveProductTypeCode.k_EStoveProductTypeCode_InGameItem)
{
// Please implement the logic for in-game items.
}
Notes
- This is used to distinguish the types of each product retrieved using Stove_FetchProducts.
See Also
EStovePurchaseLimitTypeCode
Kind Enum · Module IAP · Version 3.5.0
Description
This is the value returned as IStoveProduct.PurchaseLimitTypeCode. It indicates whether the purchase limit applies per account, per character, or if there is no limit.
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 | No restriction policy has been defined |
| 1 | k_EStovePurchaseLimitTypeCode_Unlimited | No limit on the number of purchases |
| 2 | k_EStovePurchaseLimitTypeCode_Member | Account (Member) Level Limits |
| 3 | k_EStovePurchaseLimitTypeCode_Character | Character Limit |
| 0x7fffffff | k_EStovePurchaseLimitTypeCode_Max | Not used |
Example
if (product.PurchaseLimitTypeCode == EStovePurchaseLimitTypeCode.k_EStovePurchaseLimitTypeCode_Member)
{
// Please implement logic to check the account-level purchase limit using `product.PurchaseLimitCount`.
}
Notes
- If
Member, use the valueIStoveProduct.MemberQuantity; ifCharacter, use the valueIStoveProduct.GuidQuantityto calculate the remaining number of purchases available.
See Also
EStovePurchaseOperation
Kind Enum · Module IAP · Version 3.5.0
Description
Set it to IStovePurchaseParam.Operation, and Stove_StartPurchase determines how the payment page opens and who processes the purchase confirmation.
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 | Do not use Stove Webview. The caller must open the payment page directly using the one-time URL received as a result, and after completing the payment, call Stove_ConfirmPurchase to confirm the purchase. |
| 1 | k_EStovePurchaseOperation_WithWebView | Opens the Stove payment page within Stove Webview. Even after payment, the caller must call Stove_ConfirmPurchase to confirm the purchase. |
| 2 | k_EStovePurchaseOperation_WithWebViewAndConfirmResult | Open the Stove payment page within the Stove Webview; upon successful payment, the SDK automatically calls Stove_ConfirmPurchase to return the confirmed purchase result. |
| 0x7fffffff | k_EStovePurchaseOperation_Max | Not used |
Example
var purchaseParam = new IStovePurchaseParam
{
Operation = EStovePurchaseOperation.k_EStovePurchaseOperation_WithWebViewAndConfirmResult
};
Notes
- The fields related to
WebView*(position, size, and display mode) apply only whenOperation != Defaultis true. - Depending on the value of
Operation, the fields that are populated in the callback result (IStoveStartPurchaseOutcome) of Stove_StartPurchase will vary.
See Also
EStovePurchaseProgress
Kind Enum · Module IAP · Version 3.5.0
Description
This is the value returned as IStoveStartPurchaseOutcome.PurchaseProgress. After receiving the Stove_StartPurchase result, the caller uses it to determine whether to open the payment window directly.
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 | No progress |
| 1 | k_EStovePurchaseProgress_NeedPaymentWindow | The caller must manually open the payment window using the one-time payment URL provided in the response. |
| 2 | k_EStovePurchaseProgress_NotNeedPaymentWindow | There is no need to open the payment window (the transaction was completed immediately with a 0 won payment, or the payment has already been processed in the web view-based flow). |
| 0x7fffffff | k_EStovePurchaseProgress_Max | Not used |
Example
if (outcome.PurchaseProgress == EStovePurchaseProgress.k_EStovePurchaseProgress_NeedPaymentWindow)
{
string url = outcome.TempPaymentUrl;
// Please open the payment window using this URL.
}
Notes
- If you start a purchase with
k_EStovePurchaseOperation_Default,NeedPaymentWindowis typically returned.
See Also
EStoveResultCode
Kind Result Code · Module Base · Version 3.5.0
Description
In the global result code dictionary, these are module-specific result codes grouped by range based on the hundreds place (category). Look them up using IStoveResult.ResultCode. 3xx refers to Base (language/GDS/launcher/token/IPC), 4xx refers to WebView/pop-up UI (currently absorbed into EStoveCommonResultCode 60–68, so there are no values in this enumeration), and 5xx refers to IAP order/payment information (only 503 remains).
In a single binary structure, it makes no sense to keep the result codes separate by module, so we have consolidated the code used with the same meaning across multiple modules into this single enumeration. You can identify which module generated a result using MethodCode (module block = code / 1000). For module-specific result codes (0–299), refer to EStoveCommonResultCode.
The previous version of
EStoveBaseResultCode(numbers 80–89) has been deleted. Codes with the same meaning have been moved to this enumeration (number 300).
Declaration
public enum EStoveResultCode
{
k_EStoveResultCode_LanguageNotSet = 300,
k_EStoveResultCode_EmptyTranslatedString = 301,
// ... See the table of enumerated values below
k_EStoveResultCode_InvalidOrderProductInformation = 503,
k_EStoveResultCode_Max = 0x7fffffff
}
Enum Values
3xx — Base Language/GDS/Launcher/Token/IPC
| Code | Name | Description | Show to User | In-Game Message |
|---|---|---|---|---|
| 300 | k_EStoveResultCode_LanguageNotSet | No language has been set (Set the language to Stove_SetLanguageEx() and try again) | x | |
| 301 | k_EStoveResultCode_EmptyTranslatedString | The translated string is empty (Check the translation data) | x | |
| 302 | k_EStoveResultCode_NotFoundRequiredInformation | Required information cannot be found (Check whether required information has been set) | x | |
| 303 | k_EStoveResultCode_InvalidGdsInfo | The GDS (Country/Regulatory) information is invalid (Verify GDS information) | x | |
| 304 | k_EStoveResultCode_NeedStoveLauncher | The Stove launcher is required but is not running (Restart via the launcher using Stove_RestartAppIfNecessary()) | O | The game is closing because it is not running through the Stove PC client. Please relaunch the game from the client. If you do not have the client installed, please install it from the Stove website.[OK] |
| 305 | k_EStoveResultCode_LauncherFailedCreateRequired | Failed to create the required launcher resources (Retrying) | x | |
| 306 | k_EStoveResultCode_RenewTokenMaxRetryCountExceeded | The number of token renewal retry attempts has been exceeded (prompting a logout and relogin) | O | The network connection is unstable. Please check your network status and try again. [OK] |
| 307 | k_EStoveResultCode_IpcConnectFailed | Failed to establish an IPC connection with the launcher (Check the launcher's status and try again) | O | The game is closing because it is not running through the Stove PC client. Please launch the game again from the client. If you haven't installed the client, please install it from the Stove website.[OK] |
| 308 | k_EStoveResultCode_IpcAesKeyNotReceived | The AES key was not received via IPC (Retry) | O | The game is closing because it is not running through the Stove PC client. Please launch the game again from the client. If you don't have the client installed, please install it from the Stove website.[OK] |
| 309 | k_EStoveResultCode_IpcTimeout | The IPC communication with the launcher timed out (retrying) | O | The game is closing because it is not running through the Stove PC client. Please relaunch the game from the client. If you do not have the client installed, please install it from the Stove website.[OK] |
| — | 310 ~ 399 | Not in use (reserved section) | x |
4xx — Web View/Pop-up UI (Reserved, no current value)
| Code | Name | Description | Show to User | In-Game Message |
|---|---|---|---|---|
| — | 400 ~ 499 | The codes in this range have been absorbed into EStoveCommonResultCode 60–68, so there are no values in this enumeration. | x |
5xx — IAP Order/Payment Information
| Code | Name | Description | Show to User | In-Game Message |
|---|---|---|---|---|
| — | 500 ~ 502 | EStoveCommonResultCode Has been moved to 80–81 | x | |
| 503 | k_EStoveResultCode_InvalidOrderProductInformation | The order/product information is invalid (Please check the order parameters) | O | The payment information is invalid, so we cannot process the payment. Please try again. [OK] |
| — | 504 ~ 0x7ffffffe | Not in use (reserved section) | x | |
| 0x7fffffff | k_EStoveResultCode_Max | Not used | x |
If you receive the code below, you must exit the game. The game cannot proceed normally.
304k_EStoveResultCode_NeedStoveLauncher— You will need to restart the game after it closes.307k_EStoveResultCode_IpcConnectFailed— You will need to restart the game after it closes.308k_EStoveResultCode_IpcAesKeyNotReceived— You must restart the game after it ends309k_EStoveResultCode_IpcTimeout— You'll need to restart the game after it ends
Example
using static Stove.PCSDK.V3.Base;
IStoveResult result = Stove_SetLanguageEx("ko");
if (result.ResultCode == (uint)EStoveResultCode.k_EStoveResultCode_LanguageNotSet)
{
// Please implement the logic to handle the "Language Not Set" error.
}
Notes
- This is the code resulting from the reorganization by module-specific range (hundreds place). Currently, the only publicly available values are Base (3xx) and IAP (503); the remaining values in the 4xx and 5xx ranges have been absorbed into EStoveCommonResultCode.
- The previous version of
EStoveBaseResultCode(numbers 80–89, Base-only) has been removed, and the corresponding code has been moved to the 300s range of this enumeration. Developers who were referencing the old documentation should migrate to this enumeration. - Since
IStoveResult.ResultCodeis of typeuint, it is cast to(uint)EStoveResultCode.k_...when compared with this enumeration value.
Changelog
| Version | Change |
|---|---|
| 3.5.0 | First provided (replaces the old EStoveBaseResultCode) |
See Also
EStoveTermsOperation
Kind Enum · Module IAP · Version 3.5.0
Description
Set this to IStoveFetchTermsAgreementParam.Operation; this determines how Stove_FetchTermsAgreement displays the Terms of Service page when the user has not yet agreed to the terms.
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 is not used. The caller must open the Terms and Conditions page directly using the one-time URL received as a result. |
| 1 | k_EStoveTermsOperation_WithWebView | Displays the Terms and Conditions consent page within Stove Webview |
| 0x7fffffff | k_EStoveTermsOperation_Max | Not used |
Example
var termsParam = new IStoveFetchTermsAgreementParam
{
Operation = EStoveTermsOperation.k_EStoveTermsOperation_WithWebView
};
Notes
- The fields related to
WebView*(position, size, display mode) apply only whenOperation != Defaultis true.
See Also
EStoveViewMethodCode
Kind Enum · Module View · Version 3.5.0
Description
This is a value that identifies the pop-up API that generated IStoveResult. It can be retrieved as IStoveResult.MethodCode and is used in logging or error-handling logic.
The integer range used by this enumeration is 1000 to 1999; the Popup API uses numbers in the 1000 range, and the Popup Management and Utility API uses the numbers that follow in sequence.
Declaration
public enum EStoveViewMethodCode
{
k_EStoveViewMethodCode_Invalid = -1,
k_EStoveViewMethodCode_AutoPopup = 1000,
// ... See the table of enumerated values below
k_EStoveViewMethodCode_Max = 0x7fffffff
}
Enum Values
| Code | Name | Description |
|---|---|---|
| -1 | k_EStoveViewMethodCode_Invalid | Not used |
| 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 | Not used |
Example
using static Stove.PCSDK.V3.View;
void OnViewPopupCallback(IStoveCallbackResult callbackResult)
{
uint methodCode = callbackResult.Result.MethodCode; // k_EStoveViewMethodCode_AutoPopup, etc.
}
Notes
- The module-specific result code enumeration
EStoveViewResultCodefrom the previous interface has been removed. The cause of failure is identified asIStoveResult.ResultCode, and the values are defined in the module-specific EStoveResultCode or the common EStoveCommonResultCode. - Since
Stove_CloseAllPopups(), which closes all popups, is a function belonging toBase, it has theMethodCodevalue ofBaserather than this enumeration. - Value numbers are organized into blocks by module, so they do not overlap with the MethodCode of other modules. You can also use
IStoveResult.SDKNameto determine which module produced the result. - Even for the same pop-up, the values differ from those in the old interface. The old interface (
View_AutoPopup, etc.) returns81,83,85,87,91, and160, while the new interface returns the value in the1000range of this enumeration. While using both sets simultaneously, please keep the log aggregation criteria separate for each set.
See Also
- Stove_AutoPopup
- Stove_ManualPopup
- Stove_NewsPopup
- Stove_CouponPopup
- Stove_VerifyIdentificationPopup
- Stove_SetPopupDisallowed
EStoveViewTypeKind
Kind Enum · Module View · Version 3.5.0
Description
These are the values that identify each of the concrete type parameter structures and callback passage structures handled by the popup feature. Although the C# API does not handle these values directly—instead, it creates and passes the structures as-is—understanding the range and mapping of these values can be helpful for logging and debugging.
The integer range used by this enumeration is 1000 to 1999. Its numbers do not overlap with those of other modules' TypeKind values.
Declaration
public enum EStoveViewTypeKind
{
k_EStoveViewTypeKind_Invalid = -1,
k_EStoveViewTypeKind_SetPopupDisallowedParam = 1500,
// ... See the table of enumerated values below
k_EStoveViewTypeKind_Max = 0x7fffffff
}
Enum Values
| Code | Name | Description |
|---|---|---|
| -1 | k_EStoveViewTypeKind_Invalid | Not used |
| 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 | Not used |
Example
// The C# interface creates and uses each struct (such as IStovePopupParam) directly, and
// Do not pass this enumeration value directly to an API call.
var popupParam = new IStovePopupParam
{
WebViewMode = EStoveWebViewMode.k_EStoveWebViewMode_Internal
};
Notes
- 1500–1503 correspond to the parameter structures created by the caller and passed to the API, while 1504 corresponds to the structure returned by the SDK as a callback.
- The type used for the View popup parameter varies by API.
Stove_AutoPopup/Stove_NewsPopup/Stove_CouponPopupuse IStovePopupParam,Stove_ManualPopupuses IStoveManualPopupParam, andStove_VerifyIdentificationPopupuses IStoveVerifyIdentificationPopupParam.
See Also
- IStoveSetPopupDisallowedParam
- IStovePopupParam
- IStoveManualPopupParam
- IStoveVerifyIdentificationPopupParam
EStoveWebViewMode
Kind Enum · Module Base · Version 3.5.0
Description
This setting in the View SDK and IAP SDK determines whether a web view opens as an external pop-up (the system's default browser) or an internal pop-up (the SDK's built-in web view).
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 | Not used |
| 0 | k_EStoveWebViewMode_External | Opens in the system's default browser |
| 1 | k_EStoveWebViewMode_Internal | Opens in the SDK's built-in WebView |
| 0x7fffffff | k_EStoveWebViewMode_Max | Not used |
Example
EStoveWebViewMode webViewMode = EStoveWebViewMode.k_EStoveWebViewMode_Internal;
Notes
- This value is used to specify how pop-ups are displayed in the payment feature. There is no function in the SDK's own API that directly accepts this value.
- In the previous version, there was no underscore in the value name (
k_EStoveWebViewModeInvalid). In the current source, an underscore is inserted between the enumeration name and the value name, as ink_EStoveWebViewMode_Invalid.
Changelog
| Version | Change |
|---|---|
| 3.5.0 | First Published |
See Also
- None
IStoveAccessToken
Kind Struct · Module Base · Version 3.5.0
Description
This is the token structure of the callback passed when Stove_AccessTokenRenewed() is registered.
Contains the AccessToken value and its remaining validity time. Since it is readonly struct (value type), the garbage collector handles it, so there is no need to release it separately.
Declaration
public readonly struct IStoveAccessToken
{
public string AccessToken { get; }
public int ExpireIn { get; }
}
Members
| Name | Type | Access | Description |
|---|---|---|---|
AccessToken | string | Read (Property) | This is the Stove AccessToken value. |
ExpireIn | int | Read (Property) | This is the remaining validity period (in seconds) of the 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;
// Please implement the logic for a successful outcome.
}
else
{
// Please implement the logic for when an error occurs.
}
}
Stove_AccessTokenRenewed(OnAccessTokenRenewedCallback);
Notes
- After registering
Stove_AccessTokenRenewed(), this callback is called whenever the AccessToken is automatically renewed within the SDK. - In the previous version, this type was named
IStoveToken. In the current source (BaseTypesV2.cs),IStoveTokendoes not exist and is defined only asIStoveAccessToken.
See Also
IStoveCallbackResult
Kind Struct · Module Base · Version 3.5.0
Description
This is the result passed to the asynchronous callback. It wraps IStoveResult and contains both the detailed error message and the external error value.
It is passed as the first callback argument to callback-based asynchronous APIs such as Stove_AccessTokenRenewed() and Stove_OverImmersionNotification(). Since readonly struct is a value type, it is handled by the garbage collector and does not need to be manually released.
The values passed along with
Resultare valid only at the time the callback is invoked.
Declaration
public readonly struct IStoveCallbackResult
{
public IStoveResult Result { get; }
public string ErrorMessage { get; }
public int ExternalError { get; }
}
Members
| Name | Type | Access | Description |
|---|---|---|---|
Result | IStoveResult | Read (Property) | These are internal results. |
ErrorMessage | string | Read (Property) | This is a detailed message explaining why the error occurred. |
ExternalError | int | Read (Property) | This is an external error value (HTTP error code or API response code). |
WithManagedExceptionMsgAndCode(string exceptionMessage) | IStoveCallbackResult | Method | It returns a new IStoveCallbackResult in which Result has been replaced with Result.WithManagedExceptionMsgAndCode(exceptionMessage). ErrorMessage and ExternalError remain unchanged. |
Example
using static Stove.PCSDK.V3.Base;
void OnAccessTokenRenewedCallback(IStoveCallbackResult callbackResult, IStoveAccessToken token)
{
if (callbackResult.Result.IsSuccessful)
{
// Please implement the logic for a successful outcome.
}
else
{
// Please implement the logic for when an error occurs.
}
}
Stove_AccessTokenRenewed(OnAccessTokenRenewedCallback);
Notes
- It is passed as the first argument to all SDK asynchronous callbacks (
OnAccessTokenRenewedCallback,OnOverImmersionNotificationCallback, etc.). - The callback runs in the thread that called
Stove_RunCallback(). - In the new flat C interface,
IStoveCallbackResultcontains a field that returns theuserData(void*) passed at the time of the call, but the C# version does not have a corresponding field. Since the C# callback uses a delegate to capture the context as a closure, a separateuserDatapointer is not required. WithManagedExceptionMsgAndCode()is an internal helper method used by the C# wrapper to convert exceptions that occur during callback marshaling and other operations into theMANAGED_EXCEPTION(254) result. Game code will rarely need to call this method directly.
See Also
IStoveChargeInfo
Kind Struct · Module IAP · Version 3.5.0
Description
Represents a single payment method (Stove Cash, Points, PG, etc.) used for a single purchase. It is passed as an array containing both ChargeInfos from IStoveConfirmPurchaseOutcome (the result of Stove_ConfirmPurchase) and ChargeInfos from IStoveStartPurchaseOutcome (the result of Stove_StartPurchase).
This is a read-only struct (readonly struct) that the SDK populates with values and passes to the callback. The caller does not create it directly. Since it is a value type, the values can be copied and retained for use even after the callback has finished, and there is no need to free them separately.
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 | Read | The amount actually deducted at the time of payment (based on the billing unit) |
ChargeDisplayDeductVal | double | Read | Cash equivalent value of the deduction amount |
ChargeType | int | Read | Payment method codes. 98: Stove Cash, 99: Points, Others: PG (payment gateway) payment methods |
ChargeTypeName | string | Read | Localized payment method names |
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;
// Please configure the receipt screen using only the necessary values.
}
}
else
{
// Please implement the logic for when an error occurs.
}
}
Notes
- It is passed from both
ChargeInfosof IStoveConfirmPurchaseOutcome andChargeInfosof IStoveStartPurchaseOutcome. - If multiple payment methods are used in a single purchase, the items are organized into an array, separated by payment method.
See Also
IStoveConfirmPurchaseOutcome
Kind Struct · Module IAP · Version 3.5.0
Description
The result of the Stove_ConfirmPurchase call is passed to the OnConfirmPurchaseCallback callback.
This is a read-only struct (readonly struct) that the SDK populates with values and passes to the callback. The caller does not create it directly. Since it is a value type, the values can be copied and retained for use even after the callback has finished, and there is no need to free them separately.
Declaration
public readonly struct IStoveConfirmPurchaseOutcome
{
public bool IsConfirmed { get; }
public IStovePurchasedProduct[] PurchasedProducts { get; }
public IStoveChargeInfo[] ChargeInfos { get; }
}
Members
| Name | Type | Access | Description |
|---|---|---|---|
IsConfirmed | bool | Read | Whether the purchase has been finalized |
PurchasedProducts | IStovePurchasedProduct[] | Read | List of items included in a confirmed purchase |
ChargeInfos | IStoveChargeInfo[] | Read | List of items by currency (payment method) used for payment |
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)
{
// Please deliver the purchased items.
}
}
else
{
// Please implement the logic for when an error occurs.
}
}
Notes
- It is passed only as the output of Stove_ConfirmPurchase.
- If
IsConfirmedisfalse, thenPurchasedProducts/ChargeInfosmay be empty.
See Also
IStoveConfirmPurchaseParam
Kind Struct · Module IAP · Version 3.5.0
Description
This is the input parameter passed when calling Stove_ConfirmPurchase. It is used to confirm the purchase with the transaction master number received from IStoveStartPurchaseOutcome.
This is a standard C# struct (struct) that does not use a constructor. The game code creates it directly in the form of new IStoveConfirmPurchaseParam { ... }, populates it with values, and then passes it to the call. Since it is a value type, it does not need to be explicitly released.
Declaration
public struct IStoveConfirmPurchaseParam
{
public long TxnMasterNo { get; set; }
}
Members
| Name | Type | Access | Required | Description |
|---|---|---|---|---|
TxnMasterNo | long | Reading and Writing | Yes | Transaction master number received from IStoveStartPurchaseOutcome |
Example
using static Stove.PCSDK.V3.IAP;
var confirmParam = new IStoveConfirmPurchaseParam
{
TxnMasterNo = txnMasterNo
};
Stove_ConfirmPurchase(confirmParam, OnConfirmPurchaseCallback);
Notes
- For
TxnMasterNo, please use theTxnMasterNovalue from IStoveStartPurchaseOutcome, which is the result of Stove_StartPurchase, as is. - Purchases that begin with
Operation == DefaultorWithWebViewmust be finalized using this API after completing the payment in the payment window.
See Also
IStoveFetchProductsParam
Kind Struct · Module IAP · Version 3.5.0
Description
These are the input parameters passed when calling Stove_FetchProducts. They specify the category and page range to query.
This is a standard C# struct (struct) that does not use a constructor. The game code directly creates it in the form of new IStoveFetchProductsParam { ... }, populates it with values, and then passes it to the call. Since it is a value type, there is no need to explicitly free it.
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 | Reading and Writing | No | Category ID filter. Leave this field blank to view products from all categories. |
PageIndex | uint | Reading and Writing | Yes | Page number (starting at 1) |
PageSize | uint | Reading and Writing | Yes | Number of products per page |
Example
using static Stove.PCSDK.V3.IAP;
var fetchProductsParam = new IStoveFetchProductsParam
{
CategoryId = "",
PageIndex = 1,
PageSize = 20
};
Stove_FetchProducts(fetchProductsParam, OnFetchProductsCallback);
Notes
CategoryIdpasses the value obtained from IStoveShopCategory.CategoryId.
See Also
IStoveFetchTermsAgreementParam
Kind Struct · Module IAP · Version 3.5.0
Description
These are the input parameters passed when calling Stove_FetchTermsAgreement. The WebView* field applies only when Operation is not Default.
This is a standard C# struct (struct) that does not use a constructor. The game code creates it directly in the form of new IStoveFetchTermsAgreementParam { ... }, fills it with values, and then passes it to the call. Since it is a value type, there is no need to explicitly free it.
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 | Reading and Writing | Yes | Mode Selector |
WebViewMode | EStoveWebViewMode | Reading and Writing | No | WebView display mode. Applies only when Operation != Default. |
WebViewPosX | int | Reading and Writing | No | WebView x-coordinate (pixels). Applies only when Operation != Default. |
WebViewPosY | int | Reading and Writing | No | WebView y-coordinate (pixels). Applies only when Operation != Default. |
WebViewWidth | int | Reading and Writing | No | WebView width (pixels). Applies only when Operation != Default. |
WebViewHeight | int | Reading and Writing | No | WebView height (pixels). Applies only when Operation != Default. |
Example
using static Stove.PCSDK.V3.IAP;
var termsParam = new IStoveFetchTermsAgreementParam
{
Operation = EStoveTermsOperation.k_EStoveTermsOperation_WithWebView
};
Stove_FetchTermsAgreement(termsParam, OnFetchTermsAgreementCallback, null);
Notes
OperationIf this isDefault, theWebView*field is ignored.
See Also
IStoveGds
Kind Struct · Module Base · Version 3.5.0
Description
This is the structure for country, regulation, time zone, and language information passed as the ref parameter when making a Stove_GetGds() call.
The country code based on the logged-in user's IP address is provided by default; if the country cannot be determined from the IP address, it is replaced with the default country code (separated by IsDefault). Since it is readonly struct (value type), it is handled by GC and does not need to be manually cleared.
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 | Read (Property) | This indicates whether the default country code was used because the country code could not be determined based on the user's IP address. If the country code was determined based on the IP address, this value is false. |
Nation | string | Read (Property) | This is the country code (ISO 3166-1 ALPHA-2) of the logged-in user. |
Regulation | string | Read (Property) | This is the name of the regulation that applies based on the country code (e.g., GDPR). |
Timezone | string | Read (Property) | This is the time zone of the logged-in user (IANA Time Zone Database ID, e.g., "Asia/Seoul"). |
UtcOffset | int | Read (Property) | This is the UTC offset (in minutes) for the user's time zone. |
Lang | string | Read (Property) | This is the language of the logged-in user (ISO 639-1 ALPHA-2). Exceptions: Chinese uses "zh" or "zh-tw," and Indonesian uses "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;
// Please implement the logic for a successful outcome.
}
else
{
// Please implement the logic for when an error occurs.
}
Notes
- You must call this after initialization with
Stove_Initialize()to receive a valid value. Stove_GetGds(ref IStoveGds gds)returns a value via therefparameter, and the return value isIStoveResult.
See Also
IStoveInitializeParam
Kind Struct · Module Base · Version 3.5.0
Description
Stove_Initialize(IStoveInitializeParam) These are the parameters used to call the Overload. It has only two fields, ShopKey and MainWndHandle, and exists to initialize both the View and IAP modules simultaneously with the SDK initialization following a single binary integration.
It is a general struct (value type), and each field is exposed as a get/set property. Unlike the new flat C interface, the game code creates it directly in new IStoveInitializeParam { ... } format without a constructor and populates its values.
MainWndHandleIf this value is not 0, the View module is initialized; ifShopKeyis not empty andMainWndHandleis not 0, the IAP module is also initialized (both conditions must be met for the IAP module to be initialized).MainWndHandleis a valid value only after the game’s main window has actually been created.
Declaration
public struct IStoveInitializeParam
{
public string ShopKey { get; set; }
public IntPtr MainWndHandle { get; set; }
}
Members
| Name | Type | Access | Description |
|---|---|---|---|
ShopKey | string | Read/Write (Property) | This is the IAP store key. Stove_Initialize() will initialize the IAP module only if this value is not empty and MainWndHandle is also set. |
MainWndHandle | IntPtr | Read/Write (Property) | This is the game's main window handle (HWND). It is valid only after the window has been created, and if its value is not 0, it initializes the View module. Setting it to IntPtr.Zero skips both the View and IAP initialization. |
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)
{
// Please implement the logic for the success case.
}
else
{
// Please implement the logic for when an error occurs.
}
Notes
- In the previous version, the
Environment/GameId/AppKeyfields were included in this structure. In the current source (BaseTypesV2.cs), these three fields have been removed and moved to IStoveRestartAppIfNecessaryParam. The SDK reuses the value cached inStove_RestartAppIfNecessary()inStove_Initialize(). - The parameterless
Stove_Initialize()overload initializes only the SDK; it does not initialize View or IAP. - Although the new
flat Cinterface must be created usingStove_CreateParam(k_EStoveBaseTypeKind_InitializeParam)and released usingDestroy(), in C# this structure is created and initialized directly as a value type, without calling the creation or release functions.
See Also
IStoveInventoryItem
Kind Struct · Module IAP · Version 3.5.0
Description
Represents a single entry in the user's purchase history. It is passed to the OnFetchInventoryCallback callback as IStoveInventoryList as a result of the Stove_FetchInventory call.
This is a read-only struct (readonly struct) that the SDK populates with values and passes to the callback. The caller does not create it directly. Since it is a value type, the values can be copied and retained for use even after the callback has finished, and there is no need to free them separately.
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 | Read | Transaction Master Number |
TxnDetailNo | long | Read | Transaction Detail Number (TID by Product) |
ProductId | long | Read | Platform-Specific Product Identifier |
InserviceItemId | string | Read | In-game item identifiers mapped to this product |
ProductName | string | Read | Localized Product Names |
Quantity | int | Read | Quantity Purchased |
ThumbnailUrl | string | Read | Product Main Thumbnail Image 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;
// Please build the screen using only the necessary values.
}
}
else
{
// Please implement the logic for when an error occurs.
}
}
Notes
- It is passed only as the output of Stove_FetchInventory.
- When verifying whether game items have been awarded, you must prevent duplicate processing based on
TxnDetailNo.
See Also
IStoveInventoryList
Kind Struct · Module IAP · Version 3.5.0
Description
This is a list wrapper IStoveInventoryItem that is passed to the OnFetchInventoryCallback callback as a result of the Stove_FetchInventory call. You can implement IReadOnlyList<IStoveInventoryItem> to iterate through foreach.
This is a read-only structure (readonly struct) owned by the SDK, and it is valid only while the callback is running. It is not created directly by the caller. To preserve it outside the callback, you must copy the item's value.
Since it is a readonly struct (value type), the garbage collector handles it, so there is no need to manually free it.
Declaration
public readonly struct IStoveInventoryList : IReadOnlyList<IStoveInventoryItem>
{
// Please refer to the member list below for the members.
}
Members
| Name | Type | Access | Description |
|---|---|---|---|
Count | int | Read | Number of purchase history entries included in the list |
this[int index] | IStoveInventoryItem | Read | An indexer that accesses items by index |
GetEnumerator() | StoveReadOnlyArrayEnumerator<IStoveInventoryItem> | — | Returns the unboxed enumerator used in the foreach syntax. |
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;
// Please build the screen using only the necessary values.
}
}
else
{
// Please implement the logic for when an error occurs.
}
}
Notes
- It is passed only as the output of Stove_FetchInventory.
- Since the callback is invalidated once it ends, you must copy any values you need to continue using outside the callback in advance.
- Using an unboxed enumerator (
StoveReadOnlyArrayEnumerator<T>) prevents heap allocation even whenforeachis used.
See Also
IStoveManualPopupParam
Kind Struct · Module View · Version 3.5.0
Description
These are the parameters passed when calling Stove_ManualPopup. They specify the WebView display mode and the resource key used to select the popup content to be displayed.
The caller creates it and passes it as a value to the API. There is no need to explicitly release it (since it is a value type).
Declaration
public struct IStoveManualPopupParam
{
public EStoveWebViewMode WebViewMode { get; set; }
public string ResourceKey { get; set; }
}
Members
| Name | Type | Access | Required | Description |
|---|---|---|---|---|
WebViewMode | EStoveWebViewMode | Reading and Writing | Y | This is the WebView display mode (External / Internal). |
ResourceKey | string | Reading and Writing | Y | A resource key that identifies the manual pop-up to be displayed. |
Example
using static Stove.PCSDK.V3.View;
void OnViewPopupCallback(IStoveCallbackResult callbackResult)
{
if (callbackResult.Result.IsSuccessful)
{
// Please implement the logic for a successful outcome.
}
else
{
// Please implement the logic for when an error occurs.
}
}
void OnViewPopupDestroyCallback(IStoveCallbackResult callbackResult)
{
// This is called when the popup's native resources are released.
}
var manualPopupParam = new IStoveManualPopupParam
{
WebViewMode = EStoveWebViewMode.k_EStoveWebViewMode_Internal,
ResourceKey = "YOUR_RESOURCE_KEY"
};
Stove_ManualPopup(manualPopupParam, OnViewPopupCallback, OnViewPopupDestroyCallback);
Notes
- The Auto/News/Coupon pop-up uses IStovePopupParam instead of this type (no
ResourceKey).
See Also
IStoveOrderProductParam
Kind Struct · Module IAP · Version 3.5.0
Description
These are the order items for each product, stored in an array of size IStoveStartPurchaseParam with Products elements. One item is created for each product to be purchased and passed as an array.
This is a standard C# struct (struct) that does not use a constructor. The game code creates it directly in the form of new IStoveOrderProductParam { ... }, populates it with values, and then uses it. Since it is a value type, there is no need to explicitly free it.
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 | Reading and Writing | Yes | Platform-specific product identifier. Must match ProductId for IStoveProduct. |
SalePrice | double | Reading and Writing | Yes | The unit price (selling price) of this product as observed by the client. The server uses this to check for price discrepancies between the client and the server. |
Quantity | int | Reading and Writing | Yes | Quantity to Purchase |
Example
using static Stove.PCSDK.V3.IAP;
var orderProduct = new IStoveOrderProductParam
{
ProductId = productId,
SalePrice = salePrice,
Quantity = 1
};
var startPurchaseParam = new IStoveStartPurchaseParam
{
Products = new[] { orderProduct },
// Please refer to the IStoveStartPurchaseParam documentation for information on how to populate the remaining fields, such as PurchaseParam.
};
Stove_StartPurchase(startPurchaseParam, OnStartPurchaseCallback, null);
Notes
- For
SalePrice, please use the sameSalePricevalue as IStoveProduct. If the values differ, the server may treat this as a price discrepancy.
See Also
IStoveOverImmersionInfo
Kind Struct · Module Base · Version 3.5.0
Description
Stove_OverImmersionNotification() is the structure for the anti-excessive-use notification passed via callback. This API is available exclusively in South Korea.
It contains warning messages, cumulative game playtime, and message display time. Since it is readonly struct (value type), it is handled by the garbage collector and does not need to be manually released.
Declaration
public readonly struct IStoveOverImmersionInfo
{
public string Msg { get; }
public int ElapsedHours { get; }
public int ExposureTime { get; }
}
Members
| Name | Type | Access | Description |
|---|---|---|---|
Msg | string | Read (Property) | This is a warning about excessive engagement. |
ElapsedHours | int | Read (Property) | This is the cumulative playtime for the game (in hours). |
ExposureTime | int | Read (Property) | This is the message display time (in seconds). |
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;
// Please implement the logic for the success case. (Display `msg` for `exposureTime` seconds.)
}
else
{
// Please implement the logic for when an error occurs.
}
}
Stove_OverImmersionNotification(OnOverImmersionNotificationCallback);
Notes
- This API is for use in Korea only and must be called after rendering is complete.
ElapsedHoursis the unit of time (hour). Be careful not to confuse it with IStoveVietnamOverimmersionInfo.ElapsedMinutes, which are units of minutes.- In the previous version, this type was named
IStoveOverImmersionand the time field was namedElapsedTime. In the current source (BaseTypesV2.cs), the type name has been changed toIStoveOverImmersionInfoand the field name toElapsedHours.
See Also
IStovePCBangBenefitInfo
Kind Struct · Module PCBang · Version 3.5.0
Description
This is the updated benefits information that is periodically sent to the onRefreshBenefit callback after a successful login by Stove_PCBangLogin.
This is a value generated by the SDK and passed to the callback. The caller does not create it directly. Since it is a managed value, it can be retained and used even after the callback has finished.
It is called repeatedly every 4 minutes. Since this is not a one-time callback, you must implement the callback with the understanding that it will run every 4 minutes after registration.
Declaration
public readonly struct IStovePCBangBenefitInfo
{
public EStovePCBangPremium PremiumCheck { get; }
public int RemainTime { get; }
}
Members
| Name | Type | Access | Description |
|---|---|---|---|
PremiumCheck | EStovePCBangPremium | Read | PC Bang This is a Premium status. |
RemainTime | int | Read | Time remaining for paid benefits (in seconds). |
Example
using static Stove.PCSDK.V3.PCBang;
void OnPCBangLoginCallback(IStoveCallbackResult callbackResult, IStovePCBangLoginOutcome loginOutcome)
{
// This is called once when the user logs in for the first time.
}
void OnRefreshPCBangBenefitCallback(IStoveCallbackResult callbackResult, IStovePCBangBenefitInfo benefitInfo)
{
if (callbackResult.Result.IsSuccessful)
{
// Please implement the logic for a successful outcome.
int remainTime = benefitInfo.RemainTime;
}
else
{
// Please implement the logic for when a failure occurs.
}
}
Stove_PCBangLogin(OnPCBangLoginCallback, OnRefreshPCBangBenefitCallback);
Notes
- The old (v1) name is
StovePCRefreshUserBenefits. - This callback is called every 4 minutes and is triggered regardless of whether the account is in Premium or Free status. It is not called only when the account is in Premium status.
- Calling Stove_PCBangLogout will unregister this callback.
See Also
IStovePCBangLoginOutcome
Kind Struct · Module PCBang · Version 3.5.0
Description
This is the value passed to the onUserLogin callback when the first login for Stove_PCBangLogin is completed.
This is a value generated by the SDK and passed via a callback. It is not created directly by the caller.
Since it is a readonly struct (value type), it is handled by the garbage collector, so there is no need to free it separately. You can keep the value and use it even after the callback has finished.
Declaration
public readonly struct IStovePCBangLoginOutcome
{
public EStovePCBangPremium PremiumCheck { get; }
public int Psn { get; }
public int RemainTime { get; }
}
Members
| Name | Type | Access | Description |
|---|---|---|---|
PremiumCheck | EStovePCBangPremium | Read | PC Bang This is a Premium status. |
Psn | int | Read | This is the PC Bang seat/session number (PSN) assigned to the user. |
RemainTime | int | Read | Time remaining for paid benefits (in seconds). |
Example
using static Stove.PCSDK.V3.PCBang;
void OnPCBangLoginCallback(IStoveCallbackResult callbackResult, IStovePCBangLoginOutcome loginOutcome)
{
if (callbackResult.Result.IsSuccessful)
{
// Please implement the logic for a successful outcome.
int remainTime = loginOutcome.RemainTime;
}
else
{
// Please implement the logic for when an error occurs.
}
}
void OnRefreshPCBangBenefitCallback(IStoveCallbackResult callbackResult, IStovePCBangBenefitInfo benefitInfo)
{
// It is called repeatedly every 4 minutes.
}
Stove_PCBangLogin(OnPCBangLoginCallback, OnRefreshPCBangBenefitCallback);
Notes
- The old (v1) name is
StovePCBangUserLogin. - After the initial login, this value is replaced by IStovePCBangBenefitInfo, which is updated and returned every 4 minutes.
See Also
IStovePCBangStatus
Kind Struct · Module PCBang · Version 3.5.0
Description
This is information about the current PC Bang status and the entitlements available to the user, which is returned as the result of the Stove_PCBangCheckStatus call.
This is a value generated by the SDK and passed via a callback. It is not created directly by the caller.
Since it is a readonly struct (value type), the garbage collector handles it, so there is no need to manually free it. You can keep the value and use it even after the callback has finished.
Declaration
public readonly struct IStovePCBangStatus
{
public EStovePCBangPremium PremiumCheck { get; }
public int Psn { get; }
public int ProductCode { get; }
}
Members
| Name | Type | Access | Description |
|---|---|---|---|
PremiumCheck | EStovePCBangPremium | Read | PC Bang This is a Premium status. |
Psn | int | Read | This is the PC Bang seat/session number (PSN) assigned to the user. |
ProductCode | int | Read | There are currently PC Bang product codes available to users. |
Example
using static Stove.PCSDK.V3.PCBang;
void OnPCBangCheckStatusCallback(IStoveCallbackResult callbackResult, IStovePCBangStatus status)
{
if (callbackResult.Result.IsSuccessful)
{
// Please implement the logic for a successful outcome.
int productCode = status.ProductCode;
}
else
{
// Please implement the logic for when an error occurs.
}
}
Stove_PCBangCheckStatus(OnPCBangCheckStatusCallback);
Notes
- The old (v1) name is
StovePCBangStatus. - It has a similar field structure to IStovePCBangLoginOutcome, but uses
ProductCodeinstead ofRemainTime.
See Also
IStovePopupParam
Kind Struct · Module View · Version 3.5.0
Description
These are parameters used in common by the three APIs: Stove_AutoPopup, Stove_NewsPopup, and Stove_CouponPopup. They are used solely to specify the WebView display mode.
The caller creates it and passes it as a value to the API. There is no need to explicitly release it (value type).
Declaration
public struct IStovePopupParam
{
public EStoveWebViewMode WebViewMode { get; set; }
}
Members
| Name | Type | Access | Required | Description |
|---|---|---|---|---|
WebViewMode | EStoveWebViewMode | Reading and Writing | Y | This is the WebView display mode (External / Internal). |
Example
using static Stove.PCSDK.V3.View;
void OnViewPopupCallback(IStoveCallbackResult callbackResult)
{
if (callbackResult.Result.IsSuccessful)
{
// Please implement the logic for a successful outcome.
}
else
{
// Please implement the logic for when an error occurs.
}
}
void OnViewPopupDestroyCallback(IStoveCallbackResult callbackResult)
{
// This is called when the popup's native resources are released.
}
var popupParam = new IStovePopupParam { WebViewMode = EStoveWebViewMode.k_EStoveWebViewMode_Internal };
Stove_AutoPopup(popupParam, OnViewPopupCallback, OnViewPopupDestroyCallback);
Notes
- For manual pop-ups, use IStoveManualPopupParam instead of this type (add
ResourceKey). - For the identity verification pop-up, use IStoveVerifyIdentificationPopupParam instead of this type.
See Also
IStoveProduct
Kind Struct · Module IAP · Version 3.5.0
Description
Represents a single product sold in the store. It is passed to the OnFetchProductsCallback callback as IStoveProductList as a result of the Stove_FetchProducts call.
This is a read-only struct (readonly struct) in which the SDK populates the values and passes them to the callback. The caller does not create it directly. Since it is a value type, the values can be copied and retained for use even after the callback has finished, and there is no need to free them separately. Because it has 32 members, the ## Members section below is grouped by category.
Declaration
public readonly struct IStoveProduct
{
// Please refer to the member list below.
}
Members
Basic Information
| Name | Type | Access | Description |
|---|---|---|---|
ProductId | long | Read | Platform-Specific Product Identifier |
InserviceItemId | string | Read | In-game item identifiers mapped to this product |
ProductName | string | Read | Localized Product Names |
ProductDescription | string | Read | Localized Product Descriptions |
Quantity | int | Read | Number of items awarded for a single purchase of this product |
ProductTypeCode | EStoveProductTypeCode | Read | Product Category Code |
CategoryId | string | Read | The store category identifier for this product |
CategoryName | string | Read | The localized name of the store category to which this product belongs |
ThumbnailUrl | string | Read | Product Main Thumbnail Image URL |
Price
| Name | Type | Access | Description |
|---|---|---|---|
CurrencyCode | string | Read | ISO 4217 currency codes (e.g., "USD", "KRW") |
Price | double | Read | List Price Used for Payment Processing |
DisplayPrice | double | Read | List price displayed on screen (may differ from Price due to rounding, etc.) |
StrDisplayPrice | string | Read | Display price string with currency format applied |
SalePrice | double | Read | Selling price used for payment processing (same as Price unless a discount is applied) |
DisplaySalePrice | double | Read | Selling price displayed on the screen |
StrDisplaySalePrice | string | Read | Display price string with currency formatting applied |
Discount
| Name | Type | Access | Description |
|---|---|---|---|
IsDiscounted | bool | Read | Whether there is a current discount |
DiscountType | EStoveDiscountType | Read | Discount Calculation Method |
DiscountTypeValue | int | Read | Discount amount. If DiscountType is FixedRate, it is a percentage (e.g., 10 = 10% discount); if it is FlatRate, it is a fixed discount amount based on the product's currency. |
DiscountStartDate | long | Read | Discount Start Time (UTC epoch milliseconds) |
DiscountEndDate | long | Read | Discount End Time (UTC epoch milliseconds) |
Purchase Quantity and History
| Name | Type | Access | Description |
|---|---|---|---|
TotalQuantity | int | Read | Total quantity of this product purchased across all categories |
MemberQuantity | int | Read | Quantity purchased under the logged-in account (member) |
GuidQuantity | int | Read | Quantity purchased within the current character GUID range |
HasPurchased | bool | Read | Whether the user has ever purchased this product |
IsWithdrawable | bool | Read | Whether the product is subject to the subscription cancellation (consumer protection refund) policy |
Purchase Limits and Sales Period
| Name | Type | Access | Description |
|---|---|---|---|
PurchaseLimitTypeCode | EStovePurchaseLimitTypeCode | Read | Purchase Restriction Policy |
PurchaseLimitCount | int | Read | Purchase Limit Under Current Policy |
SaleLimitCount | int | Read | Total sales quantity limit for the product (0 means unlimited) |
SalesStartDate | long | Read | Start time of the sales period (UTC epoch milliseconds) |
SalesEndDate | long | Read | End time of the sales period (UTC epoch milliseconds) |
PurchaseAvailabilityCode | short | Read | Availability codes. 1: Available for purchase, 2: Unavailable for purchase (purchase limit exceeded), 3: Unavailable for purchase (out of stock in the web store), 4: Unavailable for purchase (already claimed in the web store). This set of values may be expanded on the server. It applies to purchase requests for a single unit of a product; results may differ if you request to purchase two or more units at once. |
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;
// Please build the screen using only the necessary values.
}
}
else
{
// Please implement the logic for when an error occurs.
}
}
Notes
- It is passed only as the output of Stove_FetchProducts.
- Please use
Price/SalePricefor payment processing (server verification), andDisplayPrice/DisplaySalePrice/StrDisplayPrice/StrDisplaySalePricefor display purposes only. - Since the system checks for discrepancies with the price observed by the server at the time of purchase, you must pass the
SalePricevalue for this product as-is toSalePricein IStoveOrderProductParam. DiscountStartDate/DiscountEndDate/SalesStartDate/SalesEndDateare all Unix epoch values in milliseconds relative to UTC.
See Also
IStoveProductList
Kind Struct · Module IAP · Version 3.5.0
Description
This is a wrapper for the list of IStoveProduct items passed to the OnFetchProductsCallback callback as a result of the Stove_FetchProducts call. It implements IReadOnlyList<IStoveProduct>, so it can be iterated with foreach.
This is a read-only struct (readonly struct) owned by the SDK, and it is valid only while the callback is executing. It is not created directly by the caller. To preserve it outside the callback, you must copy the item’s value.
Since it is readonly struct (value type), the garbage collector handles it, so there is no need to free it manually.
Declaration
public readonly struct IStoveProductList : IReadOnlyList<IStoveProduct>
{
// Please refer to the member list below for a list of members.
}
Members
| Name | Type | Access | Description |
|---|---|---|---|
Count | int | Read | Number of items in the list |
this[int index] | IStoveProduct | Read | An indexer that accesses items via an index |
GetEnumerator() | StoveReadOnlyArrayEnumerator<IStoveProduct> | — | Returns the unboxed enumerator used in the foreach syntax. |
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;
// Please build the screen using only the necessary values.
}
}
else
{
// Please implement the logic for when a failure occurs.
}
}
Notes
- It is passed only as the output of Stove_FetchProducts.
- Since the callback is invalidated once it ends, you must copy any values you need to continue using outside the callback beforehand.
- Using an unboxed enumerator (
StoveReadOnlyArrayEnumerator<T>) ensures that no heap allocation occurs even whenforeachis used.
See Also
IStovePurchasedProduct
Kind Struct · Module IAP · Version 3.5.0
Description
Represents a single item in a completed purchase (transaction). It is passed as an array to both PurchasedProducts from result IStoveConfirmPurchaseOutcome (which is Stove_ConfirmPurchase) and PurchasedProducts from result IStoveStartPurchaseOutcome (which is Stove_StartPurchase).
This is a read-only struct (readonly struct) that the SDK populates with values and passes to the callback. The caller does not create it directly. Since it is a value type, the values can be copied and retained for use even after the callback has finished, and there is no need to free them separately.
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 | Read | Transaction Detail Number (TID for each product within the master transaction) |
ProductId | long | Read | Platform-Specific Product Identifier |
CategoryId | string | Read | The store category identifier for this product |
TotalQuantity | int | Read | Total purchase quantity for this item |
MemberQuantity | int | Read | Quantity purchased within the member (account) scope |
GuidQuantity | int | Read | Quantity purchased within the current character GUID range |
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;
// Please distribute the items using only the required values.
}
}
else
{
// Please implement the logic for when an error occurs.
}
}
Notes
- It is passed from both
PurchasedProductsof IStoveConfirmPurchaseOutcome andPurchasedProductsof IStoveStartPurchaseOutcome. - Game item distribution must prevent duplicate awards based on
TxnDetailNo.
See Also
IStovePurchaseParam
Kind Struct · Module IAP · Version 3.5.0
Description
These are options stored in field PurchaseParam of IStoveStartPurchaseParam that determine how Stove_StartPurchase behaves. Field WebView* applies only when Operation is not Default.
This is a standard C# struct (struct) that does not use a constructor. The game code creates it directly in the form new IStovePurchaseParam { ... }, populates it with values, and then uses it. Since it is a value type, there is no need to explicitly free it.
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 | Reading and Writing | Yes | Mode Selector |
WebViewMode | EStoveWebViewMode | Reading and Writing | No | WebView display mode (external browser / SDK-embedded WebView). Applies only when Operation != Default. |
WebViewPosX | int | Reading and Writing | No | WebView x-coordinate (pixels). Applies only when Operation != Default. |
WebViewPosY | int | Reading and Writing | No | WebView y-coordinate (pixels). Applies only when Operation != Default. |
WebViewWidth | int | Reading and Writing | No | WebView width (pixels). Applies only when Operation != Default. |
WebViewHeight | int | Reading and Writing | No | WebView height (pixels). Applies only when 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
{
// Please refer to the IStoveStartPurchaseParam documentation to fill in the remaining fields, such as "Products."
PurchaseParam = purchaseParam
};
Stove_StartPurchase(startPurchaseParam, OnStartPurchaseCallback, null);
Notes
OperationIf this isDefault, theWebView*field is ignored.
See Also
IStoveRestartAppIfNecessaryOutcome
Kind Struct · Module Base · Version 3.5.0
Description
Stove_RestartAppIfNecessary() is the result passed to the callback. It is designed so that a single flag (IsRestartRequired), which indicates whether the app should be restarted via the Stove launcher, is wrapped in a domain entity; this ensures that the callback signature remains unchanged even if additional fields are added later.
Since it is a readonly struct (value type), the garbage collector handles it, so there is no need to free it manually.
Declaration
public readonly struct IStoveRestartAppIfNecessaryOutcome
{
public bool IsRestartRequired { get; }
}
Members
| Name | Type | Access | Description |
|---|---|---|---|
IsRestartRequired | bool | Read (Property) | If true, you must relaunch the app via the Stove launcher (the current process must be terminated). If false, you may proceed. |
Example
using static Stove.PCSDK.V3.Base;
void OnRestartAppIfNecessaryCallback(IStoveCallbackResult callbackResult, IStoveRestartAppIfNecessaryOutcome outcome)
{
if (callbackResult.Result.IsSuccessful)
{
if (outcome.IsRestartRequired)
{
// Please implement logic that prompts the user to close the app and restart it via the Stove launcher.
}
else
{
// Please implement the logic to continue the process.
}
}
else
{
// Please implement the logic for when a failure occurs.
}
}
Notes
- It is passed as the second argument to the asynchronous callback of
Stove_RestartAppIfNecessary(). - If
IsRestartRequiredis true but the app continues to run without going through the launcher, subsequent SDK calls may fail.
See Also
IStoveRestartAppIfNecessaryParam
Kind Struct · Module Base · Version 3.5.0
Description
Contains the parameters required for the Stove_RestartAppIfNecessary() call. It provides the environment and game identification information needed to determine whether the app was launched via the Stove launcher and, if not, whether it should be relaunched through the launcher.
It is a generic struct (value type), and each field is exposed as a get/set property. Unlike the new flat C interface, the game code creates it directly in the form of new IStoveRestartAppIfNecessaryParam { ... } without a constructor and populates the values.
Stove_RestartAppIfNecessary()must be called beforeStove_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 | Read/Write (Property) | These are the Stove environment values. |
GameId | string | Read/Write (Property) | This is the Stove game ID. |
AppKey | string | Read/Write (Property) | This is the Stove application key value. |
WaitTimeMilliSec | uint | Read/Write (Property) | This is the wait time (in milliseconds) used to determine whether the app was launched via the launcher. |
LaunchStoveLauncher | bool | Read/Write (Property) | This setting determines whether to launch the Stove launcher when it is not currently running. |
PlatformName | string | Read/Write (Property) | This is the platform name. It is a selectable field and should only be specified when integrating with platforms other than Stove (such as Steam). If left blank or set to "Stove", it will operate as a standalone Stove integration. |
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)
{
// Please implement the logic for when the operation succeeds.
}
else
{
// Please implement the logic for when a failure occurs.
}
}
Stove_RestartAppIfNecessary(param, OnRestartAppIfNecessaryCallback);
Notes
- Prior to the single binary merger,
Environment/GameId/AppKeywere all contained withinIStoveInitializeParam. In the current source (BaseTypesV2.cs), these fields have been removed fromIStoveInitializeParamand moved to this type. - The SDK internally caches the
Environment/GameId/AppKeyvalues received fromStove_RestartAppIfNecessary()and reuses them whenStove_Initialize()is called. PlatformNameis used to specify the IPC path for communicating with the launcher. If the value is left blank or"Stove"is specified, the existing path is used. If you enter an arbitrary value not supported by the launcher, the path will change, causingk_EStoveResultCode_IpcConnectFailed(307) ork_EStoveResultCode_IpcTimeout(309) to occur; therefore, do not configure this unless you plan to integrate with platforms other than Stove.
See Also
IStoveResult
Kind Struct · Module Base · Version 3.5.0
Description
Contains the results of a synchronous API call. It includes the method code that generated the result, the result code, and the managed (C#) exception message.
Most synchronous APIs, such as Stove_Initialize() and Stove_GetUser(), return this type. Since it is a readonly struct (value type), the garbage collector handles it, so there is no need to manually free it.
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 | Read (Property) | This is the globally unique method code that identifies the API that generated this result. The module is divided into blocks of 1,000 units (EStove<Module>MethodCode). |
ResultCode | uint | Read (Property) | Here is the result code. If it is 0 (Success), it means success; if it is not 0, it means failure. |
ExceptionMessage | string | Read (Property) | This is a managed (C#) exception message. |
IsSuccessful | bool | Read (Calculated Property) | This is a success determination property that returns whether ResultCode == 0 is true. |
WithManagedExceptionMsgAndCode(string exceptionMessage) | IStoveResult | Method | Returns a new IStoveResult with ResultCode set to k_EStoveCommonResultCode_ManagedException (254) and ExceptionMessage set to the specified value. MethodCode remains unchanged. |
Example
using static Stove.PCSDK.V3.Base;
IStoveResult result = Stove_Uninitialize();
if (result.IsSuccessful)
{
// Please implement the logic for a successful outcome.
}
else
{
// Please implement the logic for when an error occurs.
}
Notes
- It is used as the return value for synchronous APIs (such as
Stove_InitializeandStove_GetUser) rather than callbacks. ResultCodeis either EStoveCommonResultCode (0–299, common across modules) or EStoveResultCode (300–503, module-specific range).- You can immediately determine whether the operation was successful using the
IsSuccessfulproperty. There is no need to compare theResultCodevalue directly. - The previous format included the
SDKNamefield and theEStoveBaseResultCodeenumeration, but following the consolidation into a single binary, theSDKNamefield was removed, and the result codes were reorganized into two enumerations:EStoveCommonResultCode(common) /EStoveResultCode(per module). WithManagedExceptionMsgAndCode()is an internal helper method used by the C# wrapper to convert exceptions that occur during callback marshaling and similar operations into the resultMANAGED_EXCEPTION(254). Game code rarely needs to call this method directly.
See Also
IStoveSendLogParam
Kind Struct · Module Log · Version 3.5.0
Description
These are the parameters passed when calling Stove_SendLog. They contain account, character, marketing, and server information to be sent to the log backend.
The caller creates it and passes it as a value to the API. There is no need to release it separately (value type).
All string fields are optional, and the default value is null. Setting a field to null means "this field does not apply to this log entry," and the SDK sends this as JSON null (it does not omit the field itself). This is treated as a different value than explicitly specifying an empty string (""). You should only populate the fields relevant to that log entry and leave the rest at their default values (strings: null; numbers: 0). ExternalId and Contents are handled as exceptions by the server; if no value is set, they are sent as an empty string and an empty object, respectively.
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 | Reading and Writing | N | This is the account UID (STOVE account identifier). |
Cuid | long | Reading and Writing | N | This is the character UID (in-game character identifier). |
MktType1 | string | Reading and Writing | N | This is the name of the integrated third-party marketing service (Slot 1). |
MktId1 | string | Reading and Writing | N | Slot 1: An identifier issued by a third-party marketing service (campaign or referrer ID). |
MktType2 | string | Reading and Writing | N | This is the name of the integrated third-party marketing service (Slot 2). |
MktId2 | string | Reading and Writing | N | Slot 2 is an identifier issued by a third-party marketing service (campaign/referrer ID). |
GameVersion | string | Reading and Writing | N | This is the game client version string (e.g., "1.2.3"). |
LogGroupId | string | Reading and Writing | N | This is a correlation ID that groups related log entries together (e.g., logs generated within a single in-game transaction or flow). |
ServerCode | string | Reading and Writing | N | This is the server code for the world/region the user is connected to. |
ServerCodeDetail | string | Reading and Writing | N | ServerCode is a detailed server code that identifies a sub-server, channel, or shard under this server. |
LevelCode | string | Reading and Writing | N | This is the account level at the time the log was recorded. |
LevelCodeDetail | string | Reading and Writing | N | This is the character's level at the time the log was recorded. Although the name includes Detail, this is not a sub-level of LevelCode; rather, it represents a value within the character's level range. |
ExternalId | string | Reading and Writing | N | This identifier is used to link and track user behavior, from ad attribution to in-game actions (Singular, STOVE SDK, Log SDK, and all in-game logs). Games integrated with Singular must pass the SDID (Singular Device ID) to this field. |
Contents | string | Reading and Writing | N | This is free-form log data containing items that cannot be handled by the fields above (typically a JSON document encoded as a string). It corresponds to the action_param field in the legacy 81plug. |
Example
using static Stove.PCSDK.V3.Log;
void OnSendLogCallback(IStoveCallbackResult callbackResult)
{
if (callbackResult.Result.IsSuccessful)
{
// Please implement the logic for a successful outcome.
}
else
{
// Please implement the logic for when an error occurs.
}
}
var logParam = new IStoveSendLogParam
{
Auid = 123456789L,
Cuid = 987654321L,
LogGroupId = "YOUR_LOG_GROUP_ID",
Contents = "{\"action\":\"login\"}"
};
Stove_SendLog(logParam, OnSendLogCallback);
Notes
MktType1/MktId1andMktType2/MktId2are two independent slots. Since they are not in a "primary/alternative" relationship, fill in only the applicable slot.- Setting a string field to
nullversus setting it to an empty string ("") results in different values being sent to the server (null= field not provided,""= explicit empty value).ExternalId/Contentsare exceptions; if left unset, they are sent as an empty string or an empty object, respectively.
See Also
IStoveSetGameProfileParam
Kind Struct · Module Base · Version 3.5.0
Description
This is the game profile information passed when calling Stove_SetGameProfile().
Contains the world identifier and the character number within the world. It is a standard struct (value type), and each field is exposed as a get/set property. Unlike the new flat C interface, the game code creates it directly in the form of new IStoveSetGameProfileParam { ... } without a constructor and populates the values.
In a previous
StoveGameProfileParamsdocument, theCharacterNofield was incorrectly labeled as "worldId Length." This field actually represents the character number.
Declaration
public struct IStoveSetGameProfileParam
{
public string WorldId { get; set; }
public long CharacterNo { get; set; }
}
Members
| Name | Type | Access | Description |
|---|---|---|---|
WorldId | string | Read/Write (Property) | This is the game's world identifier. |
CharacterNo | long | Read/Write (Property) | This is the character number on the server. |
Example
using static Stove.PCSDK.V3.Base;
IStoveSetGameProfileParam gameProfileParam = new IStoveSetGameProfileParam
{
WorldId = "world_01",
CharacterNo = 123456789L,
};
IStoveResult result = Stove_SetGameProfile(gameProfileParam);
if (result.IsSuccessful)
{
// Please implement the logic for a successful outcome.
}
else
{
// Please implement the logic for when an error occurs.
}
Notes
- Contrary to its name,
CharacterNois a character number, not a string length. - Although a new
flat Cinterface must be created usingStove_CreateParam(k_EStoveBaseTypeKind_SetGameProfileParam)and destroyed usingDestroy(), in C# this structure is created and initialized directly as a value type, without calling the creation or destruction functions. - In the previous version, this type was named
IStoveGameProfileParam. In the current source (BaseTypesV2.cs), it has been changed toIStoveSetGameProfileParam(the member composition remains the same).
See Also
IStoveSetPopupDisallowedParam
Kind Struct · Module View · Version 3.5.0
Description
This is the parameter passed when calling Stove_SetPopupDisallowed. It specifies how many days to hide a pop-up.
The caller creates it and passes it as a value to the API. There is no need to release it separately (value type).
Declaration
public struct IStoveSetPopupDisallowedParam
{
public uint PopupId { get; set; }
public uint Days { get; set; }
}
Members
| Name | Type | Access | Required | Description |
|---|---|---|---|---|
PopupId | uint | Reading and Writing | Y | This is the identifier for the pop-up to be hidden. |
Days | uint | Reading and Writing | Y | The duration for which the pop-up will be hidden (in days). |
Example
using static Stove.PCSDK.V3.View;
void OnSetPopupDisallowedCallback(IStoveCallbackResult callbackResult)
{
if (callbackResult.Result.IsSuccessful)
{
// Please implement the logic for a successful outcome.
}
else
{
// Please implement the logic for when an error occurs.
}
}
var disallowedParam = new IStoveSetPopupDisallowedParam { PopupId = 1234, Days = 7 };
Stove_SetPopupDisallowed(disallowedParam, OnSetPopupDisallowedCallback);
Notes
- This is a different type from other View pop-up parameters (such as
IStovePopupParam). Be careful not to confuse them. PopupIdis not a value obtained through an SDK call. The callbacks for AutoPopup, ManualPopup, NewsPopup, and CouponPopup do not return a popup identifier, and the block status is stored only in the client’s local database—not via a server API. Therefore, the game (or studio) must separately know the identifier assigned when the popup was registered in order to populate this value.
See Also
IStoveShopCategory
Kind Struct · Module IAP · Version 3.5.0
Description
Represents a single item in the store category tree. It is passed to the OnFetchShopCategoriesCallback callback as IStoveShopCategoryList as a result of the Stove_FetchShopCategories call.
This is a read-only struct (readonly struct) that the SDK populates with values and passes to the callback. The caller does not create it directly. Since it is a value type, the values can be copied and retained for use even after the callback has finished, and there is no need to free them separately.
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 | Read | Category Identifier |
CategoryParentId | string | Read | Parent category identifier. The top-level category is empty. |
CategoryDisplayNo | int | Read | Display Order Within the Same Tier |
CategoryName | string | Read | Localized category names |
CategoryDepth | int | Read | Depth in the category tree (0 = top level) |
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;
// Please build the screen using only the necessary values.
}
}
else
{
// Please implement the logic for when a failure occurs.
}
}
Notes
- It is passed only as the output of Stove_FetchShopCategories.
- If
CategoryParentIdis empty, this is the top-level category. - IStoveProduct's
CategoryIdandCategoryNamecorrespond to this entry.
See Also
IStoveShopCategoryList
Kind Struct · Module IAP · Version 3.5.0
Description
This is a list wrapper that contains IStoveShopCategory, which is passed to the OnFetchShopCategoriesCallback callback as a result of the Stove_FetchShopCategories call. You can implement IReadOnlyList<IStoveShopCategory> to iterate over foreach.
This is a read-only structure (readonly struct) owned by the SDK, and it is valid only while the callback is running. The caller does not create it directly. To preserve it outside the callback, you must copy the item's value.
Since it is a readonly struct (value type), the garbage collector handles it, so there is no need to manually free it.
Declaration
public readonly struct IStoveShopCategoryList : IReadOnlyList<IStoveShopCategory>
{
// Please refer to the member list below.
}
Members
| Name | Type | Access | Description |
|---|---|---|---|
Count | int | Read | Number of categories in the list |
this[int index] | IStoveShopCategory | Read | An indexer that accesses items by index |
GetEnumerator() | StoveReadOnlyArrayEnumerator<IStoveShopCategory> | — | Returns the unboxed enumerator used in the foreach syntax. |
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];
// Please build the screen using only the necessary values.
}
// Alternatively, you can iterate through them using `foreach`.
foreach (var category in list)
{
// ...
}
}
else
{
// Please implement the logic for when a failure occurs.
}
}
Notes
- It is passed only as the output of Stove_FetchShopCategories.
- Since values are discarded once the callback ends, you must copy any values you need to continue using outside the callback in advance.
- Using an unboxed enumerator (
StoveReadOnlyArrayEnumerator<T>) ensures that no heap allocation occurs even whenforeachis used.
See Also
IStoveShutdownInfo
Kind Struct · Module Base · Version 3.5.0
Description
Stove_ShutdownNotification() is the shutdown notification structure passed to the callback.
It contains the shutdown message, the message display duration, and the time remaining until shutdown. Since it is readonly struct (value type), it is handled by the garbage collector and does not need to be manually released.
Shutdown notifications are not limited to South Korea—if an account has been shut down, this callback will be triggered even when the account is overseas.
Declaration
public readonly struct IStoveShutdownInfo
{
public string Msg { get; }
public int ExposureTime { get; }
public int InadvanceMinutes { get; }
}
Members
| Name | Type | Access | Description |
|---|---|---|---|
Msg | string | Read (Property) | This is a shutdown notification message. |
ExposureTime | int | Read (Property) | This is the duration (in seconds) that the shutdown message is displayed. |
InadvanceMinutes | int | Read (Property) | This is the time remaining (in minutes) until the user is logged out. |
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;
// Please implement the logic for a successful outcome.
}
else
{
// Please implement the logic for when an error occurs.
}
}
Stove_ShutdownNotification(OnShutdownNotificationCallback);
Notes
- If an account is subject to a shutdown, this callback is invoked regardless of the country.
- This callback is not a one-time event. It is called once each time the server sends a preliminary notification (e.g., 30 minutes before shutdown, 10 minutes before shutdown, etc.) and once more when the actual shutdown time arrives.
- In the previous version, this type was named
IStoveShutdown. In the current source (BaseTypesV2.cs), it has been changed toIStoveShutdownInfo(the member composition remains the same).
See Also
IStoveSignin
Kind Struct · Module Base · Version 3.5.0
Description
This is the structure of the login credentials passed as the ref parameter when calling Stove_GetSignin().
This field contains information on whether identity verification and email verification have been completed, the country of registration, and the authentication method (IDP) used during registration. Since it is readonly struct (value type), GC handles it automatically, so there is no need to disable it separately.
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 | Read (Property) | This indicates whether the user has completed identity verification. |
IsEmailVerified | bool | Read (Property) | This indicates whether the user has completed email verification. |
RegisteredCountryCode | string | Read (Property) | This is the country code for registration on the Stove platform (ISO 3166-1 ALPHA-2). |
ProviderCode | string | Read (Property) | This is an IDP classification code (string) indicating the authentication method used when logging in to Stove. Examples: SO (Stove email), FB (Facebook), GP (Google), STEAM, VTCO, etc. |
AccountType | int | Read (Property) | This is the account type code (numeric). For example: 2 = Facebook, 3 = Twitter, 6 = Naver, 9 = Google+, 11 = Stove PC sign-up, 12 = Apple, 13 = LINE, 14 = LINE Games, 15 = Steam, 16 = VTCO, etc. |
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;
// Please implement the logic for a successful outcome.
}
else
{
// Please implement the logic for when an error occurs.
}
Notes
- You must call this after initialization with
Stove_Initialize()to receive a valid value. AccountTypeis a numeric code, andProviderCodeis a string code; they represent the same authentication method using different notations.Stove_GetSignin(ref IStoveSignin signin)returns a value via therefparameter, and the return value isIStoveResult.- In the previous version, the member names were
PersonVerifyYn/EmailVerifyYn/CountryCd/ProviderCd. In the current source (BaseTypesV2.cs), the names have been changed toIsPersonVerified/IsEmailVerified/RegisteredCountryCode/ProviderCode.
See Also
IStoveStartPurchaseOutcome
Kind Struct · Module IAP · Version 3.5.0
Description
The result of the Stove_StartPurchase call is passed to the OnStartPurchaseCallback callback. Which fields are populated depends on IStovePurchaseParam.Operation (EStovePurchaseOperation).
Default—TempPaymentUrlis filled in for manual payment.WithWebViewAndConfirmResult— If the payment is successful,IsPurchased,PurchasedProducts, andChargeInfoswill be filled in.
This is a read-only struct (readonly struct) that the SDK populates with values and passes to the callback. The caller does not create it directly. Since it is a value type, the values can be copied and retained for use even after the callback has finished, and there is no need to free them separately.
Declaration
public readonly struct IStoveStartPurchaseOutcome
{
// Please refer to the member list below.
}
Members
| Name | Type | Access | Description |
|---|---|---|---|
TxnMasterNo | long | Read | Transaction Master Number (TID per purchase) |
TxnDetailNos | long[] | Read | Arrangement of Transaction Detail Numbers by Product |
TempPaymentUrl | string | Read | One-time payment URL. Provided when Operation == Default. |
PurchaseProgress | EStovePurchaseProgress | Read | Purchase Status |
IsPurchased | bool | Read | Operation == WithWebViewAndConfirmResult, and if the payment was successfully completed, true. Otherwise, false. |
ExtraData | string | Read | The string ExtraData passed to Stove_StartPurchase is returned exactly as it was. |
PurchasedProducts | IStovePurchasedProduct[] | Read | Array of purchased items. This is Operation == WithWebViewAndConfirmResult and is populated when payment is successful. |
ChargeInfos | IStoveChargeInfo[] | Read | List of items by currency (payment method) used for payment |
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;
// Please open the payment window using the URL.
}
else if (outcome.IsPurchased)
{
foreach (var product in outcome.PurchasedProducts)
{
// Please deliver the purchased items.
}
}
}
else
{
// Please implement the logic for when an error occurs.
}
}
Notes
- In the old interface, it was available under the name
IStovePurchaseResult. - For purchases starting with
Operation == DefaultorWithWebView, you must call Stove_ConfirmPurchase after payment is complete to finalize the purchase. TxnMasterNois forwarded as-is to IStoveConfirmPurchaseParam.TxnMasterNo to confirm the purchase.
See Also
IStoveStartPurchaseParam
Kind Struct · Module IAP · Version 3.5.0
Description
These are the input parameters passed when calling Stove_StartPurchase. They contain both the list of items to purchase (IStoveOrderProductParam) and the purchase action options (IStovePurchaseParam).
This is a standard C# struct (struct) that does not use a constructor. The game code creates it directly in the form of new IStoveStartPurchaseParam { ... }, populates it with values, and then passes it to the call. Since it is a value type, there is no need to explicitly free it.
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[] | Reading and Writing | Yes | Arrangement of Order Items by Product to Be Purchased |
PurchaseParam | IStovePurchaseParam | Reading and Writing | Yes | Purchase Behavior Options (Including Web View Placement) |
ServiceTxnNo | string | Reading and Writing | No | Service-side transaction number issued by the game (optional) |
ExtraData | string | Reading and Writing | No | Additional request data (typically a JSON string; optional). It is returned as-is from IStoveStartPurchaseOutcome to 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
ExtraDatais returned exactly asExtraDataof IStoveStartPurchaseOutcome. Clients can use this to associate purchase requests with responses.
See Also
- Stove_StartPurchase
- IStoveOrderProductParam
- IStovePurchaseParam
- IStoveStartPurchaseOutcome
- Stove_ConfirmPurchase
IStoveTermsAgreementOutcome
Kind Struct · Module IAP · Version 3.5.0
Description
The result of the Stove_FetchTermsAgreement call is passed to the OnFetchTermsAgreementCallback callback.
This is a read-only struct (readonly struct) that the SDK populates with values and passes to the callback. The caller does not create it directly. Since it is a value type, the values can be copied and retained for use even after the callback completes, and there is no need to explicitly free them.
Declaration
public readonly struct IStoveTermsAgreementOutcome
{
public bool IsAgreed { get; }
public string Url { get; }
}
Members
| Name | Type | Access | Description |
|---|---|---|---|
IsAgreed | bool | Read | Whether the user has already agreed to the current terms and conditions. If true is true, Url is empty. |
Url | string | Read | The URL of the terms and conditions page that the caller must open. If IsAgreed is true, this field is empty. |
Example
using static Stove.PCSDK.V3.IAP;
void OnFetchTermsAgreementCallback(IStoveCallbackResult callbackResult, IStoveTermsAgreementOutcome outcome)
{
if (callbackResult.Result.IsSuccessful)
{
if (!outcome.IsAgreed)
{
string url = outcome.Url;
// If Operation == Default, please open the Terms and Conditions page directly via the URL.
}
else
{
// Please implement the logic for cases where consent has already been given.
}
}
else
{
// Please implement the logic for when an error occurs.
}
}
Notes
- It is passed only as the output of Stove_FetchTermsAgreement.
- IStoveFetchTermsAgreementParam.Operation If this is
WithWebView, this callback is invoked while the Terms and Conditions page is already displayed within Stove Webview.
See Also
IStoveUser
Kind Struct · Module Base · Version 3.5.0
Description
This is the user information structure passed as parameter ref when calling Stove_GetUser().
Contains the username and game user ID of the user logged in to the launcher. Since it is readonly struct (value type), it is handled by the garbage collector and does not need to be manually freed.
Declaration
public readonly struct IStoveUser
{
public string NickName { get; }
public ulong UserId { get; }
}
Members
| Name | Type | Access | Description |
|---|---|---|---|
NickName | string | Read (Property) | This is the Stove username of the user logged in to the launcher. |
UserId | ulong | Read (Property) | This is the GameUserId of the user logged in to the launcher. |
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;
// Please implement the logic for the success case.
}
else
{
// Please implement the logic for when a failure occurs.
}
Notes
- You must call this after initialization with
Stove_Initialize()to receive a valid value. Stove_GetUser(ref IStoveUser user)returns a value to therefparameter, and the return value isIStoveResult.
See Also
IStoveVerifyIdentificationPopupDestroyInfo
Kind Struct · Module View · Version 3.5.0
Description
This is the value passed to OnVerifyIdentificationPopupDestroyCallback when the Stove_VerifyIdentificationPopup identity verification pop-up closes.
This is a value generated by the SDK and passed via a callback. It is not created directly by the caller.
Since it is a readonly struct (value type), the garbage collector handles it, so there is no need to manually free it. You can keep the value and use it even after the callback has finished.
Declaration
public readonly struct IStoveVerifyIdentificationPopupDestroyInfo
{
public string SimKey { get; }
}
Members
| Name | Type | Access | Description |
|---|---|---|---|
SimKey | string | Read | This is the SIM key issued after successful identity verification. If verification fails or the key is unavailable, it will be an empty string (""). |
Example
using static Stove.PCSDK.V3.View;
void OnVerifyIdentificationPopupDestroyCallback(IStoveCallbackResult callbackResult, IStoveVerifyIdentificationPopupDestroyInfo info)
{
if (!string.IsNullOrEmpty(info.SimKey))
{
// Please implement the logic for a successful outcome.
string simKey = info.SimKey;
}
else
{
// Please implement the logic for when an error occurs.
}
}
Notes
- If
SimKeyis an empty string, it should be considered a failure. Failures are not distinguished by a separate error code.
See Also
IStoveVerifyIdentificationPopupParam
Kind Struct · Module View · Version 3.5.0
Description
These are the parameters passed when calling Stove_VerifyIdentificationPopup. They specify the WebView display mode and whether to compare the verified identifier with the logged-in user.
The caller creates it and passes it as a value to the API. There is no need to release it separately (value type).
Declaration
public struct IStoveVerifyIdentificationPopupParam
{
public EStoveWebViewMode WebViewMode { get; set; }
public bool CompareIdentifier { get; set; }
}
Members
| Name | Type | Access | Required | Description |
|---|---|---|---|---|
WebViewMode | EStoveWebViewMode | Reading and Writing | Y | This is the WebView display mode (External / Internal). |
CompareIdentifier | bool | Reading and Writing | N | Whether to compare the verified identifier with the currently logged-in user. |
Example
using static Stove.PCSDK.V3.View;
void OnViewPopupCallback(IStoveCallbackResult callbackResult)
{
if (callbackResult.Result.IsSuccessful)
{
// Please implement the logic for the success case.
}
else
{
// Please implement the logic for when an error occurs.
}
}
void OnVerifyIdentificationPopupDestroyCallback(IStoveCallbackResult callbackResult, IStoveVerifyIdentificationPopupDestroyInfo info)
{
string simKey = info.SimKey;
// Please implement the logic for when the pop-up closes.
}
var verifyParam = new IStoveVerifyIdentificationPopupParam
{
WebViewMode = EStoveWebViewMode.k_EStoveWebViewMode_Internal,
CompareIdentifier = true
};
Stove_VerifyIdentificationPopup(verifyParam, OnViewPopupCallback, OnVerifyIdentificationPopupDestroyCallback);
Notes
- If the verification is successful, the issued SIM key will be sent to IStoveVerifyIdentificationPopupDestroyInfo.
See Also
IStoveVietnamAgeRatingInfo
Kind Struct · Module Base · Version 3.5.0
Description
Stove_VietnamAgeRatingNotification() This is the age rating notification overlay information passed via callback. This API is for Vietnam only.
It contains the overlay display status, shape, size/position, game age rating, and notification messages. Since it is readonly struct (value type), the GC handles it, so there is no need to manually release it.
Since this is a one-time callback, it must be called after rendering is complete.
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 | Read (Property) | The overlay is currently displayed (SHOW: Show overlay, HIDE: Hide overlay). The value is EStoveOverlayMode. |
OverlayType | int | Read (Property) | This is the overlay type (0 = black, 1 = white). |
OverlayScale | float | Read (Property) | This is the overlay scale (0.0 to 1.0). |
OverlayOpacity | float | Read (Property) | This is the overlay opacity (0.0 to 1.0). |
AgeRating | int | Read (Property) | These are the game age ratings (0 = All Ages, 12 = Ages 12 and up, 16 = Ages 16 and up, 18 = Ages 18 and up). |
Msg | string | Read (Property) | This is an age rating notice. |
DisplayPositionX | float | Read (Property) | The x-coordinate of the message's display position. Relative to the left edge of the screen (0.0 to 1.0). |
DisplayPositionY | float | Read (Property) | The y-coordinate of the message's display position. Relative to the top of the screen (0.0–1.0). |
Language | string | Read (Property) | These are language codes for selecting fonts (e.g., "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;
// Please implement the logic for when the operation is successful. (Show/hide the overlay based on `overlayMode`.)
}
else
{
// Please implement the logic for when an error occurs.
}
}
Stove_VietnamAgeRatingNotification(OnVietnamAgeRatingNotificationCallback);
Notes
- This API is specific to Vietnam, and since it is a one-time callback, it must be called after rendering is complete.
OverlayModeuses the value of EStoveOverlayMode.
See Also
IStoveVietnamOverimmersionInfo
Kind Struct · Module Base · Version 3.5.0
Description
Stove_VietnamOverimmersionNotification() This is the information for the anti-excessive-use notification overlay passed via callback. This API is for Vietnam only.
Contains the overlay display status, shape, size/position, game age rating, and warning messages (general/styled). Since it is readonly struct (value type), the GC handles it, so there is no need to manually disable it.
Since this is a one-time callback, it must be called after rendering is complete.
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 | Read (Property) | The overlay is currently displayed (SHOW: Show overlay, HIDE: Hide overlay). The value is EStoveOverlayMode. |
OverlayType | int | Read (Property) | This is the overlay type (0 = black, 1 = white). |
OverlayScale | float | Read (Property) | This is the overlay scale (0.0 to 1.0). |
OverlayOpacity | float | Read (Property) | This is the overlay opacity (0.0 to 1.0). |
AgeRating | int | Read (Property) | These are the game age ratings (0 = All Ages, 12 = Ages 12 and up, 16 = Ages 16 and up, 18 = Ages 18 and up). |
Msg | string | Read (Property) | This is a warning about excessive engagement. |
StyledMsg | string | Read (Property) | This is a style (translation) warning message containing markup tags such as <b> and <color=#RRGGBBAA>. It is used for rich text rendering. |
ElapsedMinutes | int | Read (Property) | This is the cumulative play time for the game (in minutes). |
ExposureTime | int | Read (Property) | This is the message display time (in seconds). |
ExpandAnimationTime | float | Read (Property) | This is the duration (in seconds) of the animation that expands the overlay when switching between "Show" and "Expand." |
DisplayPositionX | float | Read (Property) | The x-coordinate of the message's display position. Measured from the left edge of the screen (0.0 to 1.0). |
DisplayPositionY | float | Read (Property) | The y-coordinate of the message's display position. Relative to the top of the screen (0.0 to 1.0). |
Language | string | Read (Property) | These are language codes for font selection (e.g., "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;
// Please implement the logic for when the action is successful. (Show, hide, or expand the overlay depending on the `overlayMode`.)
}
else
{
// Please implement the logic for when a failure occurs.
}
}
Stove_VietnamOverimmersionNotification(OnVietnamOverimmersionNotificationCallback);
Notes
- This API is specific to Vietnam, and since it is a one-time callback, it must be called after rendering is complete.
OverlayModeuses the value EStoveOverlayMode and also supportsk_EStoveOverlayMode_Expanded(expanded view).ElapsedMinutesrepresents minutes. Be careful not to confuse it with IStoveOverImmersionInfo.ElapsedHours, which represent hours.
See Also
Stove_AccessTokenRenewed
Kind Function · Module Base · Version 3.5.0
Description
When the AccessToken is renewed, the newly issued token is passed via a callback. This is used when specific actions need to be taken at the time the token is renewed.
Declaration
public static void Stove_AccessTokenRenewed(OnAccessTokenRenewedCallback onFinished)
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
onFinished | OnAccessTokenRenewedCallback | N | Callback to receive the results |
Returns
None
Callback
public delegate void OnAccessTokenRenewedCallback(IStoveCallbackResult callbackResult, IStoveAccessToken token);
| Name | Type | Description |
|---|---|---|
callbackResult | IStoveCallbackResult | Call Results |
token | IStoveAccessToken | Information on newly issued tokens. Query using the AccessToken and ExpireIn (in seconds) properties. |
This callback runs on the thread that called Stove_RunCallback(). It is passed repeatedly each time the AccessToken is renewed.
Error Codes
| Code | Name | Description | Show to User | In-Game Message |
|---|---|---|---|---|
| 0 | k_EStoveCommonResultCode_Success | Success | x | |
| 5 | k_EStoveCommonResultCode_InvalidParam | onFinished is null (an internal value that is not actually passed because there is no callback) (Check whether a callback has been registered) | x | |
| 16 | k_EStoveCommonResultCode_BaseNotInitialized | SDK not initialized (Check if Stove_Initialize() was called) | x | |
| 253 | k_EStoveCommonResultCode_UnmanagedException | An unknown exception occurred within the SDK (check the logs) | O | A temporary issue has occurred. Please try again. [OK] |
| 254 | k_EStoveCommonResultCode_ManagedException | Pass to the callback when an exception occurs in Rapper (check the log) | O | There was a temporary issue. Please try again. [OK] |
| 306 | k_EStoveResultCode_RenewTokenMaxRetryCountExceeded | The limit on the number of token renewal retries has been exceeded (lower layer) (prompting a logout and relogin) | O | The network connection is unstable. Please check your network status and try again. [OK] |
Complete list: EStoveCommonResultCode, EStoveResultCode
Example
using static Stove.PCSDK.V3.Base;
Stove_AccessTokenRenewed((callbackResult, token) =>
{
if (callbackResult.Result.IsSuccessful)
{
// Please implement the logic for a successful outcome.
string newAccessToken = token.AccessToken;
int expireIn = token.ExpireIn;
}
else
{
// Please implement the logic for when an error occurs.
}
});
Notes
- This is a callback that is called repeatedly every time the token is renewed. It is not a one-time callback.
- If you don't need the latest token every time, you can simply look it up using Stove_GetAccessToken as needed.
See Also
Stove_AutoPopup
Kind Function · Module View · Version 3.5.0
Description
Stove_AutoPopup retrieves a list of automatic pop-ups (announcements, events, etc.) from the server and displays them in a web view.
This must be called after the SDK initialization (Stove_Initialize). If there is no popup data to display, the WebView will close without opening.
In all cases where the application terminates without creating any popups (e.g., failure to initialize, no search results, failure to create a web view, etc.),
k_EStoveCommonResultCode_PopupNotCreated(33) is passed toonDestroyonce. This code serves as an internal cleanup signal and is not passed toonFinished.
Declaration
public static void Stove_AutoPopup(IStovePopupParam popupParam, OnViewPopupCallback onFinished, OnViewPopupDestroyCallback onDestroy);
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
popupParam | IStovePopupParam | Y | This parameter specifies the WebView display mode (WebViewMode). |
onFinished | OnViewPopupCallback | Y | This is a callback that is called when the popup has finished displaying (or has closed because there is no data to display). |
onDestroy | OnViewPopupDestroyCallback | N | This is a callback that is called when the pop-up WebView is completely destroyed. |
Returns
None (void function)
Callback
public delegate void OnViewPopupCallback(IStoveCallbackResult callbackResult);
public delegate void OnViewPopupDestroyCallback(IStoveCallbackResult callbackResult);
| Name | Type | Description |
|---|---|---|
callbackResult | IStoveCallbackResult | Here are the results of the call. Check callbackResult.Result.IsSuccessful to see if it was successful. |
onFinished is called once when the display of a popup (or termination due to no data) is confirmed. onDestroy is called once when the WebView has completely disappeared from the screen. Both callbacks run on the thread that called Stove_RunCallback().
Error Codes
onFinished
| Code | Name | Description | Show to User | In-Game Message |
|---|---|---|---|---|
| 0 | k_EStoveCommonResultCode_Success | Success | x | |
| 17 | k_EStoveCommonResultCode_NotInitialized | The pop-up feature is not initialized (check for a preceding call to Stove_Initialize) | x | |
| 60 | k_EStoveCommonResultCode_ViewUiNotInitialized | The pop-up UI subsystem is not initialized (defensive code that does not occur during normal flow) (If this issue occurs, contact SDK Support) | x | |
| 65 | k_EStoveCommonResultCode_WebviewCloseAllFail | Failed to close all existing WebViews before creating a popup (check logs) | x | |
| 67 | k_EStoveCommonResultCode_NoPopupData | The server query returned 0 results to display in the pop-up (treated as a normal termination). | O | There is no pop-up configuration information, so there is no window to display. [OK] |
| 62 | k_EStoveCommonResultCode_WebviewCreateFail | Failed to create WebView (Please retry or check the logs) | x | |
| 63 | k_EStoveCommonResultCode_WebviewLoadUrlFail | WebView URL Load Failed (Please check your network connection and try again) | x | |
| 254 | k_EStoveCommonResultCode_ManagedException | Passed as a callback when an exception occurs in the Rapper (check log callbackResult.Result.ExceptionMessage) | O | A temporary issue has occurred. Please try again. [OK] |
onDestroy
| Code | Name | Description | Show to User | In-Game Message |
|---|---|---|---|---|
| 0 | k_EStoveCommonResultCode_Success | Normal Exit of WebView | x | |
| 66 | k_EStoveCommonResultCode_WebviewCloseFail | Failed to close WebView (Check the log) | x | |
| 33 | k_EStoveCommonResultCode_PopupNotCreated | The WebView was not created and terminated prematurely (internal cleanup signal) (no separate handling required) | x | |
| 254 | k_EStoveCommonResultCode_ManagedException | Passed as a callback when an exception occurs in the Rapper (see callbackResult.Result.ExceptionMessage log) | O | A temporary issue has occurred. Please try again. [OK] |
Complete list: 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)
{
// Please implement the logic for a successful outcome.
}
else
{
// Please implement the logic for when an error occurs.
}
},
onDestroy: (callbackResult) =>
{
if (callbackResult.Result.IsSuccessful)
{
// Please implement the logic for a successful outcome.
}
else
{
// Please implement the logic for when an error occurs. (You may ignore Code 33.)
}
});
Notes
- In the Popup API, the
onFinishedandonDestroycallbacks are called independently. Even ifonFinishedfails,onDestroyis always called. 33(PopupNotCreated) is a code specific toonDestroyand is never passed toonFinished.
See Also
Stove_CloseAllPopups
Kind Function · Module Base · Version 3.5.0
Description
Closes all pop-ups displayed by the SDK. This applies to both IAP pop-ups and View pop-ups.
Following the integration of the single binary (BaseSDK Consolidation),
Stove_IAP_CloseAllPopups()andStove_View_CloseAllPopups()—which were previously separate for each module—have been replaced by this single function. Now, a single call closes all SDK pop-ups at once.
Declaration
public static IStoveResult Stove_CloseAllPopups()
Parameters
None
Returns
| Type | Description |
|---|---|
IStoveResult | Call result. Check whether the call was successful using result.IsSuccessful. |
Error Codes
| Code | Name | Description | Show to User | In-Game Message |
|---|---|---|---|---|
| 0 | k_EStoveCommonResultCode_Success | Success | x | |
| 60 | k_EStoveCommonResultCode_ViewUiNotInitialized | The pop-up UI subsystem is not initializing (as confirmed by the IAP team) (Check the MainWndHandle setting in Stove_Initialize()) | x | |
| 65 | k_EStoveCommonResultCode_WebviewCloseAllFail | Failed to Close WebViews in Bulk (Based on IAP Findings) (Retry) | x | |
| 253 | k_EStoveCommonResultCode_UnmanagedException | An unknown exception occurred within the SDK (check the logs and try again) | O | A temporary issue has occurred. Please try again. [OK] |
| 254 | k_EStoveCommonResultCode_ManagedException | Passed as a return value when an exception occurs in Rapper (check the log and retry) | O | There was a temporary issue. Please try again. [OK] |
Complete list: EStoveCommonResultCode
Example
using static Stove.PCSDK.V3.Base;
IStoveResult result = Stove_CloseAllPopups();
if (result.IsSuccessful)
{
// Please implement the logic for a successful outcome.
}
else
{
// Please implement the logic for when an error occurs.
}
Notes
- After integrating the single binary, both the IAP pop-up and the View pop-up are closed with a single call.
- Internally, CloseAllPopups is called for both modules in the order IAP → View; if the IAP fails, the IAP result is returned as-is, and if the IAP succeeds, the View’s result is returned (specific error codes on the View side are outside the scope of this document).
Stove_ConfirmPurchase
Kind Function · Module IAP · Version 3.5.0
Description
If the Operation value of Stove_StartPurchase is not k_EStovePurchaseOperation_WithWebViewAndConfirmResult, call this function after the payment is complete to finalize the purchase. Set confirmPurchaseParam.TxnMasterNo to the IStoveStartPurchaseOutcome.TxnMasterNo value received as a result of Stove_StartPurchase.
The final results are sent via the onFinished callback, along with a list of purchased items and information about the currency (charge) used for payment.
This must be called after initializing the SDK (Stove_Initialize).
Declaration
public static void Stove_ConfirmPurchase(IStoveConfirmPurchaseParam confirmPurchaseParam, OnConfirmPurchaseCallback onFinished)
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
confirmPurchaseParam | IStoveConfirmPurchaseParam | Y | Master number (TxnMasterNo) parameter for the transaction to be confirmed |
onFinished | OnConfirmPurchaseCallback | Y | Callback to receive the final results |
Returns
None
Callback
public delegate void OnConfirmPurchaseCallback(IStoveCallbackResult callbackResult, IStoveConfirmPurchaseOutcome outcome);
| Name | Type | Description |
|---|---|---|
callbackResult | IStoveCallbackResult | Call Results |
outcome | IStoveConfirmPurchaseOutcome | Final results. Includes IsConfirmed, PurchasedProducts, and ChargeInfos. |
It runs in the thread that called Stove_RunCallback(). It is passed only once per call.
Error Codes
| Code | Name | Description | Show to User | In-Game Message |
|---|---|---|---|---|
| 0 | k_EStoveCommonResultCode_Success | Success | x | |
| 17 | k_EStoveCommonResultCode_NotInitialized | Payment functionality is not initialized (preceding call to Stove_Initialize) | x | |
| 5 | k_EStoveCommonResultCode_InvalidParam | If onFinished is null, it is set internally but is not actually passed because there is no callback (for reference only; no separate handling required) | x | |
| 21 | k_EStoveCommonResultCode_NullEntity | Failure to retrieve language information — The only case where the error is passed directly without being converted to an exception (Retry; if the issue persists, contact the SDK team) | x | |
| 254 | k_EStoveCommonResultCode_ManagedException | Pass an exception as a callback when it occurs in Rapper (log as ExceptionMessage) | O | A temporary problem has occurred. Please try again. [OK] |
| 253 | k_EStoveCommonResultCode_UnmanagedException | An unknown exception occurred (check the logs and contact the SDK team) | O | A temporary issue has occurred. Please try again. [OK] |
Complete List: EStoveCommonResultCode
Example
using static Stove.PCSDK.V3.IAP;
// txnMasterNo is the value of IStoveStartPurchaseOutcome.TxnMasterNo in the Stove_StartPurchase() result.
var confirmPurchaseParam = new IStoveConfirmPurchaseParam
{
TxnMasterNo = txnMasterNo
};
Stove_ConfirmPurchase(confirmPurchaseParam, (callbackResult, outcome) =>
{
if (callbackResult.Result.IsSuccessful && outcome.IsConfirmed)
{
// Please implement the logic for a successful outcome.
foreach (var purchasedProduct in outcome.PurchasedProducts)
{
long productId = purchasedProduct.ProductId;
}
}
else
{
// Please implement the logic for when an error occurs.
}
});
Notes
- This function is asynchronous, and the result is returned only via the
onFinishedcallback. - If
Operationof Stove_StartPurchase isk_EStovePurchaseOperation_WithWebViewAndConfirmResult, the SDK automatically calls this function, so there is no need to call it separately. - Whether
outcome.IsConfirmedandcallbackResultare successful is a separate matter. Even if the call itself was successful, ifIsConfirmedisfalse, the purchase has not been finalized.
See Also
Stove_CouponPopup
Kind Function · Module View · Version 3.5.0
Description
Stove_CouponPopup retrieves the list of coupon pop-ups from the server and displays it in a web view.
This must be called after initializing the SDK (Stove_Initialize). If there is no popup data to display, the WebView will close without opening.
In all cases where the app exits without creating any popups (e.g., no connection to the world, failed initialization, no search results, failed WebView creation, etc.),
k_EStoveCommonResultCode_PopupNotCreated(33) is passed toonDestroyonce. This code serves as an internal cleanup signal and is not passed toonFinished.
Declaration
public static void Stove_CouponPopup(IStovePopupParam popupParam, OnViewPopupCallback onFinished, OnViewPopupDestroyCallback onDestroy);
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
popupParam | IStovePopupParam | Y | This parameter specifies the WebView display mode (WebViewMode). |
onFinished | OnViewPopupCallback | Y | This is a callback that is called when the popup has finished displaying (or has closed because there is no data to display). |
onDestroy | OnViewPopupDestroyCallback | N | This is a callback that is called when the pop-up WebView is completely destroyed. |
Returns
None (void function)
Callback
public delegate void OnViewPopupCallback(IStoveCallbackResult callbackResult);
public delegate void OnViewPopupDestroyCallback(IStoveCallbackResult callbackResult);
| Name | Type | Description |
|---|---|---|
callbackResult | IStoveCallbackResult | Here are the results of the call. Check callbackResult.Result.IsSuccessful to see if it was successful. |
onFinished is called once when the popup display (or termination due to no data) is confirmed. onDestroy is called once when the WebView has completely disappeared from the screen. Both callbacks run on the thread that called Stove_RunCallback().
Error Codes
onFinished
| Code | Name | Description | Show to User | In-Game Message |
|---|---|---|---|---|
| 0 | k_EStoveCommonResultCode_Success | Success | x | |
| 5 | k_EStoveCommonResultCode_InvalidParam | Not connected to the game server (world) (internal WorldId is an empty string) (Recall after connecting to the game server) | x | |
| 17 | k_EStoveCommonResultCode_NotInitialized | The pop-up feature is not initialized (check for a previous call to Stove_Initialize) | x | |
| 60 | k_EStoveCommonResultCode_ViewUiNotInitialized | The pop-up UI subsystem is not initialized (defensive code that does not occur during normal flow) (If this issue occurs, please contact the SDK support team) | x | |
| 65 | k_EStoveCommonResultCode_WebviewCloseAllFail | Failure to close all existing web views before creating a pop-up (check logs) | x | |
| 62 | k_EStoveCommonResultCode_WebviewCreateFail | Failed to create WebView (Please retry or check the logs) | x | |
| 63 | k_EStoveCommonResultCode_WebviewLoadUrlFail | WebView URL loading failed (Please check your network connection and try again) | x | |
| 67 | k_EStoveCommonResultCode_NoPopupData | The server query returned 0 coupon pop-ups to display (treated as a normal termination) | O | There is no pop-up configuration information, so there is no window to display. [OK] |
| 254 | k_EStoveCommonResultCode_ManagedException | Passed as a callback when an exception occurs in Rapper (check the callbackResult.Result.ExceptionMessage log) | O | A temporary issue has occurred. Please try again. [OK] |
onDestroy
| Code | Name | Description | Show to User | In-Game Message |
|---|---|---|---|---|
| 0 | k_EStoveCommonResultCode_Success | Normal Exit of WebView | x | |
| 66 | k_EStoveCommonResultCode_WebviewCloseFail | Failed to Close WebView (Check Log) | x | |
| 33 | k_EStoveCommonResultCode_PopupNotCreated | The WebView is not created and terminates prematurely (including when not connected to the world, internal cleanup signal) (No separate handling required) | x | |
| 254 | k_EStoveCommonResultCode_ManagedException | Passes an exception to the callback when it occurs in Rapper (check the callbackResult.Result.ExceptionMessage log) | O | A temporary issue has occurred. Please try again. [OK] |
Complete list: 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)
{
// Please implement the logic for a successful outcome.
}
else
{
// Please implement the logic for when a failure occurs.
}
},
onDestroy: (callbackResult) =>
{
if (callbackResult.Result.IsSuccessful)
{
// Please implement the logic for a successful outcome.
}
else
{
// Please implement the logic for when an error occurs. (You may ignore Code 33.)
}
});
Notes
- Unlike other pop-up APIs,
Stove_CouponPopupverifies whether the user is connected to the game server (world). If called while not connected, it fails withInvalidParam(5). 33(PopupNotCreated) is a code specific toonDestroyand is never passed toonFinished.
See Also
Stove_FetchInventory
Kind Function · Module IAP · Version 3.5.0
Description
Retrieves the purchase history of the currently logged-in user. The list of retrieved inventory items is passed to the onFinished callback.
This must be called after the SDK initialization (Stove_Initialize).
Declaration
public static void Stove_FetchInventory(OnFetchInventoryCallback onFinished)
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
onFinished | OnFetchInventoryCallback | Y | Callback to receive the list of inventory items |
Returns
None
Callback
public delegate void OnFetchInventoryCallback(IStoveCallbackResult callbackResult, IStoveInventoryList list);
| Name | Type | Description |
|---|---|---|
callbackResult | IStoveCallbackResult | Call Results |
list | IStoveInventoryList | List of Retrieved Inventory Items |
It runs in the thread that called Stove_RunCallback(). It is passed only once per call. Since list is owned by the SDK and is invalidated once the callback finishes, you must copy any necessary values within the callback.
Error Codes
| Code | Name | Description | Show to User | In-Game Message |
|---|---|---|---|---|
| 0 | k_EStoveCommonResultCode_Success | Success | x | |
| 17 | k_EStoveCommonResultCode_NotInitialized | Payment functionality is not initialized (Stove_Initialize was called first) | x | |
| 5 | k_EStoveCommonResultCode_InvalidParam | If onFinished is null, it is set internally but is not actually passed because there is no callback (for reference only; no separate handling required) | x | |
| 254 | k_EStoveCommonResultCode_ManagedException | Pass an exception to the callback when an exception occurs in Rapper (logged as ExceptionMessage) | O | A temporary issue has occurred. Please try again. [OK] |
| 253 | k_EStoveCommonResultCode_UnmanagedException | An unknown exception occurred (check the logs and contact the SDK team) | O | A temporary issue has occurred. Please try again. [OK] |
Complete list: EStoveCommonResultCode
Example
using static Stove.PCSDK.V3.IAP;
Stove_FetchInventory((callbackResult, list) =>
{
if (callbackResult.Result.IsSuccessful)
{
// Please implement the logic for when the operation succeeds.
foreach (var item in list)
{
string productName = item.ProductName;
}
}
else
{
// Please implement the logic for when an error occurs.
}
});
Notes
- This function is asynchronous, and the result is returned only via the
onFinishedcallback.
See Also
Stove_FetchProducts
Kind Function · Module IAP · Version 3.5.0
Description
Retrieves a list of products that match the category ID and page conditions passed as fetchProductParam. The retrieved product list is passed to the onFinished callback.
If you leave the category ID blank, products from all categories will be displayed. To display only products from a specific category, set CategoryId—obtained from Stove_FetchShopCategories—as the filter.
This must be called after the SDK initialization (Stove_Initialize).
Declaration
public static void Stove_FetchProducts(IStoveFetchProductsParam fetchProductParam, OnFetchProductsCallback onFinished)
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
fetchProductParam | IStoveFetchProductsParam | Y | Category Filter and Page Condition Parameters |
onFinished | OnFetchProductsCallback | Y | Callback to receive query results |
Returns
None
Callback
public delegate void OnFetchProductsCallback(IStoveCallbackResult callbackResult, IStoveProductList list);
| Name | Type | Description |
|---|---|---|
callbackResult | IStoveCallbackResult | Call Results |
list | IStoveProductList | List of Products Found |
It runs in the thread that called Stove_RunCallback(). It is passed only once per call. Since list is owned by the SDK and is invalidated once the callback completes, you must copy any necessary values within the callback.
Error Codes
| Code | Name | Description | Show to User | In-Game Message |
|---|---|---|---|---|
| 0 | k_EStoveCommonResultCode_Success | Success | x | |
| 17 | k_EStoveCommonResultCode_NotInitialized | Payment functionality is not initialized (Stove_Initialize was called first) | x | |
| 5 | k_EStoveCommonResultCode_InvalidParam | If onFinished is null, this code is set internally, but since there is no callback, it is not actually passed to the calling code (for reference only; no separate handling required). | x | |
| 254 | k_EStoveCommonResultCode_ManagedException | Pass an exception to the callback when it occurs in Rapper (log as ExceptionMessage) | O | A temporary issue has occurred. Please try again. [OK] |
| 253 | k_EStoveCommonResultCode_UnmanagedException | An unknown exception occurred (check the logs and contact the SDK team) | O | A temporary issue has occurred. Please try again. [OK] |
Complete list: 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)
{
// Please implement the logic for a successful outcome.
foreach (var product in list)
{
long productId = product.ProductId;
string productName = product.ProductName;
}
}
else
{
// Please implement the logic for when a failure occurs.
}
});
Notes
- This call performs the extended operation for retrieving a product list (corresponding to the
Exvariant in the old interface). - This function is asynchronous, and the result is returned only via the
onFinishedcallback. - Since
fetchProductParamis a regular struct, its values are simply filled in and passed as-is, without the need for separate creation or destruction APIs. - The
ProductIdfor the retrieved product is used as the product identifier for the order line item when calling Stove_StartPurchase. - The
DiscountStartDate/DiscountEndDate/SalesStartDate/SalesEndDatevalues forIStoveProductare all Unix epoch values in milliseconds relative to UTC.
See Also
Stove_FetchShopCategories
Kind Function · Module IAP · Version 3.5.0
Description
Stove_FetchShopCategories retrieves the list of categories registered in the game store in a tree structure. Each category contains information on its parent category ID, display order, and tree depth, allowing the store UI to be organized hierarchically.
This must be called after the SDK initialization (Stove_Initialize).
Declaration
public static void Stove_FetchShopCategories(OnFetchShopCategoriesCallback onFinished)
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
onFinished | OnFetchShopCategoriesCallback | Y | Callback to receive the query results |
Returns
None
Callback
public delegate void OnFetchShopCategoriesCallback(IStoveCallbackResult callbackResult, IStoveShopCategoryList list);
| Name | Type | Description |
|---|---|---|
callbackResult | IStoveCallbackResult | Call Results |
list | IStoveShopCategoryList | List of Categories Found |
This runs in the thread that called Stove_RunCallback(). It is passed only once per call. Since list is owned by the SDK and is invalidated once the callback completes, you must copy any necessary values within the callback.
Error Codes
| Code | Name | Description | Show to User | In-Game Message |
|---|---|---|---|---|
| 0 | k_EStoveCommonResultCode_Success | Success | x | |
| 17 | k_EStoveCommonResultCode_NotInitialized | Payment functionality is not initialized (preceding call Stove_Initialize) | x | |
| 5 | k_EStoveCommonResultCode_InvalidParam | If onFinished is equal to null, this code is set internally, but since there is no callback, it is not actually passed to the calling side (for reference only; no separate handling required). | x | |
| 254 | k_EStoveCommonResultCode_ManagedException | Pass an exception to the callback when it occurs in the Rapper (log as ExceptionMessage) | O | A temporary issue has occurred. Please try again. [OK] |
| 253 | k_EStoveCommonResultCode_UnmanagedException | An unknown exception occurred (check the logs and contact the SDK team) | O | A temporary issue has occurred. Please try again. [OK] |
Complete List: EStoveCommonResultCode
Example
using static Stove.PCSDK.V3.IAP;
Stove_FetchShopCategories((callbackResult, list) =>
{
if (callbackResult.Result.IsSuccessful)
{
// Please implement the logic for a successful outcome.
foreach (var category in list)
{
// Use `category.CategoryId`, `category.CategoryName`, and so on.
}
}
else
{
// Please implement the logic for when an error occurs.
}
});
Notes
- This function is asynchronous, and the result is returned only via the
onFinishedcallback. CategoryIdin the category you viewed can be used as aIStoveFetchProductsParam.CategoryIdfilter for Stove_FetchProducts.
See Also
Stove_FetchTermsAgreement
Kind Function · Module IAP · Version 3.5.0
Description
Checks whether the user has agreed to the current terms and conditions. If the user has already agreed, outcome.IsAgreed—which is passed as onFinished—is true, and outcome.Url is empty. If the user has not agreed, the behavior varies depending on the value of termsParam.Operation (EStoveTermsOperation).
k_EStoveTermsOperation_Default: The caller must open the terms and conditions page directly usingoutcome.Url, which is passed toonFinished.k_EStoveTermsOperation_WithWebView: The SDK displays the Terms and Conditions page directly in Stove Webview.
This must be called after initializing the SDK (Stove_Initialize).
Declaration
public static void Stove_FetchTermsAgreement(IStoveFetchTermsAgreementParam termsParam, OnFetchTermsAgreementCallback onFinished, OnIAPPopupDestroyCallback onDestroy)
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
termsParam | IStoveFetchTermsAgreementParam | Y | Terms and Conditions Lookup: Action and WebView Layout Parameters |
onFinished | OnFetchTermsAgreementCallback | Y | Callback to receive consent status and the URL for the terms and conditions |
onDestroy | OnIAPPopupDestroyCallback | N | A callback that is triggered when all pop-ups created by this call have been closed |
Returns
None
Callback
public delegate void OnFetchTermsAgreementCallback(IStoveCallbackResult callbackResult, IStoveTermsAgreementOutcome outcome);
public delegate void OnIAPPopupDestroyCallback(IStoveCallbackResult callbackResult);
| Name | Type | Description |
|---|---|---|
callbackResult | IStoveCallbackResult | Call Results |
outcome | IStoveTermsAgreementOutcome | Includes IsAgreed (consent status) and Url (terms and conditions page URL; an empty string if consent has already been given) |
It runs in the thread that called Stove_RunCallback().
onFinishedis passed only once per call.- If a WebView is opened at
onDestroyand then atOperation == WithWebView, this event is fired after the WebView is closed. Even if the WebView is terminated without ever being created, this event is fired once along withPopupNotCreated(33).
Error Codes
| Callback | Code | Name | Description | Show to User | In-Game Message |
|---|---|---|---|---|---|
| onFinished | 0 | k_EStoveCommonResultCode_Success | Success (including cases where consent has already been given) | x | |
| onFinished | 17 | k_EStoveCommonResultCode_NotInitialized | Payment functionality is not initialized (preceding call Stove_Initialize) | x | |
| onFinished | 5 | k_EStoveCommonResultCode_InvalidParam | If onFinished is null, it is set internally but is not actually passed because there is no callback (for reference only; no separate handling required) | x | |
| onFinished | 60 | k_EStoveCommonResultCode_ViewUiNotInitialized | The terms page must be opened in a WebView, but the View UI is not initialized (contact the SDK team) | x | |
| onFinished | 65 | k_EStoveCommonResultCode_WebviewCloseAllFail | Failed to clean up the existing WebView before opening a new one (retrying) | x | |
| onFinished | 62 | k_EStoveCommonResultCode_WebviewCreateFail | Failed to create Terms and Conditions WebView (Retrying) | x | |
| onFinished | 64 | k_EStoveCommonResultCode_WebviewCreateCookieFail | Failed to set language cookie (Retrying) | O | You must agree to the terms and conditions to complete your purchase. We were unable to load the terms and conditions screen. Please try again. [OK] |
| onFinished | 63 | k_EStoveCommonResultCode_WebviewLoadUrlFail | Failed to load the URL in the Terms and Conditions WebView (Retrying) | x | |
| onFinished | 254 | k_EStoveCommonResultCode_ManagedException | Pass an exception to the callback when it occurs in Rapper (logged as ExceptionMessage) | O | A temporary issue has occurred. Please try again. [OK] |
| onFinished | 253 | k_EStoveCommonResultCode_UnmanagedException | An unknown exception occurred (Check the logs and contact the SDK team) | O | A temporary problem has occurred. Please try again. [OK] |
| onDestroy | 33 | k_EStoveCommonResultCode_PopupNotCreated | One call in an early failure path where the WebView was never created and the process terminated (can be ignored) | x | |
| onDestroy | 66 | k_EStoveCommonResultCode_WebviewCloseFail | Failure to close WebView internally upon normal termination (logged for reference) | x |
Complete list: 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)
{
// Please implement the logic for a successful outcome.
if (!outcome.IsAgreed)
{
// Please open the Terms and Conditions page at outcome.Url.
}
}
else
{
// Please implement the logic for when a failure occurs.
}
},
(callbackResult) =>
{
// Please implement the logic that runs when all the Terms and Conditions page pop-ups have been closed.
});
Notes
- This function is asynchronous, and the result is returned only via the
onFinishedcallback. - If the user has already agreed to the terms and conditions, the process will end immediately with a success status (
IsAgreed = true) without displaying a pop-up. This is a normal flow, not an error code. - Using
Operation == WithWebVieweliminates the need for the caller to implement the Terms and Conditions page UI directly.
See Also
Stove_GetAccessToken
Kind Function · Module Base · Version 3.5.0
Description
Retrieves the currently valid AccessToken. The SDK automatically renews the token internally to ensure that a valid token is always available.
Declaration
public static IStoveResult Stove_GetAccessToken(ref string accessToken, uint length)
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
accessToken | ref string | Y | A variable to receive the AccessToken string. Any value assigned before the call is ignored and replaced with the resulting string after the call. |
length | uint | Y | The length of the string buffer used internally |
Returns
| Type | Description |
|---|---|
IStoveResult | Call result. Check whether the call was successful using result.IsSuccessful. |
Error Codes
| Code | Name | Description | Show to User | In-Game Message |
|---|---|---|---|---|
| 0 | k_EStoveCommonResultCode_Success | Success | x | |
| 5 | k_EStoveCommonResultCode_InvalidParam | The buffer is null, its length is 0, or the buffer is too small, causing the string to be truncated (increase the length value and try again) | x | |
| 16 | k_EStoveCommonResultCode_BaseNotInitialized | SDK not initialized (Check if Stove_Initialize() was called) | x | |
| 19 | k_EStoveCommonResultCode_InvalidAccessToken | Token is invalid (prompting you to log in again) | O | Your login session has expired. Please close the game and restart it. [OK] |
| 253 | k_EStoveCommonResultCode_UnmanagedException | An unknown exception occurred within the SDK (check the logs and try again) | O | A temporary issue has occurred. Please try again. [OK] |
| 254 | k_EStoveCommonResultCode_ManagedException | Pass the return value when an exception occurs in the rapper (check the log and retry) | O | There was a temporary issue. Please try again. [OK] |
Complete list: EStoveCommonResultCode
If you receive the code below, you must exit the game. The game cannot proceed normally.
19k_EStoveCommonResultCode_InvalidAccessToken— The game has closed due to a expired login session; please restart it.
Example
using static Stove.PCSDK.V3.Base;
string accessToken = null;
IStoveResult result = Stove_GetAccessToken(ref accessToken, 1024);
if (result.IsSuccessful)
{
// Please implement the logic for a successful outcome. Use the accessToken.
}
else
{
// Please implement the logic for when an error occurs.
}
Notes
- Since the SDK automatically renews tokens internally, this function always returns a valid token.
- Do not keep the retrieved token in the game and reuse it later. The SDK renews the token periodically, so a stored value can expire. Call this function every time a token is needed and use the value returned at that moment.
- Use Stove_AccessTokenRenewed to receive a separate notification when the token is renewed.
See Also
Stove_GetGds
Kind Function · Module Base · Version 3.5.0
Description
Retrieves the logged-in user's GDS (country and time zone) information.
Declaration
public static IStoveResult Stove_GetGds(ref IStoveGds gds)
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
gds | IStoveGds | Y | Variable ref for receiving GDS information |
Returns
| Type | Description |
|---|---|
IStoveResult | Call result. Check whether the call succeeded using result.IsSuccessful. |
Error Codes
| Code | Name | Description | Show to User | In-Game Message |
|---|---|---|---|---|
| 0 | k_EStoveCommonResultCode_Success | Success | x | |
| 5 | k_EStoveCommonResultCode_InvalidParam | outGds is null (surface-level validation) (check parameters) | x | |
| 16 | k_EStoveCommonResultCode_BaseNotInitialized | SDK not initialized (Check if Stove_Initialize() was called) | x | |
| 253 | k_EStoveCommonResultCode_UnmanagedException | An unknown exception occurred within the SDK (check the log and try again) | O | A temporary issue has occurred. Please try again. [OK] |
| 254 | k_EStoveCommonResultCode_ManagedException | Passed as a return value when an exception occurs in the rapper (check the log and retry) | O | A temporary issue has occurred. Please try again. [OK] |
Complete list: EStoveCommonResultCode
Example
using static Stove.PCSDK.V3.Base;
IStoveGds gds = default;
IStoveResult result = Stove_GetGds(ref gds);
if (result.IsSuccessful)
{
// Please implement the logic for the success case.
string nation = gds.Nation;
string timezone = gds.Timezone;
}
else
{
// Please implement the logic for when an error occurs.
}
Notes
- If the system was unable to determine the country code from the IP address and used the default country code,
gds.IsDefaultistrue.
See Also
Stove_GetSignin
Kind Function · Module Base · Version 3.5.0
Description
Retrieves the sign-in information for the logged-in user.
Declaration
public static IStoveResult Stove_GetSignin(ref IStoveSignin signin)
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
signin | IStoveSignin | Y | Variable ref to receive registration information |
Returns
| Type | Description |
|---|---|
IStoveResult | Call result. Check whether the call was successful using result.IsSuccessful. |
Error Codes
| Code | Name | Description | Show to User | In-Game Message |
|---|---|---|---|---|
| 0 | k_EStoveCommonResultCode_Success | Success | x | |
| 5 | k_EStoveCommonResultCode_InvalidParam | outSignin is null (surface-level verification) (check parameters) | x | |
| 16 | k_EStoveCommonResultCode_BaseNotInitialized | SDK not initialized (Check if Stove_Initialize() was called) | x | |
| 253 | k_EStoveCommonResultCode_UnmanagedException | An unknown exception occurred within the SDK (Please check the logs and try again) | O | A temporary issue has occurred. Please try again. [OK] |
| 254 | k_EStoveCommonResultCode_ManagedException | Pass the return value when an exception occurs in Rapper (check the log and retry) | O | A temporary issue has occurred. Please try again. [OK] |
Complete List: EStoveCommonResultCode
Example
using static Stove.PCSDK.V3.Base;
IStoveSignin signin = default;
IStoveResult result = Stove_GetSignin(ref signin);
if (result.IsSuccessful)
{
// Please implement the logic for a successful outcome.
bool personVerified = signin.IsPersonVerified;
string providerCode = signin.ProviderCode;
}
else
{
// Please implement the logic for when an error occurs.
}
Notes
- Account types (
signin.AccountType) are identified by numeric codes. For example: 2 = Facebook, 3 = Twitter, 6 = Naver, 9 = Google+, 11 = Stove PC sign-up, 12 = Apple, 13 = LINE, 14 = LINE Games, 15 = Steam, 16 = VTCO, etc.
See Also
Stove_GetUser
Kind Function · Module Base · Version 3.5.0
Description
Retrieves information about the logged-in user.
Declaration
public static IStoveResult Stove_GetUser(ref IStoveUser user)
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
user | IStoveUser | Y | The ref variable that receives user information |
Returns
| Type | Description |
|---|---|
IStoveResult | Call result. Check the success status using result.IsSuccessful. |
Error Codes
| Code | Name | Description | Show to User | In-Game Message |
|---|---|---|---|---|
| 0 | k_EStoveCommonResultCode_Success | Success | x | |
| 5 | k_EStoveCommonResultCode_InvalidParam | outUser is null (surface-level validation) (check parameters) | x | |
| 16 | k_EStoveCommonResultCode_BaseNotInitialized | SDK not initialized (Check if Stove_Initialize() was called) | x | |
| 253 | k_EStoveCommonResultCode_UnmanagedException | An unknown exception occurred within the SDK (check the logs and try again) | O | A temporary issue has occurred. Please try again. [OK] |
| 254 | k_EStoveCommonResultCode_ManagedException | Pass the return value when an exception occurs in the rapper (check the log and retry) | O | A temporary issue has occurred. Please try again. [OK] |
Complete list: EStoveCommonResultCode
Example
using static Stove.PCSDK.V3.Base;
IStoveUser user = default;
IStoveResult result = Stove_GetUser(ref user);
if (result.IsSuccessful)
{
// Please implement the logic for a successful outcome.
string nickName = user.NickName;
ulong userId = user.UserId;
}
else
{
// Please implement the logic for when an error occurs.
}
Notes
- The logged-in user's country and region information is retrieved separately via Stove_GetGds, and their registration information via Stove_GetSignin.
See Also
Stove_GetVersion
Kind Function · Module Base · Version 3.5.0
Description
Retrieves the SDK version information.
Declaration
public static IStoveResult Stove_GetVersion(ref string version, uint length)
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
version | ref string | Y | A variable to receive the version string. Any value it holds before the call is ignored and replaced with the resulting string after the call. |
length | uint | Y | The length of the string buffer used internally |
Returns
| Type | Description |
|---|---|
IStoveResult | Call result. Check the success status at result.IsSuccessful. |
Error Codes
| Code | Name | Description | Show to User | In-Game Message |
|---|---|---|---|---|
| 0 | k_EStoveCommonResultCode_Success | Success | x | |
| 5 | k_EStoveCommonResultCode_InvalidParam | The buffer is null, its length is 0, or the buffer is too small, causing the string to be truncated (increase the value of length and try again) | x | |
| 251 | k_EStoveCommonResultCode_PcsdkDllNotFound | DLL path not found (Check SDK deployment status) | x | |
| 253 | k_EStoveCommonResultCode_UnmanagedException | An unknown exception occurred within the SDK (Please check the logs and try again) | O | A temporary issue has occurred. Please try again. [OK] |
| 254 | k_EStoveCommonResultCode_ManagedException | Pass the return value when an exception occurs in Rapper (check the log and retry) | O | A temporary issue has occurred. Please try again. [OK] |
Complete list: EStoveCommonResultCode
Example
using static Stove.PCSDK.V3.Base;
string version = null;
IStoveResult result = Stove_GetVersion(ref version, 64);
if (result.IsSuccessful)
{
// Please implement the logic for a successful outcome. Use the "version" parameter.
}
else
{
// Please implement the logic for when an error occurs.
}
Notes
- This function is synchronous and does not accept callbacks.
Stove_Initialize
Kind Function · Module Base · Version 3.5.0
Description
Initializes the SDK. This API has two overloads.
- Overload without arguments: Only initializes the SDK. Reuses the values for environment/gameId/appKey cached by
Stove_RestartAppIfNecessary(). - Overload that receives
IStoveInitializeParam: Following the single-binary (BaseSDK Consolidation) integration, the View and IAP modules are initialized alongside the SDK. The SDK portion similarly reuses the environment/gameId/appKey values cached byStove_RestartAppIfNecessary(). In addition, ifinitParam.MainWndHandleis not 0, the View module is initialized; ifinitParam.ShopKeyis not empty andMainWndHandleis also specified, the IAP module is initialized as well.
You must call Stove_RestartAppIfNecessary() before calling this API.
Declaration
public static IStoveResult Stove_Initialize()
public static IStoveResult Stove_Initialize(IStoveInitializeParam initParam)
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
initParam | IStoveInitializeParam | N | Parameters containing ShopKey and MainWndHandle. If omitted (parameter-less overload), only the SDK is initialized. |
Returns
| Type | Description |
|---|---|
IStoveResult | Call result. Check the success status at result.IsSuccessful. |
Error Codes
| Code | Name | Description | Show to User | In-Game Message |
|---|---|---|---|---|
| 0 | k_EStoveCommonResultCode_Success | Success | x | |
| 1 | k_EStoveCommonResultCode_Fail | Failed to parse required information (lower layer) (Please check the log and try again) | x | |
| 5 | k_EStoveCommonResultCode_InvalidParam | At least one of environment/gameId/appKey is empty (based on the cached value in Stove_RestartAppIfNecessary) (Check the call parameters in Stove_RestartAppIfNecessary) | x | |
| 18 | k_EStoveCommonResultCode_AlreadyInitialized | Already initialized (Retry after calling Stove_Uninitialize()) | x | |
| 251 | k_EStoveCommonResultCode_PcsdkDllNotFound | Failure to retrieve the internal version (GetVersion) is propagated as-is (Check SDK deployment status) | x | |
| 253 | k_EStoveCommonResultCode_UnmanagedException | An unknown exception occurred within the SDK (please check the logs and try again) | O | A temporary issue has occurred. Please try again. [OK] |
| 254 | k_EStoveCommonResultCode_ManagedException | Pass the return value when an exception occurs in the rapper (check the log and retry) | O | A temporary issue has occurred. Please try again. [OK] |
| 302 | k_EStoveResultCode_NotFoundRequiredInformation | Detect missing required parameters in the lower-level layer (TokenActor) (Check call parameters for Stove_RestartAppIfNecessary) | x | |
| 304 | k_EStoveResultCode_NeedStoveLauncher | Stove_RestartAppIfNecessary is not called first (Stove_RestartAppIfNecessary is called first) | O | The game is closing because it is not running through the Stove PC client. Please relaunch the game from the client. If you do not have the client installed, please install it from the Stove website.[OK] |
Complete list: EStoveCommonResultCode, EStoveResultCode
If you receive the code below, you must exit the game. The game cannot proceed normally.
304k_EStoveResultCode_NeedStoveLauncher— You'll need to restart the game after it closes
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)
{
// Please implement the logic for a successful outcome.
}
else
{
// Please implement the logic for when an error occurs.
}
Notes
IStoveInitializeParamIf the overload is successful, it also initializes the View/IAP sub-module. If that sub-module initialization fails, this API returns a failure with an IAP/View error code, but the SDK itself continues to function.- The
Environment/GameId/AppKeyfields, which were previously located inIStoveInitializeParam, have been moved toIStoveRestartAppIfNecessaryParaminStove_RestartAppIfNecessary. TheIStoveInitializeParamof this API contains only two fields:ShopKeyandMainWndHandle. - Be sure to call Stove_Uninitialize when exiting.
See Also
Stove_ManualPopup
Kind Function · Module View · Version 3.5.0
Description
Stove_ManualPopup retrieves the pop-up content specified by popupParam.ResourceKey from the server and displays it in the WebView. Unlike Stove_AutoPopup, it can be called arbitrarily by the game at any time.
This must be called after the SDK has been initialized (Stove_Initialize).
For all paths where the application terminates without creating any pop-ups (such as parameter errors, failure to initialize, no search results, or failure to create a web view),
k_EStoveCommonResultCode_PopupNotCreated(33) is passed once toonDestroy. This code serves as an internal cleanup signal and is not passed toonFinished.
Declaration
public static void Stove_ManualPopup(IStoveManualPopupParam popupParam, OnViewPopupCallback onFinished, OnViewPopupDestroyCallback onDestroy);
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
popupParam | IStoveManualPopupParam | Y | This parameter contains the WebView display mode (WebViewMode) and ResourceKey, which specifies the popup to display. |
onFinished | OnViewPopupCallback | Y | This is a callback that is called when the pop-up has finished displaying. |
onDestroy | OnViewPopupDestroyCallback | N | This is a callback that is called when the pop-up WebView is completely destroyed. |
Returns
None (void function)
Callback
public delegate void OnViewPopupCallback(IStoveCallbackResult callbackResult);
public delegate void OnViewPopupDestroyCallback(IStoveCallbackResult callbackResult);
| Name | Type | Description |
|---|---|---|
callbackResult | IStoveCallbackResult | Here are the results of the call. Check callbackResult.Result.IsSuccessful to see if it was successful. |
onFinished is called once when the popup is confirmed. onDestroy is called once when the WebView has completely disappeared from the screen. Both callbacks run on the thread that called Stove_RunCallback().
Error Codes
onFinished
| Code | Name | Description | Show to User | In-Game Message |
|---|---|---|---|---|
| 0 | k_EStoveCommonResultCode_Success | Success | x | |
| 5 | k_EStoveCommonResultCode_InvalidParam | popupParam.ResourceKey is an empty string (check the value of ResourceKey in the calling code) | x | |
| 17 | k_EStoveCommonResultCode_NotInitialized | The pop-up feature is not initialized (Check for a preceding call to Stove_Initialize) | x | |
| 60 | k_EStoveCommonResultCode_ViewUiNotInitialized | The pop-up UI subsystem is not initialized (defensive code that does not occur during normal flow) (If this issue occurs, contact the SDK support team) | x | |
| 65 | k_EStoveCommonResultCode_WebviewCloseAllFail | Failed to close all existing WebViews before creating a popup (check logs) | x | |
| 62 | k_EStoveCommonResultCode_WebviewCreateFail | Failed to create WebView (Please try again or check the logs) | x | |
| 63 | k_EStoveCommonResultCode_WebviewLoadUrlFail | WebView URL Load Failed (Please check your network connection and try again) | x | |
| 67 | k_EStoveCommonResultCode_NoPopupData | There are 0 pop-up records corresponding to ResourceKey (check the value of ResourceKey) | O | There is no pop-up configuration information, so there is no window to display. [OK] |
| 254 | k_EStoveCommonResultCode_ManagedException | Passed as a callback when an exception occurs in the rapper (check log callbackResult.Result.ExceptionMessage) | O | There was a temporary issue. Please try again. [OK] |
onDestroy
| Code | Name | Description | Show to User | In-Game Message |
|---|---|---|---|---|
| 0 | k_EStoveCommonResultCode_Success | Normal Exit of WebView | x | |
| 66 | k_EStoveCommonResultCode_WebviewCloseFail | Failed to close WebView (Check the log) | x | |
| 33 | k_EStoveCommonResultCode_PopupNotCreated | The WebView was not created and terminated prematurely (including parameter errors and internal cleanup signals) (No separate handling required) | x | |
| 254 | k_EStoveCommonResultCode_ManagedException | Pass to the callback when an exception occurs in Rapper (check the callbackResult.Result.ExceptionMessage log) | O | There was a temporary issue. Please try again. [OK] |
Complete list: 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)
{
// Please implement the logic for a successful outcome.
}
else
{
// Please implement the logic for when a failure occurs.
}
},
onDestroy: (callbackResult) =>
{
if (callbackResult.Result.IsSuccessful)
{
// Please implement the logic for when the operation is successful.
}
else
{
// Please implement the logic for when an error occurs. (You may ignore Code 33.)
}
});
Notes
- While
Stove_AutoPopupdisplays a pop-up automatically selected by the server,Stove_ManualPopuphas the game directly specify the pop-up content asResourceKey. 33(PopupNotCreated) is a code specific toonDestroyand is never passed toonFinished.
See Also
Stove_NewsPopup
Kind Function · Module View · Version 3.5.0
Description
Stove_NewsPopup retrieves the list of news (announcement) pop-ups from the server and displays it in a WebView.
This must be called after the SDK initialization (Stove_Initialize). If there is no popup data to display, the WebView will close without opening.
In all cases where the application terminates without creating any popups (e.g., failure to initialize, no search results, failure to create a web view, etc.),
k_EStoveCommonResultCode_PopupNotCreated(33) is passed once toonDestroy. This code serves as an internal cleanup signal and is not passed toonFinished.
Declaration
public static void Stove_NewsPopup(IStovePopupParam popupParam, OnViewPopupCallback onFinished, OnViewPopupDestroyCallback onDestroy);
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
popupParam | IStovePopupParam | Y | This parameter specifies the WebView display mode (WebViewMode). |
onFinished | OnViewPopupCallback | Y | This is a callback that is called when the popup has finished displaying (or has closed because there is no data to display). |
onDestroy | OnViewPopupDestroyCallback | N | This is a callback that is called when the pop-up WebView is completely destroyed. |
Returns
None (void function)
Callback
public delegate void OnViewPopupCallback(IStoveCallbackResult callbackResult);
public delegate void OnViewPopupDestroyCallback(IStoveCallbackResult callbackResult);
| Name | Type | Description |
|---|---|---|
callbackResult | IStoveCallbackResult | Here are the results of the call. Check callbackResult.Result.IsSuccessful to see if it was successful. |
onFinished is called once when the display of a popup (or termination due to no data) is confirmed. onDestroy is called once when the WebView has completely disappeared from the screen. Both callbacks are executed on the thread that called Stove_RunCallback().
Error Codes
onFinished
| Code | Name | Description | Show to User | In-Game Message |
|---|---|---|---|---|
| 0 | k_EStoveCommonResultCode_Success | Success | x | |
| 17 | k_EStoveCommonResultCode_NotInitialized | The pop-up feature is not initialized (check for a preceding call to Stove_Initialize) | x | |
| 60 | k_EStoveCommonResultCode_ViewUiNotInitialized | The pop-up UI subsystem is not initialized (defensive code that does not occur during normal flow) (If this issue occurs, contact SDK Support) | x | |
| 65 | k_EStoveCommonResultCode_WebviewCloseAllFail | Failed to close all existing WebViews before creating a popup (check logs) | x | |
| 62 | k_EStoveCommonResultCode_WebviewCreateFail | Failed to create WebView (Please retry or check the logs) | x | |
| 63 | k_EStoveCommonResultCode_WebviewLoadUrlFail | WebView URL Load Failed (Please check your network connection and try again) | x | |
| 67 | k_EStoveCommonResultCode_NoPopupData | The server query returned 0 results to display in the pop-up (treated as a normal termination) | O | There is no pop-up configuration information, so there is no window to display. [OK] |
| 254 | k_EStoveCommonResultCode_ManagedException | Passed as a callback when an exception occurs in Rapper (check log callbackResult.Result.ExceptionMessage) | O | A temporary issue has occurred. Please try again. [OK] |
onDestroy
| Code | Name | Description | Show to User | In-Game Message |
|---|---|---|---|---|
| 0 | k_EStoveCommonResultCode_Success | Normal Exit from WebView | x | |
| 66 | k_EStoveCommonResultCode_WebviewCloseFail | Failed to close WebView (Check the log) | x | |
| 33 | k_EStoveCommonResultCode_PopupNotCreated | The WebView was not created and terminated prematurely (internal cleanup signal) (no additional action required) | x | |
| 254 | k_EStoveCommonResultCode_ManagedException | Passed as a callback when an exception occurs in Rapper (see log callbackResult.Result.ExceptionMessage) | O | A temporary issue has occurred. Please try again. [OK] |
Complete list: 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)
{
// Please implement the logic for a successful outcome.
}
else
{
// Please implement the logic for when a failure occurs.
}
},
onDestroy: (callbackResult) =>
{
if (callbackResult.Result.IsSuccessful)
{
// Please implement the logic for a successful outcome.
}
else
{
// Please implement the logic for when an error occurs. (You may ignore Code 33.)
}
});
Notes
33(PopupNotCreated) is a code specific toonDestroyand is never passed toonFinished.- The callback error code structure is the same as
Stove_CouponPopup.
See Also
Stove_OpenExternalUrl
Kind Function · Module Base · Version 3.5.0
Description
Opens the URL in an external browser. When opening an Onstove-related domain (e.g., *.onstove.com), SSO is handled at the same time.
Declaration
public static void Stove_OpenExternalUrl(string url, OnOpenExternalUrlCallback onFinished)
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
url | string | Y | The URL you want to open |
onFinished | OnOpenExternalUrlCallback | Y | Callback to receive the results |
Returns
None
Callback
public delegate void OnOpenExternalUrlCallback(IStoveCallbackResult callbackResult);
| Name | Type | Description |
|---|---|---|
callbackResult | IStoveCallbackResult | Call Results |
This callback runs in the thread that called Stove_RunCallback(). It is a one-time callback.
Error Codes
| Code | Name | Description | Show to User | In-Game Message |
|---|---|---|---|---|
| 0 | k_EStoveCommonResultCode_Success | Success (URL opened successfully) | x | |
| 5 | k_EStoveCommonResultCode_InvalidParam | onFinished is null (check if a callback is registered) | x | |
| 16 | k_EStoveCommonResultCode_BaseNotInitialized | SDK not initialized (Check if Stove_Initialize() was called) | x | |
| 253 | k_EStoveCommonResultCode_UnmanagedException | The browser failed to launch, or an unknown exception occurred while it was running (Check the URL format and browser installation status) | O | A temporary issue has occurred. Please try again. [OK] |
| 254 | k_EStoveCommonResultCode_ManagedException | Pass to the callback when an exception occurs in the rapper (check the log) | O | A temporary issue has occurred. Please try again. [OK] |
Complete list: EStoveCommonResultCode
Example
using static Stove.PCSDK.V3.Base;
Stove_OpenExternalUrl("https://www.onstove.com", (callbackResult) =>
{
if (callbackResult.Result.IsSuccessful)
{
// Please implement the logic for the success case.
}
else
{
// Please implement the logic for when an error occurs.
}
});
Notes
- When opening Onstove-related domains (such as
*.onstove.com), SSO is handled simultaneously.
Stove_OverImmersionNotification
Kind Function · Module Base · Version 3.5.0
Description
This service sends hourly reminders via callback to users subject to South Korea's anti-excessive-use regulations. This is an API exclusively for South Korea.
This callback is not a one-time event; it is sent to the target user repeatedly every hour.
Declaration
public static void Stove_OverImmersionNotification(OnOverImmersionNotificationCallback onFinished)
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
onFinished | OnOverImmersionNotificationCallback | N | Callback to receive the results |
Returns
None
Callback
public delegate void OnOverImmersionNotificationCallback(IStoveCallbackResult callbackResult, IStoveOverImmersionInfo overImmersion);
| Name | Type | Description |
|---|---|---|
callbackResult | IStoveCallbackResult | Call Results |
overImmersion | IStoveOverImmersionInfo | Information on notifications to prevent excessive gaming. Provides warning messages (Msg), cumulative playtime (ElapsedHours, in hours), and message display duration (ExposureTime, in seconds). |
This callback runs on the thread that called Stove_RunCallback(). It is delivered to the target user repeatedly every hour.
Error Codes
| Code | Name | Description | Show to User | In-Game Message |
|---|---|---|---|---|
| 0 | k_EStoveCommonResultCode_Success | Success | x | |
| 5 | k_EStoveCommonResultCode_InvalidParam | onFinished is null (an internal value that is not actually passed because there is no callback) (Check whether a callback has been registered) | x | |
| 16 | k_EStoveCommonResultCode_BaseNotInitialized | SDK not initialized (Check if Stove_Initialize() was called) | x | |
| 31 | k_EStoveCommonResultCode_NotSupportedCountry | The logged-in user's GDS country is not South Korea (kr) (country-specific branch handling) | x | |
| 253 | k_EStoveCommonResultCode_UnmanagedException | An unknown exception occurred within the SDK (check the logs) | O | There was a temporary issue. Please try again. [OK] |
| 254 | k_EStoveCommonResultCode_ManagedException | Pass the exception to the callback when it occurs in the rapper (check the log) | O | A temporary problem has occurred. Please try again. [OK] |
Complete list: EStoveCommonResultCode
Example
using static Stove.PCSDK.V3.Base;
Stove_OverImmersionNotification((callbackResult, overImmersion) =>
{
if (callbackResult.Result.IsSuccessful)
{
// Please implement the logic for a successful outcome.
string msg = overImmersion.Msg;
int exposureTime = overImmersion.ExposureTime;
}
else
{
// Please implement the logic for when a failure occurs.
}
});
Notes
- This API is for use in Korea only.
- This is a callback that is repeatedly sent to the target user every hour.
See Also
Stove_PCBangCheckStatus
Kind Function · Module PCBang · Version 3.5.0
Description
Checks the status (Premium status, PSN, product code) of the PC Bang currently in use by the user. This is a one-time lookup API that can be called at any time, independently of Stove_PCBangLogin.
This must be called after the SDK has been initialized.
Declaration
public static void Stove_PCBangCheckStatus(OnPCBangCheckStatusCallback onFinished)
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
onFinished | OnPCBangCheckStatusCallback | Y | Callback to receive the query results |
Returns
None
Callback
public delegate void OnPCBangCheckStatusCallback(IStoveCallbackResult callbackResult, IStovePCBangStatus status);
| Name | Type | Description |
|---|---|---|
callbackResult | IStoveCallbackResult | Call Result |
status | IStovePCBangStatus | Search results for "Premium status, PSN, product code" |
It is executed once in the thread that called Stove_RunCallback().
The callback runs on the thread that called Stove_RunCallback(). It is not an internal SDK thread.
Error Codes
| Code | Name | Description | Show to User | In-Game Message |
|---|---|---|---|---|
| 0 | k_EStoveCommonResultCode_Success | Success | x | |
| 5 | k_EStoveCommonResultCode_InvalidParam | onFinished is null (Check if a callback is registered) | x | |
| 17 | k_EStoveCommonResultCode_NotInitialized | PC Bang Function not initialized (check for preceding calls: Stove_Initialize) | x | |
| 22 | k_EStoveCommonResultCode_HttpError | The HTTP status code for the request is not 200 (Check the network status and try again) | O | The network connection is unstable. Please check your network status and try again. [OK] |
| 23 | k_EStoveCommonResultCode_ResponseError | The response does not contain a "code" or "message" field, or the server returned a business error (code != 0) (check ExternalError and try again) | O | The network connection is unstable. Please check your network connection and try again. [OK] |
| 25 | k_EStoveCommonResultCode_ResponseValueIsNull | The "value" or "data" in the response is JSON null (check the server response) | O | The network connection is unstable. Please check your network status and try again. [OK] |
| 249 | k_EStoveCommonResultCode_NetworkTransportError | Network transport layer error (e.g., WinHTTP) (Please check the network status and try again) | x | |
| 254 | k_EStoveCommonResultCode_ManagedException | Pass the exception to the callback when an exception occurs in the rapper (log the exception message and retry) | O | A temporary issue has occurred. Please try again. [OK] |
In the event of a failure, status's PremiumCheck is invalidated and passed as an error status value.
Complete List: EStoveCommonResultCode
Example
using static Stove.PCSDK.V3.PCBang;
PCBang.Stove_PCBangCheckStatus((callbackResult, status) =>
{
if (callbackResult.Result.IsSuccessful)
{
// Please implement the logic for a successful outcome.
}
else
{
// Please implement the logic for when an error occurs.
}
});
Notes
- This is a one-time query API that can be called even without first calling
Stove_PCBangLogin.
See Also
Stove_PCBangLogin
Kind Function · Module PCBang · Version 3.5.0
Description
Log in the game user to the PC Bang service. If successful, the onUserLogin callback is called once, and thereafter, the onRefreshBenefit callback is called repeatedly every 4 minutes to deliver updated benefit information.
This must be called after initializing the SDK. The onRefreshBenefit callback remains registered until you call logout (Stove_PCBangLogout).
onRefreshBenefitis called every 4 minutes, not only for PC Bang Premium users but also for users with a Free account. Even if the refresh fails, the repeated calls do not stop.
Declaration
public static void Stove_PCBangLogin(OnPCBangLoginCallback onUserLogin, OnRefreshPCBangBenefitCallback onRefreshBenefit)
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
onUserLogin | OnPCBangLoginCallback | N | A callback that receives the result of the first successful login once |
onRefreshBenefit | OnRefreshPCBangBenefitCallback | N | A callback to receive updated benefit information at 4-minute intervals after a successful login |
If either of the two callbacks is null, only a login request is sent, and no callbacks are registered (the result cannot be received).
Returns
None
Callback
public delegate void OnPCBangLoginCallback(IStoveCallbackResult callbackResult, IStovePCBangLoginOutcome loginOutcome);
public delegate void OnRefreshPCBangBenefitCallback(IStoveCallbackResult callbackResult, IStovePCBangBenefitInfo benefitInfo);
| Name | Type | Description |
|---|---|---|
callbackResult | IStoveCallbackResult | Call Results |
loginOutcome | IStovePCBangLoginOutcome | Login results (Premium status, PSN, remaining time) passed to onUserLogin |
benefitInfo | IStovePCBangBenefitInfo | Updated benefit information (premium status, time remaining) passed to onRefreshBenefit |
Both callbacks run on the thread that called Stove_RunCallback(). onUserLogin is called only once when the initial login is complete, and onRefreshBenefit is called repeatedly every 4 minutes after a successful login and until the user logs out.
Error Codes
| Code | Name | Description | Show to User | In-Game Message | Callback |
|---|---|---|---|---|---|
| 0 | k_EStoveCommonResultCode_Success | Success | x | Both | |
| 5 | k_EStoveCommonResultCode_InvalidParam | onFinished is null (Check if a callback is registered) | x | Both | |
| 17 | k_EStoveCommonResultCode_NotInitialized | PC Bang Function not initialized (check for Stove_Initialize preceding call) | x | Both | |
| 22 | k_EStoveCommonResultCode_HttpError | The HTTP status code for the request is not 200 (Please check the network status and try again) | O | The network connection is unstable. Please check your network status and try again. [OK] | Both |
| 23 | k_EStoveCommonResultCode_ResponseError | The response does not contain a "code/message" field, or the server returned a business error (code != 0) (check ExternalError and try again) | O | The network connection is unstable. Please check your network status and try again. [OK] | Both |
| 25 | k_EStoveCommonResultCode_ResponseValueIsNull | The value/data in the response is JSON null (check the server response) | O | The network connection is unstable. Please check your network connection and try again. [OK] | Both |
| 26 | k_EStoveCommonResultCode_ResponseInvalidValueFormat | The decrypted response string failed JSON parsing (please try again; contact us if the issue persists) | O | The network connection is unstable. Please check your network status and try again. [OK] | Both |
| 249 | k_EStoveCommonResultCode_NetworkTransportError | Network transport layer error (WinHTTP, etc.) (Check network status and try again) | x | Both | |
| 254 | k_EStoveCommonResultCode_ManagedException | Pass an exception to the callback when an exception occurs in the rapper (log the exception message and retry) | O | A temporary issue has occurred. Please try again. [OK] | Both |
Complete list: EStoveCommonResultCode
Example
using static Stove.PCSDK.V3.PCBang;
PCBang.Stove_PCBangLogin(
(callbackResult, loginOutcome) =>
{
if (callbackResult.Result.IsSuccessful)
{
// Please implement the logic for the success case.
}
else
{
// Please implement the logic for when a failure occurs.
}
},
(callbackResult, benefitInfo) =>
{
if (callbackResult.Result.IsSuccessful)
{
// Please implement the logic for processing the updated benefit information.
}
else
{
// Please implement the logic for when an error occurs.
}
});
Notes
onRefreshBenefitis called repeatedly every 4 minutes after a successful login, and it continues to be called not only when the user is in PC Bang Premium status but also when in Free status. Even if a single renewal fails, the repeated calls do not stop.- The exception callback for
onUserLoginuses method codek_EStovePCBangMethodCode_Login(3000), while the exception callback foronRefreshBenefitusesk_EStovePCBangMethodCode_RefreshBenefit(3003) — please note that the two callbacks have different method codes. - The
onRefreshBenefitregistration remains active from the moment you successfully log in until you callStove_PCBangLogout.
See Also
Stove_PCBangLogout
Kind Function · Module PCBang · Version 3.5.0
Description
Log out the user logged in as Stove_PCBangLogin from the PC Bang service. If successful, the recurring benefit renewal (onRefreshBenefit) initiated by Stove_PCBangLogin will be stopped.
This must be called after the SDK has been initialized.
Declaration
public static void Stove_PCBangLogout(OnPCBangLogoutCallback onFinished)
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
onFinished | OnPCBangLogoutCallback | Y | Callback to receive the logout result |
Returns
None
Callback
public delegate void OnPCBangLogoutCallback(IStoveCallbackResult callbackResult);
| Name | Type | Description |
|---|---|---|
callbackResult | IStoveCallbackResult | Call Results |
It is executed once in the thread that called Stove_RunCallback().
The callback runs in the thread that called Stove_RunCallback(). It is not an internal SDK thread.
Error Codes
| Code | Name | Description | Show to User | In-Game Message |
|---|---|---|---|---|
| 0 | k_EStoveCommonResultCode_Success | Success | x | |
| 5 | k_EStoveCommonResultCode_InvalidParam | onFinished is null (Check if a callback is registered) | x | |
| 17 | k_EStoveCommonResultCode_NotInitialized | PC Bang Function not initialized (check for Stove_Initialize preceding calls) | x | |
| 22 | k_EStoveCommonResultCode_HttpError | The HTTP status code for the request is not 200 (Please check the network status and try again) | O | The network connection is unstable. Please check your network status and try again. [OK] |
| 23 | k_EStoveCommonResultCode_ResponseError | The response does not contain a "code/message" field, or the server returned a business error (code != 0) (check ExternalError and try again) | O | The network connection is unstable. Please check your network status and try again. [OK] |
| 25 | k_EStoveCommonResultCode_ResponseValueIsNull | The "value" or "data" in the response is JSON null (check the server response) | O | The network connection is unstable. Please check your network status and try again. [OK] |
| 249 | k_EStoveCommonResultCode_NetworkTransportError | Network transport layer error (e.g., WinHTTP) (Please check the network status and try again) | x | |
| 254 | k_EStoveCommonResultCode_ManagedException | Pass an exception to the callback when an exception occurs in the rapper (log the exception message and retry) | O | A temporary issue has occurred. Please try again. [OK] |
Since logging out does not involve the AES decryption step, k_EStoveCommonResultCode_ResponseInvalidValueFormat(26) does not occur.
Complete List: EStoveCommonResultCode
Example
using static Stove.PCSDK.V3.PCBang;
PCBang.Stove_PCBangLogout((callbackResult) =>
{
if (callbackResult.Result.IsSuccessful)
{
// Please implement the logic for a successful outcome.
}
else
{
// Please implement the logic for when an error occurs.
}
});
Notes
- When logout is successful, the recursive call starting at
Stove_PCBangLoginand ending atonRefreshBenefitis terminated. - Although there is no need to call the logout function separately when the game ends, we recommend calling it during a flow that explicitly marks the end of PC Bang usage (such as returning to the character selection screen).
See Also
Stove_RestartAppIfNecessary
Kind Function · Module Base · Version 3.5.0
Description
This API checks whether the game executable was launched through the Stove launcher. If it was not launched through the launcher, the SDK internally launches the launcher to restart the app, and the current process is terminated.
This API must be called before Stove_Initialize(). Stove_Initialize() reuses the environment/gameId/appKey values cached by this API.
If a restart is required, the current process will terminate, so the code following this API call may not execute.
Declaration
public static void Stove_RestartAppIfNecessary(IStoveRestartAppIfNecessaryParam initParam, OnRestartAppIfNecessaryCallback onFinished)
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
initParam | IStoveRestartAppIfNecessaryParam | Y | Parameters containing Environment, GameId, AppKey, WaitTimeMilliSec, LaunchStoveLauncher, and PlatformName |
onFinished | OnRestartAppIfNecessaryCallback | Y | Callback to receive the results |
Returns
None
Callback
public delegate void OnRestartAppIfNecessaryCallback(IStoveCallbackResult callbackResult, IStoveRestartAppIfNecessaryOutcome outcome);
| Name | Type | Description |
|---|---|---|
callbackResult | IStoveCallbackResult | Call Results |
outcome | IStoveRestartAppIfNecessaryOutcome | Use the IsRestartRequired property to indicate whether a restart is required |
This callback runs in the thread that called Stove_RunCallback(). It is a one-time callback, and the result is returned even if the process can continue without requiring a restart.
Error Codes
| Code | Name | Description | Show to User | In-Game Message |
|---|---|---|---|---|
| 0 | k_EStoveCommonResultCode_Success | Success | x | |
| 29 | k_EStoveCommonResultCode_AsyncOperationInProgress | The previous asynchronous retry thread is still running (retry after the previous call completes) | x | |
| 30 | k_EStoveCommonResultCode_BaseUninitialized | The IPC state in the waiting state has returned to its initial state (retry) | x | |
| 253 | k_EStoveCommonResultCode_UnmanagedException | An unknown exception occurred within the SDK (Please check the logs and try again) | O | A temporary issue has occurred. Please try again. [OK] |
| 254 | k_EStoveCommonResultCode_ManagedException | Pass to the callback when an exception occurs in the Rapper (check the log and retry) | O | A temporary issue has occurred. Please try again. [OK] |
| 307 | k_EStoveResultCode_IpcConnectFailed | Failed to establish an IPC connection with the launcher (check if the launcher is running and try again) | O | The game is closing because it is not running through the Stove PC client. Please launch the game again from the client. If you do not have the client installed, please install it from the Stove website. [OK] |
| 308 | k_EStoveResultCode_IpcAesKeyNotReceived | Unable to receive the AES key via IPC (Check if the launcher is running, then try again) | O | The game is closing because it is not running through the Stove PC client. Please launch the game again from the client. If you do not have the client installed, please install it from the Stove website.[OK] |
| 309 | k_EStoveResultCode_IpcTimeout | Communication with the launcher exceeded WaitTimeMilliSec (Increase the timeout and retry) | O | The game is closing because it is not running through the Stove PC client. Please launch the game again from the client. If you do not have the client installed, please install it from the Stove website.[OK] |
Complete list: EStoveCommonResultCode, EStoveResultCode
If you receive the code below, you must exit the game immediately. The game cannot proceed normally.
307k_EStoveResultCode_IpcConnectFailed— You'll need to restart the game after it closes.308k_EStoveResultCode_IpcAesKeyNotReceived— You will need to restart the game after it closes.309k_EStoveResultCode_IpcTimeout— You will need to restart the game after it closes.
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)
{
// Since the system is currently restarting via the launcher, no further action is required.
}
else
{
// Since it is already running via the launcher, please proceed with Stove_Initialize().
}
}
else
{
// Please implement the logic for when an error occurs.
}
});
Notes
- With the separation of the old
IStoveInitializeParam, theEnvironment/GameId/AppKeyfields were moved toIStoveRestartAppIfNecessaryParamin this API. These fields are not included in the parameters of the newStove_Initialize. - You must call this API before calling
Stove_Initialize().
See Also
Stove_RunCallback
Kind Function · Module Base · Version 3.5.0
Description
This dispatches the results (callbacks) of asynchronous API calls. It must be called from the game's UI (main) thread.
Callbacks registered by the SDK are executed on the thread that called this function, not on an internal SDK thread.
This function must be called within the game loop (e.g., every frame or every tick). Do not use it by repeatedly calling this function alone in the form
while(true).
Declaration
public static void Stove_RunCallback()
Parameters
None
Returns
None
Error Codes
None
Example
using static Stove.PCSDK.V3.Base;
// Example of a Game Loop
while (isGameRunning)
{
// ... Game Logic ...
Stove_RunCallback();
// ... rendering and the rest of the loop logic ...
}
Notes
- Callbacks for all asynchronous APIs are executed on the thread that called this function.
- Callbacks must be called periodically within the game loop to ensure they are processed without delay.
- To specify a wait time, use Stove_RunCallbackWithTimeout.
See Also
Stove_RunCallbackWithTimeout
Kind Function · Module Base · Version 3.5.0
Description
This is the timeout version of Stove_RunCallback. You can specify the wait time using timeoutMillisec.
This function must be called from the game's UI (main) thread, and any registered callbacks will execute on the thread that called this function.
Declaration
public static void Stove_RunCallbackWithTimeout(uint timeoutMillisec)
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
timeoutMillisec | uint | Y | Wait Time (milliseconds) |
Returns
None
Error Codes
None
Example
using static Stove.PCSDK.V3.Base;
// Game Loop Example (Maximum 10 ms Wait)
while (isGameRunning)
{
// ... Game Logic ...
Stove_RunCallbackWithTimeout(10);
// ... rendering and the rest of the loop logic ...
}
Notes
- Callbacks for all asynchronous APIs are executed on the thread that called this function.
- Use Stove_RunCallback for general purposes, and use this function when you need to control the wait time.
See Also
Stove_SendLog
Kind Function · Module Log · Version 3.5.0
Description
Log entries are recorded in the local database and then sent to the Stove log backend.
This must be called after the SDK has been initialized.
A successful callback (
onFinished) indicates that the log was successfully written to the local SQLite database (SUCCESS), but does not mean that the actual transmission to the server has been completed. Transmission to the server is handled asynchronously via a separate internal retransmission path, and any HTTP or network failures during that process are not reported to this callback.
Declaration
public static void Stove_SendLog(IStoveSendLogParam logSendParam, OnSendLogCallback onFinished)
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
logSendParam | IStoveSendLogParam | Y | Content of the log entries to be transmitted |
onFinished | OnSendLogCallback | Y | Callback to receive the results of local DB logs |
Returns
None
Callback
public delegate void OnSendLogCallback(IStoveCallbackResult callbackResult);
| Name | Type | Description |
|---|---|---|
callbackResult | IStoveCallbackResult | Call Results (Local DB Log Results) |
It is executed once in the thread that called Stove_RunCallback().
The callback runs in the thread that called Stove_RunCallback(). It is not an internal SDK thread.
Error Codes
| Code | Name | Description | Show to User | In-Game Message |
|---|---|---|---|---|
| 0 | k_EStoveCommonResultCode_Success | Record successfully saved to the local database (does not mean the data has been successfully transferred to the server) | x | |
| 5 | k_EStoveCommonResultCode_InvalidParam | onFinished is null (Check if a callback is registered) | x | |
| 5 | k_EStoveCommonResultCode_InvalidParam | logSendParam.Contents is not empty, but it is not in a valid JSON format (check the JSON format of the Contents value) | x | |
| 17 | k_EStoveCommonResultCode_NotInitialized | Log functionality is not initialized (check for preceding call Stove_Initialize) | x | |
| 44 | k_EStoveCommonResultCode_LocalDbWriteFailed | Failed to write log records to the local database (check disk space/permissions) | x | |
| 82 | k_EStoveCommonResultCode_PayloadSizeExceeded | Log content encoded in UTF-8 exceeds 50 KB (Contents size reduction) | x | |
| 253 | k_EStoveCommonResultCode_UnmanagedException | An unknown exception occurred during execution (retry after logging the exception) | O | A temporary issue has occurred. Please try again. [OK] |
| 254 | k_EStoveCommonResultCode_ManagedException | Pass the exception to the callback when an exception occurs in the rapper (log the exception message and retry) | O | A temporary issue has occurred. Please try again. [OK] |
Complete list: 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)
{
// Please implement the logic for a successful outcome.
}
else
{
// Please implement the logic for when the operation fails.
}
});
Notes
- This callback only returns the results as of the time the data was written to the local database. Even if the transmission to the server actually fails (due to an HTTP error, network error, etc.), the game client is not notified, and the system is designed to retry sending the failed logs during the next transmission attempt.
- Most string fields are optional. Fields for which you have not set a value should be left as
null. Sincenulland an empty string ("") are sent to the server as different values, they should not be used interchangeably. - The SDK automatically populates and sends device information, GDS information, session ID, timestamp, game ID, and environment details. The game side only needs to fill in the fields listed in IStoveSendLogParam.
- Except for local DB write failures (such as
k_EStoveCommonResultCode_LocalDbWriteFailed), this callback almost always returns a success. We recommend that you do not design your game logic to branch based on the result of this callback.
See Also
- None
Stove_SetGameProfile
Kind Function · Module Base · Version 3.5.0
Description
Set up your game profile information.
Declaration
public static IStoveResult Stove_SetGameProfile(IStoveSetGameProfileParam gameProfile)
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
gameProfile | IStoveSetGameProfileParam | Y | Game Profile Information (WorldId, CharacterNo) |
Returns
| Type | Description |
|---|---|
IStoveResult | Call result. Check the success status at result.IsSuccessful. |
Error Codes
| Code | Name | Description | Show to User | In-Game Message |
|---|---|---|---|---|
| 0 | k_EStoveCommonResultCode_Success | Success | x | |
| 5 | k_EStoveCommonResultCode_InvalidParam | gameProfileParams is null (surface-level validation) (check parameters) | x | |
| 16 | k_EStoveCommonResultCode_BaseNotInitialized | SDK failed to initialize (Check if Stove_Initialize() was called) | x | |
| 253 | k_EStoveCommonResultCode_UnmanagedException | An unknown exception occurred within the SDK (check the logs and try again) | O | A temporary issue has occurred. Please try again. [OK] |
| 254 | k_EStoveCommonResultCode_ManagedException | Pass the return value when an exception occurs in the rapper (check the log and retry) | O | There was a temporary issue. Please try again. [OK] |
Complete list: 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)
{
// Please implement the logic for the success case.
}
else
{
// Please implement the logic for when an error occurs.
}
Notes
gameProfile.CharacterNorepresents the character number. The field name "worldId Length" in the previousStoveGameProfileParamswas a typographical error in the documentation.
Stove_SetLanguage
Kind Function · Module Base · Version 3.5.0 · Deprecated
Description
This API has been deprecated. Please use Stove_SetLanguageEx instead.
Sets the language used by PCSDK to the enumeration value EStoveLocale. Since the new flat C interface no longer provides an enumeration-based language configuration API, this function internally converts the enumeration value to a string and then delegates to the same native API used by Stove_SetLanguageEx.
Declaration
[Obsolete("Use Stove_SetLanguageEx(string language) instead.")]
public static IStoveResult Stove_SetLanguage(EStoveLocale language)
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
language | EStoveLocale | Y | The language to set. It is internally converted to a string and passed to the native API. |
Returns
| Type | Description |
|---|---|
IStoveResult | Call result. Check the success status using result.IsSuccessful. |
Error Codes
| Code | Name | Description | Show to User | In-Game Message |
|---|---|---|---|---|
| 0 | k_EStoveCommonResultCode_Success | Success | x | |
| 5 | k_EStoveCommonResultCode_InvalidParam | Detected as an unsupported language (Check the list of supported languages) | x | |
| 16 | k_EStoveCommonResultCode_BaseNotInitialized | SDK not initialized (Check if Stove_Initialize() was called) | x | |
| 253 | k_EStoveCommonResultCode_UnmanagedException | An unknown exception occurred within the SDK (check the logs and try again) | O | A temporary issue has occurred. Please try again. [OK] |
| 254 | k_EStoveCommonResultCode_ManagedException | Pass the return value when an exception occurs in the rapper (check the log and retry) | O | There was a temporary issue. Please try again. [OK] |
Complete list: EStoveCommonResultCode
Example
using static Stove.PCSDK.V3.Base;
IStoveResult result = Stove_SetLanguage(EStoveLocale.k_EStoveLocale_Ko);
if (result.IsSuccessful)
{
// Please implement the logic for a successful outcome.
}
else
{
// Please implement the logic for when an error occurs.
}
Notes
- This API is deprecated. You should use Stove_SetLanguageEx in new code.
- This function is synchronous and does not accept callbacks.
See Also
Stove_SetLanguageEx
Kind Function · Module Base · Version 3.5.0
Description
Sets the language to be used by PCSDK as a string. Since the enumeration-based Stove_SetLanguage has been deprecated, you must use this function to set the language.
Declaration
public static IStoveResult Stove_SetLanguageEx(string language)
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
language | string | Y | Language Information String |
Returns
| Type | Description |
|---|---|
IStoveResult | Call result. Check whether the call succeeded using result.IsSuccessful. |
Error Codes
| Code | Name | Description | Show to User | In-Game Message |
|---|---|---|---|---|
| 0 | k_EStoveCommonResultCode_Success | Success | x | |
| 5 | k_EStoveCommonResultCode_InvalidParam | This string has been identified as an unsupported language (check the list of supported languages) | x | |
| 16 | k_EStoveCommonResultCode_BaseNotInitialized | SDK not initialized (Check if Stove_Initialize() was called) | x | |
| 253 | k_EStoveCommonResultCode_UnmanagedException | An unknown exception occurred within the SDK (check the logs and try again) | O | A temporary problem has occurred. Please try again. [OK] |
| 254 | k_EStoveCommonResultCode_ManagedException | Pass the return value when an exception occurs in the rapper (check the log and retry) | O | A temporary issue has occurred. Please try again. [OK] |
Complete List: EStoveCommonResultCode
Example
using static Stove.PCSDK.V3.Base;
IStoveResult result = Stove_SetLanguageEx("ko");
if (result.IsSuccessful)
{
// Please implement the logic for a successful outcome.
}
else
{
// Please implement the logic for when an error occurs.
}
Notes
- This function is synchronous and does not accept callbacks.
- This function replaces the enumeration-based Stove_SetLanguage.
See Also
Stove_SetPopupDisallowed
Kind Function · Module View · Version 3.5.0
Description
Stove_SetPopupDisallowed stores the popup specified by disallowedParam.PopupId locally so that it will not be displayed again for the number of days specified by disallowedParam.Days.
This must be called after initializing the SDK (Stove_Initialize).
Declaration
public static void Stove_SetPopupDisallowed(IStoveSetPopupDisallowedParam disallowedParam, OnSetPopupDisallowedCallback onFinished);
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
disallowedParam | IStoveSetPopupDisallowedParam | Y | This parameter contains the pop-up identifier to suppress (PopupId) and the suppression period (Days, in days). |
onFinished | OnSetPopupDisallowedCallback | Y | This is a callback that receives the processing results. |
Returns
None (void function)
Callback
public delegate void OnSetPopupDisallowedCallback(IStoveCallbackResult callbackResult);
| Name | Type | Description |
|---|---|---|
callbackResult | IStoveCallbackResult | Here are the results of the call. Check callbackResult.Result.IsSuccessful to see if it was successful. |
onFinished is called once. It runs in the thread that called Stove_RunCallback().
Error Codes
| Code | Name | Description | Show to User | In-Game Message |
|---|---|---|---|---|
| 0 | k_EStoveCommonResultCode_Success | Successfully recorded suppression information in the local configuration file | x | |
| 1 | k_EStoveCommonResultCode_Fail | Failed to write local configuration file (please retry or check the log) | x | |
| 17 | k_EStoveCommonResultCode_NotInitialized | The pop-up feature is not initialized (check for a preceding call to Stove_Initialize) | x | |
| 254 | k_EStoveCommonResultCode_ManagedException | Passed as a callback when an exception occurs in Rapper (check the callbackResult.Result.ExceptionMessage log) | O | A temporary issue has occurred. Please try again. [OK] |
Complete list: EStoveCommonResultCode
Example
using static Stove.PCSDK.V3.View;
var disallowedParam = new IStoveSetPopupDisallowedParam
{
PopupId = 12345,
Days = 7
};
Stove_SetPopupDisallowed(disallowedParam, (callbackResult) =>
{
if (callbackResult.Result.IsSuccessful)
{
// Please implement the logic for a successful outcome.
}
else
{
// Please implement the logic for when an error occurs.
}
});
Notes
- This function is not an API that immediately closes the pop-up displayed on the screen, but rather an API that prevents that pop-up from reappearing for a specified period of time.
- Blocking information is stored in a local file (
popupConfig.json), which is then referenced whenStove_AutoPopupand others filter the pop-up list. - This API uses a single-callback structure without the
onDestroycallback.
See Also
Stove_ShutdownNotification
Kind Function · Module Base · Version 3.5.0
Description
A shutdown notification is sent via callback to users subject to the shutdown.
This API is not limited to South Korea. It works for users outside of South Korea as well, provided their accounts are subject to the shutdown policy.
Declaration
public static void Stove_ShutdownNotification(OnShutdownNotificationCallback onFinished)
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
onFinished | OnShutdownNotificationCallback | N | Callback to receive the results |
Returns
None
Callback
public delegate void OnShutdownNotificationCallback(IStoveCallbackResult callbackResult, IStoveShutdownInfo shutdown);
| Name | Type | Description |
|---|---|---|
callbackResult | IStoveCallbackResult | Call Results |
shutdown | IStoveShutdownInfo | Shutdown notification information. Provides the notification message (Msg), message display duration (ExposureTime, in seconds), and time remaining until shutdown (InadvanceMinutes, in minutes). |
This callback runs in the thread that called Stove_RunCallback().
Error Codes
| Code | Name | Description | Show to User | In-Game Message |
|---|---|---|---|---|
| 0 | k_EStoveCommonResultCode_Success | Success | x | |
| 5 | k_EStoveCommonResultCode_InvalidParam | onFinished is null (an internal value that is not actually passed because there is no callback) (Check whether a callback has been registered) | x | |
| 16 | k_EStoveCommonResultCode_BaseNotInitialized | SDK did not initialize (Check if Stove_Initialize() was called) | x | |
| 253 | k_EStoveCommonResultCode_UnmanagedException | An unknown exception occurred within the SDK (check the logs) | O | A temporary issue has occurred. Please try again. [OK] |
| 254 | k_EStoveCommonResultCode_ManagedException | Pass to the callback when an exception occurs in the rapper (check the log) | O | A temporary issue has occurred. Please try again. [OK] |
Complete list: EStoveCommonResultCode
Example
using static Stove.PCSDK.V3.Base;
Stove_ShutdownNotification((callbackResult, shutdown) =>
{
if (callbackResult.Result.IsSuccessful)
{
// Please implement the logic for a successful outcome.
string msg = shutdown.Msg;
int inadvanceMinutes = shutdown.InadvanceMinutes;
}
else
{
// Please implement the logic for when an error occurs.
}
});
Notes
- This API is not exclusive to South Korea. It works even overseas if the account is subject to the shutdown policy.
- This callback is not a one-time event. Once registered, it will be called repeatedly—once at each of the advance notification times specified by the server (e.g., 30 minutes before shutdown, 10 minutes before shutdown, etc.), and once at the actual shutdown time—for the number of times specified by the server.
See Also
Stove_StartPurchase
Kind Function · Module IAP · Version 3.5.0
Description
We will begin the purchase process for the list of items in the order submitted via startPurchaseParam.Products. The procedure will vary depending on the value of startPurchaseParam.PurchaseParam.Operation (EStovePurchaseOperation).
k_EStovePurchaseOperation_Default: Do not use Stove Webview. The caller must open the payment page directly using theIStoveStartPurchaseOutcome.TempPaymentUrlpassed toonFinished, and after payment, must call Stove_ConfirmPurchase to confirm the purchase.k_EStovePurchaseOperation_WithWebView: Opens the Stove payment page within Stove Webview. In this case as well, once the payment is complete, the caller must callStove_ConfirmPurchaseto confirm the purchase.k_EStovePurchaseOperation_WithWebViewAndConfirmResult: Open the Stove payment page within Stove Webview. Upon successful payment, the SDK automatically callsStove_ConfirmPurchaseand returns the confirmed purchase results (IsPurchased,PurchasedProducts,ChargeInfos) toonFinished. In this case, the caller does not need to callStove_ConfirmPurchaseseparately.
This must be called after initializing the SDK (Stove_Initialize).
Declaration
public static void Stove_StartPurchase(IStoveStartPurchaseParam startPurchaseParam, OnStartPurchaseCallback onFinished, OnIAPPopupDestroyCallback onDestroy)
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
startPurchaseParam | IStoveStartPurchaseParam | Y | List of Ordered Items and Purchase Action Parameters |
onFinished | OnStartPurchaseCallback | Y | Callback to receive purchase results |
onDestroy | OnIAPPopupDestroyCallback | N | A callback that is triggered when all popups created by this call have been closed |
Returns
None
Callback
public delegate void OnStartPurchaseCallback(IStoveCallbackResult callbackResult, IStoveStartPurchaseOutcome outcome);
public delegate void OnIAPPopupDestroyCallback(IStoveCallbackResult callbackResult);
| Name | Type | Description |
|---|---|---|
callbackResult | IStoveCallbackResult | Call Results |
outcome | IStoveStartPurchaseOutcome | Purchase results. Which fields are populated depends on the value of Operation (see Overview). |
It runs in the thread that called Stove_RunCallback().
onFinishedis passed only once per call.onDestroyis passed after all pop-ups created by this call have been closed. It is also passed once along withPopupNotCreated(33) even if the WebView terminates without ever being created.
Error Codes
| Callback | Code | Name | Description | Show to User | In-Game Message |
|---|---|---|---|---|---|
| onFinished | 0 | k_EStoveCommonResultCode_Success | Success | x | |
| onFinished | 17 | k_EStoveCommonResultCode_NotInitialized | Payment functionality is not initialized (preceding call to Stove_Initialize) | x | |
| onFinished | 5 | k_EStoveCommonResultCode_InvalidParam | If onFinished is null, it is set internally but is not actually passed because there is no callback (for reference only; no separate handling required) | x | |
| onFinished | 80 | k_EStoveCommonResultCode_ParameterLengthExceeded | ServiceTxnNo exceeds 50 characters, or ExtraData exceeds 500 characters (adjust the values to meet the length limit) | O | The payment information is invalid, so we cannot process the payment. Please try again. [OK] |
| onFinished | 81 | k_EStoveCommonResultCode_InvalidJsonString | ExtraData is not empty, but the JSON is invalid (check the format of ExtraData) | O | The payment information is invalid, so we cannot process the payment. Please try again. [OK] |
| onFinished | 503 | k_EStoveResultCode_InvalidOrderProductInformation | The order contains items with the codes Quantity <= 0 or SalePrice < 0 (Check the order items). | O | The payment information is invalid, so we cannot process the payment. Please try again. [OK] |
| onFinished | 252 | k_EStoveCommonResultCode_NotImplemented | PurchaseParam.Operation is an unknown value (specify one of the values listed in EStovePurchaseOperation) | x | |
| onFinished | 60 | k_EStoveCommonResultCode_ViewUiNotInitialized | The WebView payment window must be opened, but the View UI is not initialized (contact the SDK team) | x | |
| onFinished | 65 | k_EStoveCommonResultCode_WebviewCloseAllFail | Failed to clear the existing web view before opening a new payment web view (retrying) | x | |
| onFinished | 62 | k_EStoveCommonResultCode_WebviewCreateFail | Failed to create payment web view (Retrying) | x | |
| onFinished | 63 | k_EStoveCommonResultCode_WebviewLoadUrlFail | Failed to load the URL in the payment web view (retrying) | x | |
| onFinished | 34 | k_EStoveCommonResultCode_WebviewClosedBeforeComplete | WithWebViewAndConfirmResult The web view closed before receiving the payment completion notification in the flow (prompt the user to make another purchase) | O | The purchase was not completed successfully. Please try again. [OK] |
| onFinished | 254 | k_EStoveCommonResultCode_ManagedException | Pass an exception to the callback when it occurs in the Rapper (logged as ExceptionMessage) | O | A temporary issue has occurred. Please try again. [OK] |
| onFinished | 253 | k_EStoveCommonResultCode_UnmanagedException | An unknown exception occurred (check the logs and contact the SDK team) | O | A temporary issue has occurred. Please try again. [OK] |
| onDestroy | 33 | k_EStoveCommonResultCode_PopupNotCreated | One pass through all early failure paths where the WebView was never created and terminated (can be ignored) | x | |
| onDestroy | 66 | k_EStoveCommonResultCode_WebviewCloseFail | Failure to close the WebView properly upon normal termination (logged for reference) | x |
Complete list: 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)
{
// Please implement the logic for a successful outcome.
// If Operation == Default, open the payment page at outcome.TempPaymentUrl, and
// After completing the payment, you must call `Stove_ConfirmPurchase()` to finalize the purchase.
long txnMasterNo = outcome.TxnMasterNo;
}
else
{
// Please implement the logic for when an error occurs.
}
},
(callbackResult) =>
{
// Please implement logic that closes all pop-ups opened during the purchase process once they have all been closed.
});
Notes
- This function is asynchronous, and the result is passed only via the
onFinishedcallback. - Purchases starting with
Operation,Default, orWithWebViewmust be finalized by calling Stove_ConfirmPurchase. The SDK automatically handles the finalization ofWithWebViewAndConfirmResult. - You can use the value
outcome.PurchaseProgress(EStovePurchaseProgress) to determine whether to display the payment window directly. - The
PopupNotCreated(33) value ofonDestroyis passed through unchanged in the new C# interface (the old interface swallows this value and does not callonDestroy). If you receive a 33, you can ignore it without any further processing. IStoveStartPurchaseOutcomewas renamed from thePurchaseResultseries of types in the old interface.
See Also
Stove_Uninitialize
Kind Function · Module Base · Version 3.5.0
Description
Exit the SDK. This must be called in conjunction with Stove_Initialize() when ending the game.
Declaration
public static IStoveResult Stove_Uninitialize()
Parameters
None
Returns
| Type | Description |
|---|---|
IStoveResult | Call result. Check whether the call was successful using result.IsSuccessful. |
Error Codes
| Code | Name | Description | Show to User | In-Game Message |
|---|---|---|---|---|
| 0 | k_EStoveCommonResultCode_Success | Success | x | |
| 16 | k_EStoveCommonResultCode_BaseNotInitialized | Called before initialization (the cleanup routine continues even in this case) (Check whether Stove_Initialize() was called) | x | |
| 253 | k_EStoveCommonResultCode_UnmanagedException | An unknown exception occurred within the SDK (check the logs) | O | A temporary issue has occurred. Please try again. [OK] |
| 254 | k_EStoveCommonResultCode_ManagedException | Pass the return value when an exception occurs in Rapper (check the log) | O | A temporary issue has occurred. Please try again. [OK] |
Complete list: EStoveCommonResultCode
Example
using static Stove.PCSDK.V3.Base;
IStoveResult result = Stove_Uninitialize();
if (result.IsSuccessful)
{
// Please implement the logic for a successful outcome.
}
else
{
// Please implement the logic for when an error occurs.
}
Notes
- While the termination is in progress, the callback queue that was waiting is drained in discard mode, and the waiting user delegate is not called.
- The API name is
Stove_Uninitialize, notStove_UnInitialize(capital I).
See Also
Stove_VerifyIdentificationPopup
Kind Function · Module View · Version 3.5.0
Description
Stove_VerifyIdentificationPopup displays the identity verification pop-up in a web view. If popupParam.CompareIdentifier is true, it compares the verified identifier with the logged-in user.
This must be called after initializing the SDK (Stove_Initialize).
If the call is made from a GDS country other than South Korea (
kr), it will fail with error codek_EStoveCommonResultCode_NotSupportedCountry(31). Since the web view is not created,k_EStoveCommonResultCode_PopupNotCreated(33) is also passed toonDestroy.
Declaration
public static void Stove_VerifyIdentificationPopup(IStoveVerifyIdentificationPopupParam popupParam, OnViewPopupCallback onFinished, OnVerifyIdentificationPopupDestroyCallback onDestroy);
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
popupParam | IStoveVerifyIdentificationPopupParam | Y | These parameters specify the WebView display mode (WebViewMode) and whether to compare the authenticated identifier with the logged-in user (CompareIdentifier). |
onFinished | OnViewPopupCallback | Y | This is a callback that is called when the pop-up has finished displaying. |
onDestroy | OnVerifyIdentificationPopupDestroyCallback | N | This callback is invoked when the pop-up WebView is completely destroyed. It passes the issued SIM key along with it. |
Returns
None (void function)
Callback
public delegate void OnViewPopupCallback(IStoveCallbackResult callbackResult);
public delegate void OnVerifyIdentificationPopupDestroyCallback(IStoveCallbackResult callbackResult, IStoveVerifyIdentificationPopupDestroyInfo info);
| Name | Type | Description |
|---|---|---|
callbackResult | IStoveCallbackResult | Here are the results of the call. Check callbackResult.Result.IsSuccessful to see if it was successful. |
info | IStoveVerifyIdentificationPopupDestroyInfo | If authentication for info.SimKey is successful, the issued SIM key is stored here. If authentication fails, an empty string ("") is returned. |
onFinished is called once when the popup is confirmed. onDestroy is called once when the web view has completely disappeared from the screen. Both callbacks run on the thread that called Stove_RunCallback().
Error Codes
onFinished
| Code | Name | Description | Show to User | In-Game Message |
|---|---|---|---|---|
| 0 | k_EStoveCommonResultCode_Success | Success | x | |
| 17 | k_EStoveCommonResultCode_NotInitialized | The pop-up feature is not initialized (check for a preceding call to Stove_Initialize) | x | |
| 31 | k_EStoveCommonResultCode_NotSupportedCountry | The logged-in user's GDS country is not South Korea (kr) (This API should not be called from countries other than South Korea.) | x | |
| 60 | k_EStoveCommonResultCode_ViewUiNotInitialized | The pop-up UI subsystem is not initialized (defensive code that does not occur during normal flow) (If this issue occurs, contact SDK Support) | x | |
| 65 | k_EStoveCommonResultCode_WebviewCloseAllFail | Failed to close all existing WebViews before creating a pop-up (check logs) | x | |
| 62 | k_EStoveCommonResultCode_WebviewCreateFail | Failed to create WebView (Please retry or check the logs) | x | |
| 63 | k_EStoveCommonResultCode_WebviewLoadUrlFail | WebView URL Load Failed (Please check your network connection and try again) | x | |
| 67 | k_EStoveCommonResultCode_NoPopupData | The server query returned 0 results to display in the pop-up (treated as a normal termination). | O | There is no pop-up configuration information, so there is no window to display. [OK] |
| 254 | k_EStoveCommonResultCode_ManagedException | Passed as a callback when an exception occurs in Rapper (check log callbackResult.Result.ExceptionMessage) | O | A temporary issue has occurred. Please try again. [OK] |
onDestroy
| Code | Name | Description | Show to User | In-Game Message |
|---|---|---|---|---|
| 0 | k_EStoveCommonResultCode_Success | Normal Exit of WebView | x | |
| 66 | k_EStoveCommonResultCode_WebviewCloseFail | Failed to close WebView (Check the log) | x | |
| 33 | k_EStoveCommonResultCode_PopupNotCreated | The WebView was not created and terminated prematurely (including due to country restrictions or an internal cleanup signal). In this case, info.SimKey is an empty string. (No special handling required.) | x | |
| 254 | k_EStoveCommonResultCode_ManagedException | Pass to the callback when an exception occurs in Rapper (check log callbackResult.Result.ExceptionMessage) | O | There was a temporary issue. Please try again. [OK] |
Complete list: 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)
{
// Please implement the logic for a successful outcome.
}
else
{
// Please implement the logic for when an error occurs.
}
},
onDestroy: (callbackResult, info) =>
{
if (callbackResult.Result.IsSuccessful)
{
// Please use info.SimKey wherever needed.
}
else
{
// Please implement the logic for when an error occurs. (You may ignore Code 33.)
}
});
Notes
- This API is for South Korea only. If the logged-in user's GDS country is not South Korea, the API will always return an error with code
NotSupportedCountry(31). 33(PopupNotCreated) is a code specific toonDestroyand is never passed toonFinished.- Unlike other popup APIs, the
onDestroycallback type isOnVerifyIdentificationPopupDestroyCallback, and it passes an additionalIStoveVerifyIdentificationPopupDestroyInfoargument.
See Also
Stove_VietnamAgeRatingNotification
Kind Function · Module Base · Version 3.5.0
Description
This API returns information on age ratings in Vietnam via a callback. It is an API specifically for Vietnam.
This is a one-time callback. It must be called after rendering is complete.
Declaration
public static void Stove_VietnamAgeRatingNotification(OnVietnamAgeRatingNotificationCallback onFinished)
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
onFinished | OnVietnamAgeRatingNotificationCallback | N | Callback to receive the results |
Returns
None
Callback
public delegate void OnVietnamAgeRatingNotificationCallback(IStoveCallbackResult callbackResult, IStoveVietnamAgeRatingInfo ageRatingInfo);
| Name | Type | Description |
|---|---|---|
callbackResult | IStoveCallbackResult | Call Results |
ageRatingInfo | IStoveVietnamAgeRatingInfo | Age Rating Overlay Information. Overlay Display Status (OverlayMode), Overlay Color Type (OverlayType, 0=black·1=white), overlay size (OverlayScale, 0.0–1.0), overlay opacity (OverlayOpacity, 0.0–1.0), game rating (AgeRating, 0=All Ages·12=Ages 12·16=Ages 16·18=Ages 18), notification message (Msg), display position X and Y (DisplayPositionX / DisplayPositionY, 0.0–1.0 relative to the top-left corner of the screen), and language code for font selection (Language). |
This callback runs in the thread that called Stove_RunCallback(). It is a one-time callback and must be called after the point at which rendering is possible.
Error Codes
| Code | Name | Description | Show to User | In-Game Message |
|---|---|---|---|---|
| 0 | k_EStoveCommonResultCode_Success | Success | x | |
| 5 | k_EStoveCommonResultCode_InvalidParam | onFinished is null (an internal value that is not actually passed because there is no callback) (Check whether a callback has been registered) | x | |
| 16 | k_EStoveCommonResultCode_BaseNotInitialized | SDK not initialized (Check if Stove_Initialize() was called) | x | |
| 31 | k_EStoveCommonResultCode_NotSupportedCountry | The logged-in user's GDS country is not Vietnam (vn) (country-specific branch handling) | x | |
| 253 | k_EStoveCommonResultCode_UnmanagedException | An unknown exception occurred within the SDK (check the logs) | O | A temporary issue has occurred. Please try again. [OK] |
| 254 | k_EStoveCommonResultCode_ManagedException | Pass to the callback when an exception occurs in the rapper (check the log) | O | A temporary issue has occurred. Please try again. [OK] |
Complete list: EStoveCommonResultCode
Example
using static Stove.PCSDK.V3.Base;
Stove_VietnamAgeRatingNotification((callbackResult, ageRatingInfo) =>
{
if (callbackResult.Result.IsSuccessful)
{
// Please implement the logic for the success case.
int overlayMode = ageRatingInfo.OverlayMode;
string msg = ageRatingInfo.Msg;
}
else
{
// Please implement the logic for when an error occurs.
}
});
Notes
- This is an API specifically for Vietnam.
- This is a one-time callback and must be called after rendering is complete.
See Also
Stove_VietnamOverimmersionNotification
Kind Function · Module Base · Version 3.5.0
Description
Information on preventing excessive gaming in Vietnam is delivered via callback. This is an API specific to Vietnam.
This is a one-time callback. It must be called after rendering is complete.
Declaration
public static void Stove_VietnamOverimmersionNotification(OnVietnamOverimmersionNotificationCallback onFinished)
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
onFinished | OnVietnamOverimmersionNotificationCallback | N | Callback to receive the results |
Returns
None
Callback
public delegate void OnVietnamOverimmersionNotificationCallback(IStoveCallbackResult callbackResult, IStoveVietnamOverimmersionInfo overimmersionInfo);
| Name | Type | Description |
|---|---|---|
callbackResult | IStoveCallbackResult | Call Results |
overimmersionInfo | IStoveVietnamOverimmersionInfo | Information on the anti-overuse overlay. Overlay display status (OverlayMode), overlay color type (OverlayType, 0=black·1=white), overlay size (OverlayScale, 0.0–1.0), overlay transparency (OverlayOpacity, 0.0–1.0), game rating (AgeRating, 0=All Ages·12=Ages 12·16=Ages 16·18=Ages 18), warning message (Msg), formatting tags (<b>, <color=#RRGGBBAA>, etc.) (StyledMsg), cumulative playtime (ElapsedMinutes, in minutes), message display duration (ExposureTime, in seconds), expansion animation duration (ExpandAnimationTime, in seconds), display position X and Y (DisplayPositionX / DisplayPositionY, 0.0 to 1.0 relative to the top-left corner of the screen), and language codes for font selection (Language). |
This callback runs in the thread that called Stove_RunCallback(). It is a one-time callback and must be called after the point at which rendering is possible.
Error Codes
| Code | Name | Description | Show to User | In-Game Message |
|---|---|---|---|---|
| 0 | k_EStoveCommonResultCode_Success | Success | x | |
| 5 | k_EStoveCommonResultCode_InvalidParam | onFinished is null (an internal value that is not actually passed because there is no callback) (Check whether a callback has been registered) | x | |
| 16 | k_EStoveCommonResultCode_BaseNotInitialized | SDK not initialized (Check if Stove_Initialize() was called) | x | |
| 31 | k_EStoveCommonResultCode_NotSupportedCountry | The logged-in user's GDS country is not Vietnam (vn) (Country-specific branching) | x | |
| 253 | k_EStoveCommonResultCode_UnmanagedException | An unknown exception occurred within the SDK (check the logs) | O | A temporary issue has occurred. Please try again. [OK] |
| 254 | k_EStoveCommonResultCode_ManagedException | Pass to the callback when an exception occurs in the rapper (check the log) | O | A temporary issue has occurred. Please try again. [OK] |
Complete list: EStoveCommonResultCode
Example
using static Stove.PCSDK.V3.Base;
Stove_VietnamOverimmersionNotification((callbackResult, overimmersionInfo) =>
{
if (callbackResult.Result.IsSuccessful)
{
// Please implement the logic for a successful outcome.
string styledMsg = overimmersionInfo.StyledMsg;
int elapsedMinutes = overimmersionInfo.ElapsedMinutes;
}
else
{
// Please implement the logic for when an error occurs.
}
});
Notes
- This is an API specifically for Vietnam.
- This is a one-time callback and must be called after rendering is complete.
See Also
StoveReadOnlyArrayEnumerator
Kind Struct · Module Base · Version 3.5.0
Description
This is a boxing-free array enumerator shared by the SDK's read-only list wrapper structures (IStoveProductList, IStoveInventoryList, IStoveShopCategoryList, etc.). Implement IEnumerator<T> to support iteration over foreach.
class Base It is not declared inside a module, but rather namespace Stove.PCSDK.V3 at the top level (namespace level), so it does not belong to a specific module class and is shared by list types across multiple modules. It is not created directly by the game code; rather, GetEnumerator() of the list type returns it internally.
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 | Read (Property) | This is the element currently pointed to by the iterator. |
MoveNext | bool | Method | Moves to the next element. Returns true if the move is successful, and false if the end of the array is reached. |
Reset | void | Method | Resets the iterator to its initial position (before it points to any element). |
Dispose | void | Method | This is the implementation of IDisposable. Since there are no resources to release separately, it does nothing. |
Example
using static Stove.PCSDK.V3.Base;
using static Stove.PCSDK.V3.IAP;
void OnFetchProductsCallback(IStoveCallbackResult callbackResult, IStoveProductList products)
{
if (callbackResult.Result.IsSuccessful)
{
// Since IStoveProductList.GetEnumerator() returns a StoveReadOnlyArrayEnumerator<IStoveProduct>,
// In the game code, you can iterate through the list directly using a `foreach` loop.
foreach (IStoveProduct product in products)
{
// Please implement the logic to handle each item.
}
}
else
{
// Please implement the logic for when a failure occurs.
}
}
Notes
- Game code rarely deals with this type directly. When
foreachis used with enumeration types that implementIReadOnlyList<T>—such asIStoveProductList,IStoveInventoryList, andIStoveShopCategoryList—this enumerator is used internally. - If the internal array is
null, it is treated as an empty sequence (MoveNext()immediately returns false). - There is no corresponding
EStoveBaseTypeKindvalue for this type. This is because it is a C#-specific helper shared by list types across multiple modules, rather than a data or parameter type for a specific feature.
See Also
- None