Skip to main content

Testing your integration

The portal's game preview is not a plain iframe — it plays the app's role on the SDK bridge, injects the same SDK build the phones do, and shows a live log of every event in both directions. If your integration behaves here, it behaves on device.

The event log

Open any of your games in the portal and hit Run game. Under the device frame, the SDK eventspanel logs the traffic chronologically, timestamped from the game's boot (the clock resets on every load and restart):

RowMeaning
app → gameLifecycle the host sent: appActive / appHidden.
game → appEverything your game emitted: ready, levelStart, score, …
droppedEvents rejected by the SDK limits (rate, payload size, unknown name) — with a running count. A healthy integration shows none.

What to verify before submitting

1. ready fires once, at the right moment — after your loading finishes, before ~8 s. Check its timestamp in the log against when your game is actually playable.

2. Hide/Show handling. Press H (or the Hide button in the toolbar). The preview sends appHidden exactly like a swipe does — your game must freeze: no animation, no sound, no advancing timers. Press again for appActive; your game must resume exactly where it stopped.

3. Boot-hidden flow. Toggle Hide first, then press R (restart). Your game now boots without ever receiving appActive — exactly how the feed warm-loads it. Verify it stays silent and does not start gameplay until you press Show.

4. No drops. If dropped rows appear, your game exceeds a limit — usually an event fired per frame instead of per gameplay moment.

Preview vs device

The preview injects the same SDK build the phones do, into every HTML document your build navigates to, before your first statement (HTML your game fetches as data stays byte-exact, like on device) — so SDK presence and event behavior match the device exactly. What the preview cannot reproduce: real device performance, the app's native mute enforcement, and process-level hibernation. The lifecycle contract you verify here is the same one the app drives.