Skip to content
Stove
Last Updated

Curious about the actual application flow?

Usage Scenarios / Registering a Device

Device Registration

Understanding


Device registration is a security feature that allows game access only from mobile devices the user has designated, or restricts access at login by designating/managing specific PCs.

Item Mobile PC
Eligible users Registered members only (guest accounts not allowed) Registered members only / provided only for domestic accounts (by sign-up country)
Device identification method Identified by the mobile device's unique identifiers (UDID, ADID) Install a PC device-info collection program
(collects manufacturer, product name, serial number, then stores them encrypted)
Device registration limit Up to 10 devices per account per game
(default max 5; request a change from the technical contact)
Fixed at up to 5 per account
Authentication method Secondary email or phone possession verification Identity verification
Handling on withdrawal On game cancellation, that game's registered-device info is deleted automatically On STOVE account withdrawal, registration info is deleted automatically (across the whole account)
※ Individual game cancellation does not affect the designated-PC setting

Application Methods

For mobile, you can choose the enforcement level of device registration by per-game policy. The device-registration screen is provided as a platform-common UI.
For PC, it's provided as a platform default feature. (No separate integration work is needed.)



Platform Setting Purpose Behavior
Mobile Required setting Security first
  • Cannot proceed with the game until device registration is complete
  • Forces the device-registration popup on unregistered-device environments
  • Service is available after device registration completes
Optional setting Usability-focused
  • Initially, the game can be used without device registration
  • For accounts with a device-registration history, the popup is forced on later access from an unregistered device
  • On registered devices, it can be used without additional restrictions
PC Provided as platform default
  • Users can set and delete it themselves on the STOVE PC web
  • For accounts with a designated-PC setting, the feature activates when attempting PC-client (launcher) login

Request enforcement-level changes for the mobile environment from the technical contact
ㅁ It's configured in STOVE Partners.
ㅁ To operate it as optional, separately request the 'optional-use setting' work from the technical contact.

Integration Guide


Prerequisites

Item Details Notes
Request device-registration setup Request the required/optional setting method from the technical contact STOVE Partners
Apply the Mobile SDK The device-registration popup is provided by the SDK by default. SDK application is required See the SDK installation guide
Check the User Access Token The token obtained via the SDK after user login is needed Real-time lookup required
Check the API Access Token An API Access Token for server-to-server communication is needed. Request it from the publishing technical contact Request from the technical contact

Basic Integration Structure

The device-registration feature operates via the platform-common UI provided by the STOVE Mobile SDK. The CP company must implement the areas below.

Areas to implement
Show the device-registration popup: show the registration popup to users on unregistered devices according to the setting (required/optional).
Handle incomplete registration: if the user cancels registration, re-prompt registration with a guidance UI instead of logging out.
Enter device management: place a device-management button on the settings screen and call the device-management feature.
Server bypass-prevention validation: when validating the token, also check device-registration status to block unregistered/bypass access.
Registration-based benefits (optional): look up device-registration status and use it for in-game benefits, etc.


For the device-registration popup/dialog wording, refer to the examples below.

Type Wording examples (popup/dialog copy)
Basic guidance type "Device registration is a required step." "Please complete device registration for smooth gameplay."
Security-emphasis type "Device registration is required to protect your account." "You can use the game after completing device registration."
User-setting-based guidance type "Device registration is required per the device-registration setting." "To keep using the service, please complete device registration."

Development


Mobile SDK

Both showing the device-registration popup and the in-game device-management UI are handled automatically by the Auth/AuthUI modules. The game client only needs to call two entry points (AuthUI.Login, AuthUI.ManageDevices) and handle the follow-up flow based on the user's response in the result callback.

Areas handled automatically by the MobileSDK vs areas the game implements
SDK-automatic: when to show the device-registration screen and its UI, the possession-verification (email/phone) flow, and the registered-device list screen
Game-implemented: placing the "device management/registration" button on the in-game settings screen, deciding whether to show it, branching on the result callback, and the follow-up flow when device registration is incomplete (canceled)

Prerequisites

  • Modules: you must apply the Auth and AuthUI modules. For SDK installation, see SDK Download and Installation and Development Environment Setup.
  • Precondition: after Auth.Initialize completes, you must be using the AuthUI.Login flow. The device-registration screen is shown automatically inside AuthUI.Login. For the login flow, see the Sign-in Guide.
  • Permissions/settings: no separate device permissions are needed. The device-registration policy (required/optional, device_setup_exemption) is set by the technical contact in the SDK Config. (See Integration Guide → Prerequisites above)
  • Dependencies: the integrated login UI (AuthUI.Login) + an in-game settings screen (where the device management/registration button is placed)

Development Flow

These are the two entry points the MobileSDK handles automatically. The game only needs to handle when to call each entry point and how to branch on the result.

  1. On sign-up/login — shown automatically in AuthUI.Login
    • The game calls AuthUI.Login() (same as the usual login flow)
    • The SDK checks the user's device-registration status and, if needed, shows the device-registration screen automatically
      • Required-setting policy + unregistered user → forced display
      • Optional-setting policy → shown only when an account with a registration history accesses from an unregistered device
    • When the user completes registration, the callback returns result.IsSuccessful → proceed with the usual post-login handling
    • If the user closes the screen without completing registration, the callback returns result.IsCanceled → handle the follow-up flow per game policy
      • Recommended: show a guidance UI, then call AuthUI.Login again (recalling makes the SDK show the device-registration screen again)
      • Logging out is not recommended due to the risk of user churn
  2. In-game — call AuthUI.ManageDevices
    • Place a device management / device registration button in an appropriate location such as the in-game settings screen
    • Decide whether to show the button using two values of Auth.AccessToken.User (see the table below)
    • On button click, call AuthUI.ManageDevices() → the SDK shows the device registration/management screen automatically
    • Branch on the callback result using the Auth.AccessToken.User.VerifiedDevice value
      • true: registered device → keep the game running
      • false: unregistered device → follow-up flow per policy, such as moving to the initial screen and re-logging in

Whether to show the button — the decision order matters

  1. First check deviceRegistrationPolicy (whether the device-registration policy is in use)
  2. Only if it's true, determine registration completion using the verifiedDevice value
Device-registration status deviceRegistrationPolicy verifiedDevice UI handling Meaning
Registered true true Show the device-management button The currently connected device is registered
Unregistered true false Show the device-registration button The currently connected device is unregistered
Feature off false Always true N/A The device-registration setting is off. A request to the technical contact is needed

Troubleshooting

SituationCauseHandling approach
The AuthUI.Login callback returns result.IsCanceledThe user closed the device-registration screen without completing registrationRecommended to show a guidance UI, then call AuthUI.Login again. Logging out is not recommended due to the risk of user churn.
A 46217 response occurs during token validationA code returned by the server's /token/verify response. It's judged as an unregistered device or bypass accessHave the client prompt re-login so the SDK device-registration flow runs again. For detailed server handling, see the Server section above or Integration Guide → Server: Device-registration bypass-prevention validation.
Registration fails when calling AuthUI.ManageDevicesThe account's registered devices exceed the policy limit (default 5 / up to 10 per game / fixed 5 for PC)Guide the user to delete some devices from the existing list and re-register. Request per-game registration-limit changes from the technical contact.
Cannot decide which users should see the device-management buttonReferencing only verifiedDevice without checking deviceRegistrationPolicyAlways check deviceRegistrationPolicy = true first, then decide the button label (manage/register) using verifiedDevice.
AuthUI.Login fails due to a temporary network errorresult.IsServerError or a network error (com.stove.base.network domain)Show the SDK's standard error UI with OperationUI.HandleResult, and provide a retry flow after the user confirms.
The device-registration screen doesn't appear on a guest accountMobile device registration is a registered-members-only feature (guest accounts not supported)Don't show device-registration guidance to guest users at all. It's shown automatically after they become a registered member.

Sample Code

Examples of call/callback handling for the two entry points AuthUI.Login and AuthUI.ManageDevices. Provided per platform.


  1. AuthUI.Login — handling the automatic display of the device-registration screen

AuthUI.Login is the same as the usual login call. Just add a result.IsCanceled branch in the callback to handle the follow-up flow when device registration is incomplete.

For the full AuthUI.Login flow, see the Sign-in Guide
The example below excerpts only the parts needed for device-registration handling.

csharp
public void Login()
{
    AuthUI.Login((Result result, AccessToken accessToken) =>
    {
        if (result.IsSuccessful)
        {
            /** Handle login success ... (omitted) **/
        }
        else if (result.IsCanceled)
        {
            /** Device-registration screen closed (registration incomplete) → handle per game policy **/
            /** Recommended: show a guidance UI, then call Login() again → re-show the device-registration screen **/
        }
        else
        {
            /** Other error handling ... (omitted) **/
        }
    });
}

  1. AuthUI.ManageDevices — called on in-game button click

Call it when the "device management/registration" button is clicked on the in-game settings screen, etc. After the call, branch the follow-up flow using the Auth.AccessToken.User.VerifiedDevice value.

csharp
public void ManageDevices()
{
    if (Auth.AccessToken == null) return;

    AuthUI.ManageDevices((Result result) =>
    {
        if (Auth.AccessToken.User.VerifiedDevice)
        {
            /** Registered device → keep the game running **/
        }
        else
        {
            /** Unregistered device → prompt device registration (e.g., move to the initial screen and retry login) **/
        }
    });
}

Server

This is the area that calls POST /auth-secure/v1.0/my-device/{game_id}/check to look up whether the user's device is registered and whether secondary authentication methods (secondary email verification, phone possession verification) are registered. Use it for branching in-game benefit grants, checking secondary authentication methods, etc.

This is a separate API from bypass-prevention validation
Blocking bypass access on unregistered-device environments is handled by the 46217 response of the token-validation API (POST /member/v3.0/{game_id}/token/verify). (See Integration Guide → Server: Device-registration bypass-prevention validation above)

Prerequisites

  • API Access Token issuance must come first. Use it as Bearer {API Access Token} in the Authorization header. See the Authentication menu → Server guide for the issuance procedure.
  • The structure must receive the User Access Token from the client with each request. Don't cache it on the game server.

Development Flow

  1. The client passes the User Access Token to the game server.
  2. The game server checks the remaining validity of the API Access Token it holds and renews it if needed.
  3. Call POST /auth-secure/v1.0/my-device/{game_id}/check.
    • Path: fill {game_id} with the Game ID.
    • Headers: Authorization: Bearer {API Access Token}, caller-id: {service_id}_SERVER, Content-Type: application/json
    • Body: { "access_token": "{User Access Token}" }
  4. Branch based on the response code.
    • code == 0 → determine device-registration status with value.device_registered.
      • true: registration complete → normal entry or in-game benefit grant
      • false: unregistered → guide the client's device-registration flow (the Mobile SDK handles it automatically)
    • code != 0 → see the troubleshooting table

Troubleshooting

These are handling approaches per response code. For the detailed response-code and message spec, see the API & SDK Reference menu.

Response codeSituationHandling approach
40000Missing/malformed Authorization header / invalid or expired User Access Token / request body errorCheck the header format and body, then retry. If the User Access Token has expired, prompt the client to re-login.
40101The API Access Token is invalid (wrong Authorization header value)Reissue the API Access Token and retry.
40103API Access Token or User Access Token expiredIf the API Access Token expired, renew it and retry; if the User Access Token expired, prompt the client to re-login.
41002The game_id in the call path differs from the service_id of the API Access Token you holdIssue and manage the API Access Token separately per environment and game.
50000Unknown errorIt may be a temporary error, so retry; if it persists, inquire through the technical contact.

Sample Code

An example of calling device-registration and authentication-info lookup (POST /auth-secure/v1.0/my-device/{game_id}/check).

Replace the Base URL to match the environment (Live/Sandbox)
In production, instead of hardcoding, we recommend separating it into an environment variable (e.g., STOVE_API_BASE_URL) or a framework config file and injecting it per environment.

java
// Java 25 LTS — java.net.http.HttpClient + Jackson(ObjectMapper)
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.time.Duration;
import java.util.Map;

ObjectMapper mapper = new ObjectMapper();
String baseUrl = "https://api.onstove.com";
String serviceId = "STOVE_GAME";
String callerId = serviceId + "_SERVER";

try (HttpClient client = HttpClient.newBuilder()
        .connectTimeout(Duration.ofSeconds(5))
        .build()) {

    String body = mapper.writeValueAsString(Map.of(
            "access_token", userAccessToken));

    HttpRequest req = HttpRequest.newBuilder(
            URI.create(baseUrl + "/auth-secure/v1.0/my-device/" + serviceId + "/check"))
            .header("Content-Type", "application/json")
            .header("Authorization", "Bearer " + apiAccessToken)
            .header("caller-id", callerId)
            .POST(HttpRequest.BodyPublishers.ofString(body))
            .build();
    HttpResponse<String> res = client.send(req, HttpResponse.BodyHandlers.ofString());
    JsonNode data = mapper.readTree(res.body());
    if (data.path("code").asInt() != 0) {
        // See the troubleshooting table (40000 / 40101 / 40103 / 41002, etc.)
        throw new IllegalStateException("device check failed: " + data.path("code"));
    }
    JsonNode value = data.path("value");
    boolean deviceRegistered = value.path("device_registered").asBoolean();
    if (deviceRegistered) {
        // Device registration complete — normal entry / grant benefits
    } else {
        // Device unregistered — guide the client's device-registration flow
    }
}

Frequently Asked Questions



Q1. How do I configure the device-registration setting?
A. Configure it via Partners > GM > SDK Config Settings > Per-game Config Management (mo).
Setting auth-ui > device_setup_exemption to false activates the device-registration feature.
For optional operation, you must separately request the work from the technical contact.
Q2. Can I set a different number of registrable devices per game?
A. Yes. Without a separate request, the default is up to 5 devices. To change the number of registrable devices per game, request it from the technical contact.
Q3. What does the 46217 error mean?
A. It's returned when token validation is performed while an account with the device-registration policy enabled accesses from an unregistered device.
Treat it as a bypass access attempt of device registration: block access and guide the user through the re-login procedure.
Q4. In an optional-setting game, does the 46217 error occur even for users with no device-registration history?
A. No, it doesn't. In an optional-setting game, the 46217 error occurs only when an account with at least one registered device accesses from an unregistered device.
An account with no registered devices passes normally from any device.
Q5. Can I also look up other security settings such as overseas-login blocking, OTP, and designated PC?
A. Yes. Via the GET /auth-secure/v1.0/security/setting API, you can look up whether overseas-login blocking, OTP, and designated PC are in use.
You can use this to implement an in-game security-status icon or benefit handling by security level.
Q6. How do I reset the authentication methods (email/phone)?
A. Authentication-method resets can only be handled through customer support (Partners). You cannot reset them directly via API.



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