Deploy Ladill Frontdesk / deploy (push) Successful in 59s
Ship OEM documentation for MDM, Elo, and Zebra lockdown plus a provisioning QR on kiosk device registration so factory tablets can pair on first boot. Co-authored-by: Cursor <cursoragent@cursor.com>
320 lines
10 KiB
Markdown
320 lines
10 KiB
Markdown
# Ladill Frontdesk Kiosk — Manufacturer Flash Guide
|
||
|
||
This guide is for OEM partners flashing Ladill visitor-kiosk tablets before shipment. It covers APK installation, kiosk lockdown, and customer provisioning.
|
||
|
||
## Package summary
|
||
|
||
| Field | Value |
|
||
|-------|-------|
|
||
| App name | Ladill Frontdesk Kiosk |
|
||
| Package ID | `com.ladill.frontdesk.kiosk` |
|
||
| Min Android | 8.0 (API 26) |
|
||
| Target Android | 15 (API 35) |
|
||
| Default server | `https://frontdesk.ladill.com` |
|
||
| Factory admin PIN | `462834` (change after first provision) |
|
||
|
||
## Files you receive
|
||
|
||
| File | Purpose |
|
||
|------|---------|
|
||
| `ladill-frontdesk-kiosk-1.0.0.apk` | Signed release APK to flash on each device |
|
||
| This guide | Flash, lockdown, and QA checklist |
|
||
|
||
Forty8Tech builds the APK with:
|
||
|
||
```bash
|
||
./scripts/build-kiosk-apk.sh
|
||
```
|
||
|
||
Output path: `apps/android/dist/ladill-frontdesk-kiosk-<version>.apk`
|
||
|
||
The Android source tree lives under `apps/android/` locally and is not committed to git. Distribute the built APK to manufacturers directly (USB, SFTP, or MDM bundle).
|
||
|
||
---
|
||
|
||
## End-to-end flow
|
||
|
||
```mermaid
|
||
flowchart LR
|
||
A[Flash APK] --> B[Set device owner / MDM]
|
||
B --> C[Pin as HOME launcher]
|
||
C --> D[Customer registers kiosk in Frontdesk]
|
||
D --> E[Scan provisioning QR on tablet]
|
||
E --> F[Kiosk runs fullscreen]
|
||
```
|
||
|
||
1. **Factory:** Install APK, apply kiosk policy, set app as default HOME.
|
||
2. **Customer:** Registers a Visitor Kiosk under Ladill Frontdesk → Devices.
|
||
3. **Field / factory QA:** Scan the provisioning QR shown on the device edit screen.
|
||
4. **Runtime:** Tablet loads the web kiosk, sends heartbeats, and stays locked.
|
||
|
||
---
|
||
|
||
## 1. Generic pre-flash checklist
|
||
|
||
Before flashing a batch:
|
||
|
||
- [ ] Tablet is factory-reset (recommended for device-owner provisioning).
|
||
- [ ] Wi-Fi or Ethernet works; device can reach `https://frontdesk.ladill.com`.
|
||
- [ ] Date/time and timezone are correct (TLS and session cookies depend on this).
|
||
- [ ] Screen stays on when plugged in (disable aggressive battery saver).
|
||
- [ ] You have the signed APK for the target build version.
|
||
|
||
### Install APK (ADB)
|
||
|
||
```bash
|
||
adb install -r ladill-frontdesk-kiosk-1.0.0.apk
|
||
```
|
||
|
||
For system-privileged installs (some OEM images):
|
||
|
||
```bash
|
||
adb root
|
||
adb remount
|
||
adb push ladill-frontdesk-kiosk-1.0.0.apk /system/priv-app/LadillFrontdeskKiosk/LadillFrontdeskKiosk.apk
|
||
adb shell chmod 644 /system/priv-app/LadillFrontdeskKiosk/LadillFrontdeskKiosk.apk
|
||
adb reboot
|
||
```
|
||
|
||
---
|
||
|
||
## 2. Android Device Owner (generic MDM)
|
||
|
||
Device Owner mode is required for true kiosk lock (block Home, Recents, status bar). Use this for custom tablets or any MDM that supports Android Enterprise.
|
||
|
||
### 2.1 Provision device owner via MDM (recommended)
|
||
|
||
Device must have **no Google accounts** and ideally be fresh out of reset.
|
||
|
||
Use your MDM’s **Android Enterprise device-owner** provisioning (QR, NFC, zero-touch, or StageNow). Assign `com.ladill.frontdesk.kiosk` as the **kiosk / lock-task** application.
|
||
|
||
The current APK uses immersive fullscreen, HOME launcher registration, and `startLockTask()` when the OS allows it. For strict device-owner policies (block Settings, prevent uninstall, silent install), provision through your EMM—do not rely on manual ADB unless your OEM documents a supported path.
|
||
|
||
> Need a build with a bundled `DeviceAdminReceiver` for `dpm set-device-owner`? Contact Forty8Tech for an OEM white-label package.
|
||
|
||
### 2.2 MDM policy (any EMM)
|
||
|
||
Configure these policies for `com.ladill.frontdesk.kiosk`:
|
||
|
||
| Policy | Setting |
|
||
|--------|---------|
|
||
| Kiosk / lock-task app | `com.ladill.frontdesk.kiosk` |
|
||
| Single app mode | Enabled |
|
||
| Default launcher | `com.ladill.frontdesk.kiosk` |
|
||
| Stay on launcher | Enabled |
|
||
| Status bar | Hidden or restricted |
|
||
| System navigation | Disabled |
|
||
| Auto-launch on boot | Enabled |
|
||
| Allowlist URLs | `*.ladill.com` |
|
||
| Camera | Allowed |
|
||
| Microphone | Allowed |
|
||
| Install unknown apps | Disabled |
|
||
| Factory reset | PIN-protected |
|
||
|
||
### 2.3 Set as default HOME launcher
|
||
|
||
After first launch:
|
||
|
||
1. Press Home (if visible during setup).
|
||
2. Choose **Ladill Frontdesk Kiosk**.
|
||
3. Select **Always**.
|
||
|
||
Or via ADB:
|
||
|
||
```bash
|
||
adb shell cmd package set-home-activity com.ladill.frontdesk.kiosk/.MainActivity
|
||
```
|
||
|
||
### 2.4 Boot behavior
|
||
|
||
The APK registers for `BOOT_COMPLETED` and starts automatically. Confirm:
|
||
|
||
```bash
|
||
adb shell am start -n com.ladill.frontdesk.kiosk/.MainActivity
|
||
adb reboot
|
||
# After boot, kiosk setup or web UI should appear without manual launch
|
||
```
|
||
|
||
---
|
||
|
||
## 3. Elo Touch Solutions
|
||
|
||
Typical on Elo I-Series and Open Frame Android panels with **EloView** or **Elo Access**.
|
||
|
||
### 3.1 EloView (cloud)
|
||
|
||
1. Add device to your EloView account.
|
||
2. Upload `ladill-frontdesk-kiosk-1.0.0.apk` as a managed app.
|
||
3. Create a **Kiosk** profile:
|
||
- **Primary app:** Ladill Frontdesk Kiosk (`com.ladill.frontdesk.kiosk`)
|
||
- **Mode:** Single app / lock task
|
||
- **Auto launch:** On boot
|
||
- **Navigation bar:** Hidden
|
||
- **Power button:** Map to sleep only (not exit kiosk)
|
||
4. Allow **Camera** and **Microphone** in the profile (visitor photo + QR checkout).
|
||
5. Push profile to device group before shipment.
|
||
|
||
### 3.2 Elo device settings (on-device)
|
||
|
||
1. Settings → **Elo Device Settings** → **Home App** → Ladill Frontdesk Kiosk.
|
||
2. Enable **Start on boot**.
|
||
3. Disable **Android Settings access** for field users.
|
||
4. Set **Display timeout** to maximum; keep **USB power** connected in lobby installs.
|
||
|
||
### 3.3 Elo QA
|
||
|
||
- [ ] App survives power cycle.
|
||
- [ ] No browser chrome visible.
|
||
- [ ] Camera preview works on check-in photo step.
|
||
- [ ] QR scanner works on checkout step.
|
||
|
||
---
|
||
|
||
## 4. Zebra Technologies
|
||
|
||
Typical on ET40, ET45, TC series, and custom Zebra Android builds with **StageNow** and **MX**.
|
||
|
||
### 4.1 StageNow barcode (recommended)
|
||
|
||
1. Open **StageNow** on a PC.
|
||
2. Create a **Setup** profile:
|
||
- Install APK from `file://` path or download URL (host APK on your CDN).
|
||
- Set **Default Launcher** to `com.ladill.frontdesk.kiosk`.
|
||
- Enable **Mx/kiosk mode** → single app = Ladill Frontdesk Kiosk.
|
||
3. Export profile as a barcode.
|
||
4. Scan on factory line during device setup.
|
||
|
||
### 4.2 MX KeyManager / AppMgr
|
||
|
||
| MX setting | Value |
|
||
|------------|-------|
|
||
| `AppMgr` install | `ladill-frontdesk-kiosk-1.0.0.apk` |
|
||
| `KioskMode` enabled | `true` |
|
||
| `KioskMode` package | `com.ladill.frontdesk.kiosk` |
|
||
| `UiMgr` hide status bar | `true` |
|
||
| `PowerMgr` stay awake on AC | `true` |
|
||
|
||
### 4.3 Zebra DataWedge (optional)
|
||
|
||
The kiosk uses the **web** QR scanner (`html5-qrcode`) for badge checkout. DataWedge is **not required**. If you remap a hardware scan trigger, ensure it does not steal focus from the WebView during checkout.
|
||
|
||
### 4.4 Zebra QA
|
||
|
||
- [ ] StageNow profile applies on clean device.
|
||
- [ ] Lock task survives suspend/resume.
|
||
- [ ] Wi-Fi roaming does not drop kiosk session.
|
||
|
||
---
|
||
|
||
## 5. Customer provisioning (after flash)
|
||
|
||
The tablet ships **unlinked** until the customer pairs it.
|
||
|
||
### 5.1 Customer steps (Ladill Frontdesk admin)
|
||
|
||
1. Sign in to [Frontdesk](https://frontdesk.ladill.com).
|
||
2. Go to **Devices → Add device**.
|
||
3. Type: **Visitor Kiosk**.
|
||
4. Save. Open the device → note the **Provision Ladill Kiosk app** QR code.
|
||
|
||
### 5.2 On-tablet steps
|
||
|
||
1. Power on tablet; Ladill Frontdesk Kiosk opens to **Provision kiosk**.
|
||
2. Tap **Show QR scanner** and scan the QR from Frontdesk.
|
||
- Or paste the device token / full kiosk URL manually.
|
||
3. Tap **Start kiosk**. The visitor check-in UI loads.
|
||
|
||
Provisioning URL format:
|
||
|
||
```
|
||
https://frontdesk.ladill.com/kiosk/d/{device_token}
|
||
```
|
||
|
||
Deep link (also supported):
|
||
|
||
```
|
||
ladillfrontdesk://kiosk/{device_token}
|
||
```
|
||
|
||
### 5.3 Verify online status
|
||
|
||
In Frontdesk → Devices, the kiosk should show **Online** within a few minutes (heartbeat every 5 minutes, plus activity on page load).
|
||
|
||
---
|
||
|
||
## 6. Admin access (factory and field service)
|
||
|
||
Hidden admin panel for re-provision, reload, and PIN change:
|
||
|
||
1. Tap the **top-left corner 7 times** within 2 seconds.
|
||
2. Enter admin PIN (factory default: `462834`).
|
||
3. Options: reload kiosk, re-provision, change PIN, exit admin.
|
||
|
||
**Change the factory PIN** before shipping to end customers, or document that the customer must change it during provisioning QA.
|
||
|
||
---
|
||
|
||
## 7. Security and signing
|
||
|
||
| Item | Guidance |
|
||
|------|----------|
|
||
| Factory keystore | Replace before mass production; do not ship factory passwords to end customers. |
|
||
| APK signature | All devices in a SKU should use the same release key for OTA updates. |
|
||
| Network | HTTPS only; app blocks mixed content. |
|
||
| Token storage | Device token is stored in EncryptedSharedPreferences on-device. |
|
||
| Token rotation | If customer regenerates token in Frontdesk, re-scan QR or re-provision. |
|
||
|
||
---
|
||
|
||
## 8. Factory QA checklist (per device)
|
||
|
||
| # | Test | Pass |
|
||
|---|------|------|
|
||
| 1 | APK installs without error | ☐ |
|
||
| 2 | App is default HOME launcher | ☐ |
|
||
| 3 | Boots directly into Ladill app after cold start | ☐ |
|
||
| 4 | Home / Recents blocked in kiosk mode | ☐ |
|
||
| 5 | Provisioning QR scan links device | ☐ |
|
||
| 6 | Visitor welcome screen loads | ☐ |
|
||
| 7 | Camera permission prompt accepted; photo step works | ☐ |
|
||
| 8 | Device shows Online in Frontdesk | ☐ |
|
||
| 9 | Admin PIN changed from factory default | ☐ |
|
||
| 10 | Device serial / IMEI recorded on build sheet | ☐ |
|
||
|
||
---
|
||
|
||
## 9. Troubleshooting
|
||
|
||
| Symptom | Likely cause | Fix |
|
||
|---------|--------------|-----|
|
||
| “Device token required” / 404 | Invalid or revoked token | Re-scan QR from Frontdesk Devices |
|
||
| Stuck on setup screen | No network | Connect Wi-Fi; verify `frontdesk.ladill.com` reachable |
|
||
| Camera not working | Permission denied | Re-grant camera in admin → reload; check MDM camera policy |
|
||
| Device shows Offline | Network or heartbeat blocked | Allow `POST /api/devices/heartbeat`; disable battery optimization for app |
|
||
| User can exit to Settings | Lock task not active | Apply MDM kiosk policy; set device owner |
|
||
| White screen after provision | TLS or DNS issue | Check date/time; verify HTTPS certificate trust |
|
||
| Regenerated token | Old token invalid | Re-provision from admin panel or scan new QR |
|
||
|
||
### Useful ADB commands
|
||
|
||
```bash
|
||
# Logs
|
||
adb logcat -s LadillFrontdeskKiosk
|
||
|
||
# Clear app data (forces re-provision)
|
||
adb shell pm clear com.ladill.frontdesk.kiosk
|
||
|
||
# Check lock task state
|
||
adb shell dumpsys activity activities | grep mLockTaskMode
|
||
```
|
||
|
||
---
|
||
|
||
## 10. Contact
|
||
|
||
For white-label APK signing, device-admin receiver builds, or OEM-specific MX/Elo profiles:
|
||
|
||
**Forty8Tech / Ladill** — hardware@ladill.com
|
||
|
||
Include: tablet model, Android version, MDM platform, batch size, and target market.
|