MDM Deployment
Zero-Touch Setup
via MDM
Push every setting — credentials, room assignment, theme and branding — from your MDM, with no on-device configuration
How It Works
The Room Display supports Apple's Managed App Configuration standard, which every major MDM implements (SimpleMDM, Jamf, Mosyle, Kandji, Intune, and others). Your MDM pushes a set of key/value pairs to the app; the iPad boots straight into the room display with no on-device setup at all — ideal combined with Single App Mode.
- Settings delivered via MDM appear disabled in the app's Settings screen with a "Managed by your organization (MDM)" label, so on-site staff can't change them.
- Configuration changes pushed by the MDM apply live, without relaunching the app.
- Any subset of keys works: push only the theme and let staff configure calendar access on-device, or manage everything for full zero-touch deployment.
- Interactive Google/Microsoft sign-in cannot be pushed via MDM — zero-touch calendar access uses the Google Service Account method.
Configuration Keys
Calendar Access (Google Service Account)
All three keys must be present together; see the Google Workspace guide for how to create the service account.
| Key | Type | Value |
|---|---|---|
serviceAccountEmail |
String | Service account email (...@...iam.gserviceaccount.com) |
serviceAccountPrivateKey |
String | PEM private key from the service account JSON file — literal \n escapes are accepted as-is |
adminEmail |
String | Google Workspace admin email to impersonate |
Room Assignment
| Key | Type | Value |
|---|---|---|
roomEmail |
String | Room resource calendar email for this device |
Most MDMs support per-device variables here — in SimpleMDM, set the value to a custom attribute like {{room_email}} so a single app configuration serves the whole fleet.
Theme & Branding
| Key | Type | Value |
|---|---|---|
theme |
String | classic, midnight, or custom. Set this to custom if you push any colors — classic and midnight are fixed palettes and ignore brandName, logoURL and every themeColor… key |
brandName |
String | Brand name shown with the custom theme |
logoURL |
String | HTTPS URL to a PNG/JPEG logo; the app downloads and caches it |
themeColor… |
String | #RRGGBB hex color per role — see the table below. Any subset works; missing colors fall back to the Midnight palette |
What each color paints
| Key | Paints |
|---|---|
themeColorBackground |
Full-screen background on every view, and the label text on the Book Now button |
themeColorCardBackground |
Upcoming-events and meeting card backgrounds |
themeColorAccent |
Book Now button fill, join buttons, loading spinners, event dots |
themeColorAvailable, themeColorInUse, themeColorEndingSoon |
Status ring around the screen edge, per room state |
themeColorNotConfigured |
Ring and button on the not-yet-configured welcome screen |
themeColorTextPrimary, themeColorTextSecondary |
Body text and muted/secondary text |
themeColorMeetingTitle |
Current meeting title on the In Use screen |
themeColorTimeRemaining |
Countdown / time-remaining text |
themeColorDurationButtonText |
Quick-duration button text and border |
Because unspecified colors fall back to the dark Midnight palette, don't mix a light themeColorBackground with only a few overrides — the remaining Midnight defaults will leave text unreadable. Push the full set for a light theme.
Policies
| Key | Type | Value |
|---|---|---|
checkinRequired |
Boolean | Require meeting check-in |
checkinTimeoutMinutes |
Integer | Check-in timeout in minutes (e.g. 5, 10, 15) |
deviceMode |
String | door_display or room_controller |
meetingLookahead |
String | How far ahead upcoming meetings are shown: today (default), 24h, 72h or 7d |
microsoftClientId |
String | Custom Microsoft Entra app client ID (sign-in itself remains interactive) |
SimpleMDM Walkthrough
- In SimpleMDM, go to Apps → The Room Display → Managed Configuration.
- Add the keys you need from the tables above as key/value pairs.
- For per-device room assignment, create a custom attribute (e.g.
room_email) with a value per device, and set theroomEmailkey to{{room_email}}. - Assign the app — and optionally a Single App Mode profile — to your device group and push.
For MDMs that accept raw AppConfig XML:
<dict>
<key>serviceAccountEmail</key>
<string>meeting-room-display@my-project.iam.gserviceaccount.com</string>
<key>serviceAccountPrivateKey</key>
<string>-----BEGIN PRIVATE KEY-----\nMIIEvQIBADANBg...\n-----END PRIVATE KEY-----\n</string>
<key>adminEmail</key>
<string>admin@example.com</string>
<key>roomEmail</key>
<string>boardroom@example.com</string>
<key>theme</key>
<string>custom</string>
<key>brandName</key>
<string>Acme Inc</string>
<key>logoURL</key>
<string>https://example.com/logo.png</string>
<key>themeColorAccent</key>
<string>#B7CF4F</string>
<key>themeColorBackground</key>
<string>#100E24</string>
<key>checkinRequired</key>
<true/>
<key>checkinTimeoutMinutes</key>
<integer>10</integer>
<key>meetingLookahead</key>
<string>72h</string>
</dict>
Security Notes
Apple delivers Managed App Configuration into the app's sandboxed preferences — that is inherent to the AppConfig mechanism, so the service account private key is not stored in the iOS Keychain when supplied this way (the app never copies it anywhere else, and removing the key from your MDM configuration removes it from the device on the next push). Deploy to supervised devices and restrict who can edit the MDM app configuration.