MobiControl setup
How to point SOTI MobiControl's Lockdown at MobiLauncher, with the gotchas. If you've done MobiControl Lockdown before, the launcher itself is the easy part — the profile config is where you'll spend time.
A note on SOTI's terminology. SOTI calls this Lockdown (not "kiosk mode"), and the lockdown home screen is rendered from an HTML Home Screen Layout Template — there is no single "enter a URL here" field. Exact labels and section names move between MobiControl versions; the names below match the v2025 console. SOTI's own reference: Lockdown configuration.
How SOTI Lockdown is organized
A Lockdown configuration (in a Profile) has, roughly:
- Custom Home Screen — the authorized home screen items you add with Add, plus the Home Screen Layout Template (an HTML file) that controls how they're displayed.
- Lockdown Settings — toggles for the system UI and hardware (Home Button, Recents Button, Power Menu, Keyguard, System Information / status bar, Notifications, Full Device Lockdown, Lockdown Type: Native or Activity Suppression, etc.).
- Preview Settings — Device Manufacturer / Model (the on-screen skin) and the Home Screen Layout Template selector.
Because the home screen is just an HTML template SOTI renders in a WebView, the cleanest way to boot straight into a hosted web launcher is a minimal template that redirects to your launcher URL. The device boots into Lockdown → renders the template → immediately lands in MobiLauncher, full-screen, with no SOTI tile in between.
Two paths
- Hosted URL — fastest to start. A redirect template points at our URL; the device fetches the launcher every boot. Free + Pro + Ent.
- Offline bundle (Pro+) — File Sync pushes the launcher to local
storage; the same template points at
file://. Survives no-network boots.
Use hosted URL for Free tier and for testing. Switch to the offline bundle when you have a real Pro/Ent fleet and an SLA that doesn't tolerate "launcher waited 8 seconds for DNS at power-on."
Path 1: Hosted URL
1. Make a redirect Home Screen Layout Template
Create an HTML file and upload it as a custom Home Screen Layout
Template (Lockdown → Custom Home Screen → Home Screen Layout Template →
add/upload a custom template). Replace YOUR-TENANT-ID:
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1, viewport-fit=cover" />
<title>MobiLauncher</title>
<style>html, body { margin: 0; height: 100%; background: #0b0b0b; }</style>
</head>
<body>
<script>location.replace('https://app.mobilauncher.com/t/YOUR-TENANT-ID');</script>
</body>
</html>
That's the whole template — it has no items of its own; it just hands the device to MobiLauncher, which renders your real tile grid.
Depending on your MobiControl build, you may instead have a single-app / web home-screen item option — if so, adding one home screen item pointed at the launcher URL works too. The redirect template is the version-agnostic route and what we test against.
2. Lockdown Settings for a real kiosk
The launcher draws its own header and footer, so hide SOTI's system UI — otherwise you get double chrome. These are SOTI's verbatim toggle names:
| Lockdown Setting | Set to | Why |
|---|---|---|
| Lockdown Type | Native | Hard lockdown — apps can't launch unless allowed |
| Full Device Lockdown | On | Strictest form; the launcher owns the screen |
| Home Button | Off | No escaping to the device home |
| Recents Button | Off | No app switcher |
| Power Menu | Off | Stops users rebooting / powering off (your call) |
| Keyguard | Off | Skip the lock screen on a dedicated device |
| System Information | Off | Hide the status bar — the launcher shows its own clock/battery |
| Allow Status Bar Expansion | Off | (Activity Suppression only) no pull-down shade |
| Native Notifications | Your call | On if your fleet relies on app notifications |
If you must use Activity Suppression instead of Native (some device mixes need it), the launcher still works — Native just gives a cleaner, harder lockdown.
3. Whitelist the apps your tiles launch
Every app tile in your config dispatches an Android package. If Lockdown blocks the launch, the launcher shows an error toast — but the fix is here: add each app's package name to the profile's allowed apps. (Web tiles need nothing extra; they open in the launcher's WebView.)
The launcher itself needs cookies + localStorage allowed in the Lockdown WebView (per-tenant config cache, dismissed-broadcast state). We serve HTTPS, so cleartext HTTP isn't required.
Path 2: Offline bundle (File Sync)
See offline-bundles.md for building the bundle. On the MobiControl side it's the same as Path 1, with two changes:
File Sync the unpacked
launcher/directory to/sdcard/mobilauncher/(mode: Replace).In the redirect template, point at the local file instead of our URL:
location.replace('file:///sdcard/mobilauncher/index.html');
Permissions to grant the profile:
| Permission | Why |
|---|---|
| Read external storage | The launcher reads its own bundle files |
| Network access | Broadcasts polling + (Ent) remote config |
| Launch installed apps | App-tile dispatches |
If your fleet is Zebra or Samsung and you want agent-action tiles (reboot, clearAppData), the MX / Knox SDK permissions surface here too — that's Enterprise-tier territory, and per-OEM SDK certification on real hardware happens during beta onboarding (see faq.md for current status).
Alternative: lock to the standalone APK
Instead of running the launcher in SOTI's WebView, you can install the MobiLauncher APK and make it the locked app. It carries its own WebView + native bridge (agent actions, device properties), and you set it as the Lockdown home / single allowed app. See the APK steps at the bottom of this page; the no-MDM commands also show how to point it at a tenant. This is the better path if you want the native bridge features.
Updating config
Hosted URL: edit the config in the Portal; devices re-fetch on the next launcher reload. No MobiControl involvement.
Offline bundle: download a fresh bundle, replace the File Sync source; MobiControl re-syncs on the next window (or trigger it from Console).
Common MobiControl-side gotchas
"Tiles render but tapping an app does nothing." Lockdown is blocking the launch — add the target package to the allowed-apps list. The toast on the tile is MobiControl's blocker talking, not us.
"Works on Wi-Fi, blank on cellular." Hosted-URL behavior — your APN is probably blocking the domain or the device has no DNS at boot. Switch to the offline bundle.
"Devices show last week's layout." Hosted-URL path: the Lockdown WebView is caching aggressively. We send cache headers, but some MobiControl WebView builds ignore them — force-reload the launcher (some Lockdown profiles have a hot-key) or restart the launcher from Console. Offline-bundle path: File Sync hasn't pushed the new bundle yet — force-sync from Console.
"Double status bar / nav bar." A Lockdown Setting above is still on — re-check System Information, Home Button, Recents Button.
Sanity check: did it work?
After applying the profile to a test device:
- The device boots straight into your launcher (your deployment name in the header, your tile grid showing) — no SOTI tile screen first.
- No status bar, no nav bar.
- Tapping a tile launches the app or opens the URL.
- The Home button does nothing (or returns to the launcher).
- You can't swipe to Android home.
If any fail, it's almost always a Lockdown Setting, not the launcher. See troubleshooting.md.
No MDM? The standalone Android app
For small fleets without MobiControl, we have a sideloadable APK that does the kiosk-WebView job in a single app.
# 1. Build the APK (or grab a prebuilt one from us; coming soon).
# On a fresh checkout, bootstrap the Gradle wrapper once first —
# see packages/lockdown-android/README.md (gradle wrapper ...).
cd packages/lockdown-android
./gradlew assembleDebug
# 2. Install on the device (USB debugging on)
adb install -r app/build/outputs/apk/debug/app-debug.apk
# 3. Launch pointed at your tenant
adb shell am start -n com.oakash.mobilauncher.beta/.MainActivity \
--es url "https://app.mobilauncher.com/t/<your-tenant>"
# 4. Set as default launcher (so the home button stays in our app)
adb shell cmd package set-home-activity com.oakash.mobilauncher.beta/.MainActivity
A stopgap for small fleets and a good way to test before committing MobiControl resources. On its own it does NOT have full lockdown — power button, volume keys, etc. stay active — so for production fleets, SOTI Lockdown (or the APK locked via SOTI as above) is the right tool.
We may publish this as a signed Play Store app for fleets that want a permanent no-MDM option. Email if that's you.