Skip to content
Stove
Last Updated

In-game Menu

Understanding


The in-game menu is an SDK-based settings UI that lets players quickly access the STOVE platform's key features during gameplay.
Without a separate screen transition, it provides operations-essential features in-game such as account management, Customer Center, notification settings, and terms-of-service notices.
The in-game menu supports the Mobile (Android/iOS) platform by default, and each feature should be applied selectively to fit your business/planning intent.

Feature Composition

The features provided by the in-game menu are categorized below by whether implementation is required.

Feature nameImplementationDescription
Account-management featureRequiredProvides account settings such as account linking, email verification, password change, and STOVE membership withdrawal
Logout featureRequiredLogs out the current account (note that guests lose their account on logout)
Game-cancellation featureRequiredDeletes game info and STOVE-account link info (not provided by the SDK; implemented by the game itself)
Info displayRequiredDisplays the account type, STOVE member number, game/SDK version, etc.
Customer Center integrationRequiredLinks to the Customer Center for FAQ and 1:1 inquiries
Notification settingRequiredSetting for receiving promotional notifications (Push) (required by domestic and platform-company policy)
In-game terms-of-service noticeRequiredTerms-of-service notice per platform/country policy
Change the SDK (platform) display languageOptionalUnifies the SDK display language to match the game language
Device-registration serviceOptionalAllows game access by registering device info (Auth-ui v2.7.2 or higher)
CommunityOptionalLinks to the STOVE community in-game (requires pre-setup in Partners)

Be careful implementing the server-reset, game-cancellation, and logout features
These three features should be implemented selectively per your business/planning intent.
Apply the concrete implementation to fit the menu's planning intent after discussing with the business/planning owner.

Provided Items by Account Type

The account-management screen provides different items depending on the logged-in account type.

Account typeProvided menu
Registered member (email)Email verification, password change, STOVE membership withdrawal
Registered member (3rd Party)STOVE membership withdrawal
GuestAccount linking (provided as required to prevent guest loss)

Registered member (email): the email-verification, password-reset, and STOVE-membership-withdrawal items are shown.


Registered member (3rd Party): the STOVE-membership-withdrawal item is shown.


Guest account: the STOVE-account-linking screen is shown. To prevent guest loss, the account-linking feature must be provided.

Integration Guide


Prerequisites

ItemDetails
User login stateIn-game menu features can be called after the user's login completes
Partners setupPre-setup in Partners is needed when using the Customer Center and community
Prepare the terms-of-service URLWhen using the terms-of-service notice feature, register the terms in Partners and secure a display URL
Finalize the implementation scopeDecide in advance whether to implement server reset, game cancellation, logout, etc.

Development


SDK Integration

Building the Account-Settings Screen

You can build an in-game 'Settings > Account' screen. The SDK automatically shows a different UI depending on the account state (guest/registered member).

Result branching
Handle the following branches yourself using the result received in the callback.

  • Success + userInfo["userAction"] == "withdraw" → STOVE membership withdrawal is complete. Since the SDK performs an automatic logout, immediately move to the game start screen to prompt re-login.
  • Guest → registered-member conversion after failure (cancellation, etc.) → compare the IsGuest() value before the call with the accessToken.User.IsGuest() value after the callback to determine whether conversion occurred, and use the accessToken.User.VerifiedDevice value to decide whether to send the user to the device-registration step.
csharp
public void ManageAccount()
{
    bool isGuest = false;
    if (Auth.AccessToken != null)
    {
        isGuest = Auth.AccessToken.User.IsGuest();
    }

    AuthUI.ManageAccount((Result result) =>
    {
        if (result.IsSuccessful)
        {
            if (result.UserInfo != null && result.UserInfo.TryGetValue("userAction", out string userAction))
            {
                if (!string.IsNullOrEmpty(userAction) && userAction.Equals("withdraw"))
                {
                    //Withdrawal complete - auto-logout occurs, so exit the game or move to the initial screen
                    Login();
                }
            }
        }
        else
        {
            AccessToken accessToken = Auth.AccessToken;
            if (accessToken != null)
            {
                if (!accessToken.User.IsGuest() && isGuest)
                {
                    //Account linking complete - check device registration
                    if (Auth.AccessToken.User.VerifiedDevice) {
                        //Registered device
                    } else {
                        Login();
                    }
                }
            }
        }
    });
}

Logout

Auth.logout deletes both the SDK-internal accessToken and the token file in storage.

  • Guest-account caution: once a guest logs out, there's no way to recover the same account.
  • After logout, we recommend moving to the game's initial flow (start screen) to prompt re-login.
  • With the v1 SDK, guest login after logout uses the same account; with the v2 SDK, it acts as a new account.

csharp
public void Logout()
{
    Auth.Logout();
}

STOVE Membership Withdrawal

Calling AuthUI.withdraw sends a withdrawal request to the Marina (Auth) server and automatically logs out on success. After withdrawal completes, move to the game's initial flow (start screen) to prompt re-login.

Handling failure
When result.IsSuccessful == false, don't show an error message yourself—delegate to OperationUI.HandleResult(result, ...). The SDK automatically shows the appropriate screen for the reason (sanction, dormancy, network, etc.). On success, an auto-logout occurs, so don't call Auth.logout separately.


csharp
public void Withdraw()
{
    AuthUI.Withdraw(result =>
    {
        if (result.IsSuccessful)
        {
            //Withdrawal complete - auto-logout occurs, so exit the game or move to the initial screen
        }
        else
        {
            OperationUI.HandleResult(result, (Result operationResult) =>
            {
                /** e.g., keep the current screen and prompt a withdrawal retry **/
            });
        }
    });
}

Using Coupons (Android only)

Calling ViewUI.coupon shows the STOVE coupon-entry screen. It's an Android-only feature, so it isn't provided on iOS.

The game app needs nothing beyond invoking the coupon window, but the game server needs to handle the item-grant (coupon) request.
For details, see the Game Server — ItemBox Integration Guide.


csharp
public void Coupon()
{
    ViewUI.Coupon((Result result, Dictionary<string, string> dictionary) =>
    {
        if (result.IsSuccessful)
        {
        }
        else
        {
            OperationUI.HandleResult(result, (Result operationResult) =>
            {
                /** e.g., keep the current screen **/
            });
        }
    });
}

Customer Center

Calling ViewUI.customerSupport shows the Customer Center page in a WebView while keeping the login state. The SDK internally issues an onlineAccessToken to handle the SSO integration.

Login state required
Since the SDK issues an onlineAccessToken for the SSO integration, Auth.login must be complete before the call. Calling it while logged out fails authentication and the page won't display correctly. Check Auth.AccessToken != null before calling. Handle the failure callback by delegating to OperationUI.HandleResult(result, ...).


csharp
public void CustomerSupport()
{
    ViewUI.CustomerSupport((Result result, Dictionary<string, string> dictionary) =>
    {
        if (result.IsSuccessful)
        {
        }
        else
        {
            OperationUI.HandleResult(result, (Result operationResult) =>
            {
                /** e.g., keep the current screen **/
            });
        }
    });
}

Looking Up the Member Number

You can get the logged-in user's STOVE member number (userId) via AccessToken.user.userId. When logged out, accessToken is null, so a check is needed before the lookup.


csharp
private string UserId()
{
    AccessToken accessToken = Auth.AccessToken;
    if(accessToken == null)
    {
        return "";
    }
    return accessToken.User.UserId;
}

Account Conversion

Used to convert a guest or third-party account to a registered member, or to link with a STOVE registered member. It's entered automatically from the AuthUI.manageAccount screen, or you can call the API below directly to show it as a standalone screen.


Convert to STOVE registered member (AuthUI.switchAccount)

A screen for converting a third-party account to a STOVE registered member. It can be called after third-party account login.


csharp
public void SwitchAccount()
{
    if (Auth.AccessToken != null) {
        AuthUI.SwitchAccount((Result result) =>
        {
            if (result.IsSuccessful)
            {
                //Account migration succeeded
            }
            else
            {
                //Account migration failed
            }
        });
    }
}

Guest → registered-member linking (AuthUI.link)

A feature for linking a guest account to a registered-member account. It's the same as 'Convert to registered member' on the account-management screen, and calling it is recommended only for guest accounts. (For non-guests, 'Link channel' is shown.)


csharp
public void link()
{
    if (Auth.AccessToken != null) {
        AuthUI.Link((Result result) =>
        {
            if (Auth.AccessToken.User.IsGuest())
            {
                // Remains a guest (conversion not completed)
            }
            else
            {
                // Conversion to registered member succeeded
            }
        });
    }
}

Language Setting

Changes the platform display language (19 types). Wire it so that the STOVE platform also changes when the game language changes.

Notification Setting

A feature for turning push notifications (daytime/nighttime) On/Off and looking up push settings.

In-game Terms-of-Service Notice

A feature for showing the STOVE terms of service in-game. A detailed implementation guide can be filled in once separate source material is provided.

You can show the STOVE community as a pop-up in-game, or call a specific community URL while keeping the login state.

Device-Registration Service

A feature for checking the user's device-registration status and showing the device-management screen. It determines the status using the deviceRegistrationPolicy and verifiedDevice properties.

Frequently Asked Questions



Q1. How does 'game withdrawal (cancellation)' differ from 'STOVE membership withdrawal'?
A. STOVE membership withdrawal withdraws the user from all services linked to the STOVE account.
Game withdrawal (cancellation), by contrast, withdraws only from that specific game and doesn't affect other games.
For both, you must implement a "warning notice" feature that prevents user mistakes.
Q2. What happens if I log out of a guest account?
A. Once a guest account logs out, there's no way to recover the account.
In the v2 environment, a new account is created when you log in as a guest after logout.
To prevent user mistakes, you must provide a "warning notice" screen on guest logout.
To prevent guest loss, we recommend providing the account-linking feature as required.
Q3. How should I implement the in-game terms-of-service notice?
A. Since the SDK doesn't provide a separate terms-of-service screen, implement it by choosing one of two methods.
[Option 1] Create a dedicated terms-of-service category in Partners and show it through the Customer Center, or
[Option 2] Create a separate button in-game to call the terms-of-service URL directly.
The game technical contact (CSM team) will guide you through the registration process.
Q4. I called the community but it doesn't show.
A. For the community to show correctly, the community must be pre-set in Partners,
and the key value set in Partners must be registered in the SDK Config's VIEW > community_id.
Please check both conditions. Ask the business owner about whether the community is set and its URL.
Q5. Why is the notification setting a required implementation item?
A. It must be provided to comply with domestic privacy policy and platform-company policies such as Apple Review Guideline (4.5.4).
In particular, push notifications can only be sent when the user has explicitly consented to receiving them through the app UI, and abusing them for promotional or direct-marketing purposes can result in loss of the permission.
Q6. Are there cautions for GUID-based games when using the account-withdrawal feature?
A. In a GUID-based game, if you use the account-withdrawal feature, a new GUID is issued when the user re-registers on the same device later, making it hard to identify them as the same user.
To prevent metric distortion, consider implementing the "game withdrawal" feature using the STOVE character-deletion API instead of the STOVE info-deletion (game-withdrawal) API.
Apply the implementation method to fit the menu's planning intent after discussing with the business/planning owner.
Q7. The device-registration pop-up doesn't show—how do I check?
A. First, check that you're using SDK Auth-ui v2.7.2 or higher.
In Partners > GM > SDK Config settings, the device_setup_exemption value must be set to false for the device-registration pop-up to show.
If it's set to true, the pop-up stays hidden. If that still doesn't resolve it, contact the game technical contact (CSM team).



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