Platform login
Guest sessions can be lost when the user closes the game or the browser. To avoid this, you can prompt the player to register or sign in on the Jest platform. Registered players can receive notifications through the Jest platform and are not at risk of losing their progress. See Notifications for more information. Converting players to registered users, so you can retain them is one of the most, if not the most important step of the user funnel. Any gains there translate directly to more users, more retained players and thus more revenue.
The platform will automatically prompt the user to register, which can be disabled if it's not desired. See SDK initialization for more information. Players complete the registration flow via SMS or RCS and are redirected back into the game.
Platform registration
The platform has a built in registration flow that can be triggered by the game. It is visually consistent with the rest of the platform.
This flow is used by the platform for the automatic registration prompt.
Once you've initialized the platform you can trigger the registration flow by calling at the appropriate moment. Only guest players should be prompted to register.
var player = JestSDK.player
if not player.is_registered:
# Guest player - prompt to register
JestSDK.login();
The user can either dismiss the popup or go through the flow. In either case the game does not need to react to this.
The method will throw an error if the player is already registered, or if the entry payload is invalid.

The method supports an optional payload which, if provided, is passed back to the game on login.
var player = JestSDK.player
if not player.is_registered:
JestSDK.login({"source": "after_tutorial"})
JestSDK.login()
void login(payload: Dictionary = {})
Options:
| Name | Type | Description |
|---|---|---|
payload | Dictionary | Optional. The entry payload to pass to the game on login. |
Customized registration flow
In addition to the default platform popup, the SDK allows you to build a fully customized registration experience using JestSDK.show_registration_overlay(). This approach gives you greater control over the UI and lets you better integrate the flow into your game.
All requirements and functionality remain the same as with the platform registration flow. The key difference is that your game is responsible for rendering and managing the user interface.
The platform will still display the required legal text and provide a dismiss button. This overlay is designed to be minimal, unobtrusive, and visually neutral so it fits naturally within your game.
Once triggered, your game is responsible for rendering the rest of the flow, giving you full control over the player experience:
var player = JestSDK.player
if not player.is_registered:
var handle = JestSDK.show_registration_overlay()
# Wire these to your in-game UI buttons
$LoginButton.pressed.connect(handle.login_button_action)
$CloseButton.pressed.connect(handle.close_button_action)
JestSDK.show_registration_overlay() is a convenience wrapper around
JestSDK.registration_overlay.show() — both forms are equivalent.
The returned JestRegistrationOverlayHandle exposes:
login_button_action()— initiates the login flowclose_button_action()— closes the overlayclosedsignal — emits when the overlay is dismissed (via either action or the platform's own close button)

The overlay with legal text and a close button.

The overlay on top of a game.
Pass a JestRegistrationOverlayOptions resource to set a theme ("dark" or "light") and an entry_payload that's passed back to the game after login. You can also provide an on_close callback that's invoked when the player dismisses the overlay — useful for cleaning up related in-game UI. The same callback can also be wired up via the handle's closed signal:
var options = JestRegistrationOverlayOptions.new()
options.theme = "light"
options.entry_payload = {"source": "main_menu"}
options.on_close = close_game_popup
var handle = JestSDK.show_registration_overlay(options)
$LoginButton.pressed.connect(handle.login_button_action)
$CloseButton.pressed.connect(handle.close_button_action)
on_close (and the equivalent closed signal on the handle) fires both when the platform's built-in close button is used and when close_button_action() is called, so you don't need to handle these cases separately.
JestSDK.show_registration_overlay()
JestRegistrationOverlayHandle show_registration_overlay(options: JestRegistrationOverlayOptions = null)
Convenience wrapper around JestSDK.registration_overlay.show(options). Both forms accept the same options and return the same handle.
Options (on JestRegistrationOverlayOptions):
| Name | Type | Description |
|---|---|---|
theme | String | Optional. "dark" (default) or "light". |
entry_payload | Dictionary | Optional. The entry payload to pass to the game on login. |
on_close | Callable | Optional. Called when the overlay is closed (via either action or the platform's close). |
Returns a JestRegistrationOverlayHandle with:
| Member | Type | Description |
|---|---|---|
login_button_action | method | Call from your login button to initiate the registration flow. |
close_button_action | method | Call from your close button to dismiss the overlay. |
closed | signal | Emitted when the overlay is closed (via either action or the platform close). |