Troubleshooting
Things that go wrong, what they mean, how to fix them. Roughly ordered by how often we see them.
Device shows a blank screen
The launcher loaded but failed to render.
First check: is the device online? Hosted URL path needs network.
Second: does the launcher URL work in a browser on your laptop? If not, our service is down — email us, or check status.mobilauncher.com (when we have it).
Third: look at the device's WebView console. Most kiosk-capable
MDMs (SOTI MobiControl, Intune, Workspace ONE, etc.) let you enable
remote debugging in the kiosk-mode profile; once it's on, open
chrome://inspect on your laptop while the device is USB-connected.
The launcher logs to console.error when boot fails — look for
"config fetch failed" or "license could not be verified."
"Customize my launcher" button does nothing
Browser localStorage is blocked. We store your edit token in localStorage so you can come back without logging in. Private browsing / incognito mode in some browsers blocks it.
Fix: use a regular browser tab, not private mode. Or sign up again with the same email — we'll return your existing tenant + a fresh token.
Edit token rejected
You re-signed-up with the same email and got a fresh token, but your old browser is still trying the old token. Two ways:
- Sign up again from the browser that's failing → it stores the new token
- Or: clear
mobilauncher.portal.tenant.<your-tenant>from localStorage manually (DevTools → Application → Local Storage)
Tile shows but tapping does nothing
Different causes by tile type:
App tile
- Package isn't installed on the device — install it via your MDM
- Package is installed but the kiosk profile is blocking the launch — check your MDM's allow-list / kiosk app list
- You're running in a regular browser (no MDM agent bridge, no standalone APK) — the demo toast says "via the device MDM agent (demo)" to make this obvious. Expected; nothing to fix
- The package name has a typo —
com.foo.barvscom.foo.bar.app, vendor docs aren't always clear.adb shell pm list packagesto find the real one
Web tile
- URL is malformed (missing
https://) - Lockdown is blocking external URLs — relax the WebView whitelist in the Lockdown profile
- The site you're linking to is blocking iframe / WebView loading
(
X-Frame-Options, CSP). TryopenExternal: trueon the tile to hand off to the default browser instead
Devices show last week's config
Hosted URL path:
- WebView is caching the config aggressively despite our
cache-control: no-storeheader. Some older Android WebView builds ignore it - Fix: force-reload the launcher. Most Lockdown profiles have a hot key combo for this; check your MobiControl profile config
- Or restart the launcher activity from MobiControl Console
Offline bundle path:
- File Sync hasn't pushed the new bundle yet. Force-sync from Console, or wait for the next sync window
- The Console may show "out of sync" — that's the signal
Header / hero / footer scroll along with the tile grid
You're on an old renderer build. We pushed a fix in May 2026 that makes only the tile grid scroll (header, hero, footer pinned).
Force-reload the launcher to pull the latest hosted version. If you're on an offline bundle, re-download from the Portal and re-push via File Sync.
Status bar / nav bar visible despite Lockdown profile saying hide
MobiControl version skew. Some older Lockdown WebView builds don't honor the immersive-mode hints we emit in CSS.
Fix on the MobiControl side: in the Lockdown Profile, explicitly set "Immersive mode" or "Sticky immersive" on the WebView. The exact field name moves around between MobiControl versions.
Broadcasts don't appear on devices
- Free tier: the bell icon and the broadcast feature aren't active on Free. Upgrade to Pro.
- Pro+: devices poll every 60 seconds. Wait a minute after posting
- Network blocked: the device needs to reach
api.mobilauncher.com. Check your VPN / firewall rules - Expired: the broadcast
expiresAtis in the past. Post a new one with a future expiry - Scheduled: the broadcast
startsAtis in the future. It will appear when that time arrives
"Stripe Checkout opens but fails / 'No such price'"
Our environment is misconfigured (price IDs not set or wrong). This shouldn't happen — email us with a screenshot, we'll fix and let you know when to retry. Stripe didn't charge you.
"Stripe Checkout succeeded but the Portal still shows me as Free"
The webhook from Stripe takes a moment to land. Wait ~30 seconds and reload the Portal. If it still shows Free after a minute, the webhook probably failed — email us with your Stripe receipt number and we'll trace it.
You won't get double-charged; Stripe's webhook is idempotent on our side.
"Manage subscription" 400s
Means our server can't find a Stripe customer linked to your tenant. Usually because you upgraded from a Free signup that we didn't link cleanly.
Email us with your tenant ID — we'll attach the Stripe customer manually and the button will work.
"I changed pricing in Stripe but the Portal shows the old price"
The dollar amounts displayed in the Portal upgrade panel are hardcoded in our UI — they're not fetched from Stripe at runtime. When we change the Stripe price, we also push a UI update.
Email us if you see a mismatch; we'll catch it in our release cadence too.
My device runs Android 6 / KitKat / something old
Min supported Android is 7.0 (API 24) on the standalone app, and whatever the latest MobiControl agent supports for Lockdown WebView (typically 5.0+).
If you're on something older, the launcher might render but with visual glitches (CSS Grid wasn't fully stable until 7.0). It's not worth us patching for, sorry — the install base is too small.
Something else
Email [email protected] with:
- Tenant ID (the slug from your launcher URL)
- Device model + Android version
- MobiControl version (if applicable)
- What you tried, what you expected, what you got
- A screenshot if there's a visual issue
- Browser console output if there's a JS error
I'll usually respond same-day, slower on weekends.