Skip to content
Stove
Last Updated

Curious about the actual application flow?

Usage Scenarios / Checking Maintenance & Updates

Maintenance/Update

Understanding


Using the maintenance/update feature provided by the STOVE SDK, you can set or clear game-server maintenance and control updates by managing the game version.
The STOVE SDK runs inside the user's app (client). When the app launches, if maintenance is in progress or a new update is available, it shows a guidance popup to the user.
However, beyond STOVE's features, there are parts the game server must manage directly, so they need to be implemented together.

The SDK checks maintenance/update only at app launch
ㅁ The check happens only once at app launch (initialize); it isn't detected in real time during play.
ㅁ Maintenance detection during play (Heartbeat) and kicking connected users must be implemented by the game server directly.

Feature Providers

The maintenance/update feature is provided with roles split between STOVE (SDK) and the game (CP company).

Feature Provider Configuration location
Determines maintenance status at SDK initialize and shows the popup SDK (STOVE) Partners
Determines platform-whitelist status and blocks access SDK (STOVE) Partners
Determines app-update status and shows the popup SDK (STOVE) Partners
Determines game-resource (CDN) update status Game (CP company) Game ops tool
Determines game-server maintenance status and manages the whitelist Game (CP company) Game ops tool
Kicks users and shows the game-maintenance popup Game (CP company) Game ops tool

On PC, the STOVE PC Client handles maintenance/update notices automatically
For games launched via the STOVE PC Client, the client shows maintenance and app-update notices automatically, so the SDK-popup integration above mainly applies to mobile. Game-server-based maintenance, kick, and resource updates must be implemented regardless of platform.

Cautions for Maintenance on the Mobile Platform

  • Due to the nature of the mobile platform, various exceptional situations can arise for users during maintenance.
    • When the user is in a section with no server communication at the time of maintenance setup / user kick (e.g., lobby screen, during single-player)
    • When the app was sent to the background before maintenance started — situations like app in background before maintenance → app to foreground during maintenance can occur.
    • When the user is in a section where the network is physically cut off (e.g., airplane mode, subway)

  • If server-based maintenance/update features are absent or not handled, the following problems can occur.
    • Some users who weren't kicked access/play the game during maintenance
    • Because resource updates are checked only at app launch, some users don't receive resource updates

  • To prevent the problems above, the game server must implement the following items.
    • Game-server maintenance setup (entry blocking)
    • Server-based user-kick implementation
    • App-update version / update options
    • Resource-update version / update options

Integration Guide


Prerequisites

Item Details
Partners maintenance setup Service maintenance and update management must be configured in Partners.
Game-server maintenance implementation You must implement game-server maintenance setup (entry blocking), user kick, and app/resource update-version management.

Basic Integration Structure

At STOVE SDK initialization (initialize), it checks maintenance/update status and automatically shows a context-appropriate guidance popup. The popup STOVE provides is a simple user-notice popup; in-game maintenance notices, user kick, input blocking, and server-level maintenance must be implemented separately by the game.

Be careful when implementing maintenance/update
The SDK provides minimal maintenance/update information only at the first app launch (initialize), so the subsequent flow must be controlled by the game server.

Maintenance & Update Flow

This is the full sequence in which the STOVE SDK and the game server judge maintenance/update in order when a user enters the game.

Full flow

The earlier steps (①–⑤) are handled by the STOVE SDK at the platform level, and the later steps (⑥–⑨) by the game server at the game level.

Order Action detail Provider
At SDK initialize, calls the STOVE backend service to determine maintenance status. Maintenance status is returned only at the first app launch. SDK (STOVE)
Determines platform-whitelist status. (The platform whitelist is registered in Partners) SDK (STOVE)
If not on the platform whitelist, shows the SDK maintenance popup / blocks access. SDK (STOVE)
At SDK initialize, calls the STOVE backend service to determine app-update status. SDK (STOVE)
If an app update exists, shows the SDK update popup. SDK (STOVE)
Determines game-resource (CDN resource patch) update status. Game (CP company)
Determines game-server maintenance status. Game (CP company)
Determines game-server-whitelist status. (The game whitelist is registered in the game ops tool) Game (CP company)
If not on the game-server whitelist, shows the game maintenance popup / blocks access. Game (CP company)
Detailed flows by situation

This breaks down how each situation is handled when maintenance or an update actually occurs within the full flow.

Maintenance flow
Order Action detail Provider
Partners maintenance setup (SDK maintenance setup). Partners (STOVE)
Game-server maintenance setup (server maintenance setup). Game ops tool (CP company)
User kick. Game ops tool (CP company)
Show the kick popup → handle app exit or restart. Game (CP company)
When a user not handled at kick time accesses the game — if the game server is down (under maintenance):
show an error popup → handle app exit or restart.
Game (CP company)
When a user not handled at kick time accesses the game — if the game server is running (live verification):
check game-server maintenance status → show the game maintenance popup → handle app exit or restart.
Game (CP company)
Update flow

This is the flow when an app (client) or resource (CDN) update exists. It covers when a user who wasn't kicked accesses the game during an update check, or when only app/resource updates are applied without maintenance.

Order Action detail Provider
App-update (version-update) setup. Partners (STOVE)
Resource-update (resource-version-update) setup. Game (CP company)
Communication occurs between a user (client) who hasn't received the update and the game server. Game (CP company)
App-version comparison — if not the latest, go to step ⑤; if the latest, go to step ⑨. Game (CP company)
Check whether the update is mandatory — if mandatory, go to step ⑥; if optional, also go to step ⑥
(however, if it's not a forced update, connected users are not kicked).
Game (CP company)
Kick users to apply the mandatory update (not all users are kicked). Game (CP company)
App restart → show the SDK app-update popup on the title screen → proceed with the app update. Game (CP company)
Check whether a resource update exists — if it exists, go to step ⑨; if not, connect to the game. Game (CP company)
Resource-version comparison — if not the latest, go to step ⑩; if the latest, connect to the game. Game (CP company)
Check whether the update is mandatory — if mandatory, go to step ⑪; if optional, connect to the game
(if it's not a forced update, connected users are not kicked).
Game (CP company)
Kick users to apply the mandatory resource update (not all users are kicked). Game (CP company)
App restart → show the resource-update popup on the title screen → download the resources → connect to the game after download completes. Game (CP company)

Development


SDK Integration

When maintenance or app-update status is detected in the result of SDK initialization (initialize), call OperationUI.handleResult to show the guidance UI the SDK provides and then control the subsequent game flow.

Prerequisites

  • AuthUI module dependency: OperationUI is included in the AuthUI module. Check that the AuthUI dependency is added to your project (Android build.gradle, iOS Podfile/SPM, Unity/Unreal packages).
  • Partners configuration complete: configure service maintenance and update management in Partners in advance. The client receives this configuration in the initialize response and branches the screen accordingly.
  • Call context: handleResult needs a live Activity (Android) / UIViewController (iOS) to show the screen. Confirm that the context hasn't been finished/dismissed at call time before calling.
  • Game-server-side implementation: SDK maintenance info is returned only at the first initialize, so implement game-server entry blocking, user kick, and resource-version verification separately. (See Troubleshooting for details)

Development Flow

  1. Call Auth.initialize (Android) / [SGSAuth initialize:] (iOS) / Auth.Initialize (Unity/Unreal) at game start.
  2. Pass the Result (including errorCode) received in the callback as-is to OperationUI.handleResult(activity, result) { ... }.
  3. OperationUI branches on errorCode and automatically shows the appropriate screen.
    • Auth.MaintenanceError (30003) → maintenance-notice screen
    • Auth.AppUpdateError (30004) → app-update-notice screen (behavior branches by mandatory/optional option)
    • Other permission/account-related errors → the corresponding notice screen (sanction, dormancy, withdrawal, etc.)
  4. When the user interaction (confirm / go to update / exit app) finishes, the listener callback is called. Inside the callback, use handled.isSuccessful() to continue the game-entry flow (login → character selection → lobby).
  5. If Auth.initialize itself fails for a reason other than maintenance/update (network error, etc.), implement retry logic separately.

Troubleshooting

Maintenance/update info is provided only at initialize
The SDK responds with maintenance/update status only at the first app launch (initialize). Since the SDK doesn't provide Heartbeat or real-time user kick, you must implement entry-blocking and kick logic separately on the game-server side. Use the SDK popup only for user notices, and take responsibility for forced-exit/restart handling on the game side.

Error code / situationCauseAction
Auth.MaintenanceError (30003)Partners maintenance setting is activePass Result to OperationUI.handleResult to show the SDK maintenance screen. In the callback, don't let the user enter the game; exit the app or send them to a restart screen.
Auth.AppUpdateError (30004)A new version is set in Partners update managementCall OperationUI.handleResult → for a mandatory update, block user input (disable back, and on confirm, go to the store / exit the app). On the game server too, reject old-version access via client-version verification.
Called OperationUI.handleResult but no screen appearsAt call time the Activity was finished or the Fragment was detachedRight before calling, check !isFinishing && !isDestroyed on Android and that the viewController is alive as a presentedViewController on iOS. If using the Fragment version, call only when fragment.isAdded == true.
The maintenance popup is missing when returning from background to foregroundSDK maintenance info is returned only at initialize. Returning to the foreground doesn't run initialize againOn returning to the foreground, check maintenance status via the game-server response and show your own maintenance-notice screen. Don't rely on the SDK; handle it in the game's lifecycle hooks (onResume, applicationDidBecomeActive).
Some users can still connect during maintenanceOnly client-side maintenance is applied (server entry-blocking not implemented)Put a maintenance-mode flag on the game server and verify maintenance status in every game-server API response to block access. Client info can be forged, so don't trust it; keep the final authority for the maintenance decision on the server.
It's a mandatory update but the user ignores it and enters the gameThe client's forced-update screen fails to block input, or the game server doesn't block old-version clientsIn the OperationUI callback, if the user refuses the update, exit the app with finish()/exit(0). At the same time, verify the client-version header on the game server to reject old-version access.
The resource (CDN) update isn't applied to some usersThe resource check is implemented to happen only at app launchAt each game-entry step (title → lobby entry, etc.), re-query the resource version from the game server, and if a new resource exists, branch to a forced-download screen.
A staff account registered on the whitelist is still blocked by the maintenance screenNot registered on the platform/game whitelist, or registered in the wrong systemRegister the platform whitelist in Partners and the game whitelist in the game ops tool separately. The two systems operate independently, so we recommend registering staff accounts in both.

Sample Code

csharp
using Stove.Auth;
using Stove.AuthUI;

Auth.Initialize(initRequest, (Result result) => {
    OperationUI.HandleResult(activity, result, (Result handled) => {
        if (handled.IsSuccessful()) {
            // Continue the game-entry flow (login → character selection → lobby)
        } else {
            // User chose exit/cancel → handle app exit
        }
    });
});

Frequently Asked Questions



Q1. Is maintenance handling complete with just the SDK-provided maintenance popup?
A. No, the STOVE SDK popup is used only as a simple user-notice popup.
In-game maintenance notices, maintenance kick, user-input blocking, and so on must be implemented separately by the game.
The SDK alone does not complete server-based maintenance handling.
Q2. Some users can still access the game during maintenance.
A. SDK maintenance info is provided only at the first app launch (initialize), and the SDK does not support Heartbeat or user kick.
You must implement game-server maintenance setup (entry blocking) and server-based user kick separately.
Also, apart from the game client's maintenance/kick features, the game server must implement blocking of external access as well.
Q3. What's the difference between optional and mandatory updates?
A. A mandatory update forces the update by kicking users.
An optional update does not kick currently connected users; it shows the update popup at the next app launch.
The scope of who is kicked differs by mandatory/optional, so set the update option accurately on the game server.
Q4. How do the platform whitelist and the game whitelist differ?
A. The platform whitelist is registered in Partners and evaluated by the SDK (SGS).
The game whitelist is registered in the game ops tool and evaluated by the game server (CP company).
The two whitelists operate independently, so manage each separately so QA/operations staff can access during maintenance.
Q5. What happens if maintenance starts while the app is in the background?
A. Since SDK maintenance info is provided only at the first app launch (initialize), the SDK maintenance popup
may not appear when switching the app from background to foreground. Handle such exceptional cases with a game-server-based user-kick feature.
We recommend implementing separate handling logic so the user isn't sent to the app-initialization (initialize) stage.
Q6. Where do I configure maintenance and updates?
A. Maintenance and app updates in the SDK (STOVE) area are configured in Partners.
In Partners, you can set the maintenance time and notice message in the Service Maintenance menu, and the version and update options in the Update Management menu.
Game-server maintenance and resource-update settings are managed separately in the game ops tool.



Need to contact us directly? stove.developers@smilegate.com