Test your integration
The Testing console streams every event your SDK sends, live, with the numbers that prove an integration works — arrival lag, SDK version, device info, ATT state. Fire an event from your test device and watch it land in seconds.
Open the console
In the advertiser panel: reflect.cloud → Apps → Testing console. It connects over WebSocket (falls back to 2.5 s polling automatically) and shows the most recent events first, flashing green as they arrive. Nothing to configure — if your SDK is initialized with the right app key, events appear within seconds of being sent.
Read the Lag column first
Lag is device event time → server arrival — the single number that separates a healthy integration from a broken one:
- ≤ 5 s — healthy. This is what a correct integration looks like, including on the very first launch after install.
- ≤ 30 s — fine; the periodic flush window.
- ≤ 5 m — slow: usually a device with poor connectivity, or an event fired right before the app was backgrounded on an old SDK.
- > 5 m — broken: the batch sat in the durable queue. On iOS, update to unity-2.4.4 / ReflectCore 1.1.4 or newer — older cores could hold first-session events until the app's second open.
A ⏱ badge next to the lag means the device's clock was implausible and the server clamped the event timestamp — the lag shown is approximate, and the device clock is the thing to distrust, not the SDK.
Follow one device
Click 📌 on any row to pin that device: the stream narrows to its install_uuid (server-side, not just a visual filter), and a banner shows the device's profile — model, OS, SDK version, app version, ATT state. This is how you watch a single test phone in the middle of production traffic. Unpin from the banner; copy id puts the install_uuid on your clipboard for terminal use.
Filter the stream
- Type chips — one click isolates Installs, Sessions, Revenue, or Crashes (with live counts).
- App selector — scope to one app; every app that has produced an event in the buffer is listed.
- Free-text filter — matches event name, device model, SDK version, session, country, partner,
install_uuid,user_id.
Row details
Click any row for the full picture: event id, device time vs arrival, session, attribution (partner or organic), transaction and revenue, environment, ATT, rooted flag. Debug attribution → jumps to the attribution debugger pre-filtered to that install.
A first-install test, end to end
- Delete the app from the test device (iOS: Delete App, not Offload; Android: disable backup first —
adb shell bmgr enable false— or the install state survives reinstall). - Open the Testing console, ready to watch. Optionally click your tracking link on the device first to test attribution.
- Install and launch. Within seconds you should see
app_install,app_first_open,session_start,app_open— green lag, correctsdk_version, your app version. - Pin the device, then exercise your integration: sign-up, purchase, custom events — each should land with single-digit lag.
- Attribution note: install-to-click times under 60 seconds are treated as suspicious by fraud filtering — wait at least a minute between clicking your test link and installing.
Nothing arriving?
- The app key in your SDK config must match the app in Settings → Apps — the console shows the whole tenant, but a wrong key means the server rejects the batch entirely.
- Fully relaunch the app after adding the SDK; check the device has network.
- Enable SDK logging and look for
[Reflect]lines — the SDK prints every send and every response. - On iOS, confirm your build uses ReflectCore 1.1.4+: older cores combined with a declared tracking domain could silence devices until ATT was authorized. See the changelog.
- Still stuck — the quickstart walks the whole setup from zero, and the debug overlay shows what the SDK is collecting on-device.