DVR Time Traveler
Agency & MDM Deployment Guide
Complete reference for deploying DVR Time Traveler at scale with Mobile Device Management (MDM) platforms
Jump to Section
Overview
Managed Configuration Support
DVR Time Traveler supports 15 configuration settings that IT administrators can deploy remotely through their MDM console. All settings update in real-time without requiring app restarts.
What MDM Can Control
- Feature enable/disable
- Activation code deployment
- App behavior defaults
- Security restrictions
- Organization logo
What MDM Cannot Access
- User data (notes, patterns, reports)
- Device ID (app-generated)
- Subscription time remaining
- Usage statistics
- Investigation details
🔑 Agency Licensing
| Setting | Type | Description |
|---|---|---|
enterprise_license_key |
String | Your organization's activation code (Format: DVRTT-XXXX-XXXX-XXXX) |
organization_name |
String | Organization name displayed in Admin Settings |
License Type
Agency License
Annual subscription — duration determined at purchase. Contact us for pricing and renewal terms.
{
"enterprise_license_key": "DVRTT-1234-5678-90AB",
"organization_name": "Acme Police Department"
}
🎛️ Feature Control
| Setting | Type | Default | Description |
|---|---|---|---|
disable_notes_feature |
Boolean | false | Completely hides the Notes feature |
allow_logo_import |
Boolean | false | Set to true to allow personal logo imports from images or Base64. When disabled, personal logos cannot be selected or used in PDF reports; organization-provided logos remain available. |
disable_patterns_feature |
Boolean | false | Completely hides DVR Pattern storage |
disable_in_app_purchases |
Boolean | true | Prevents all IAP (required with agency activation codes) |
💡 Best Practices
disable_notes_feature: true if the agency restricts the "Notes" feature
disable_patterns_feature: true if the agency restricts the "PW/Patterns" feature
false only if your agency uses individual store purchases.
🏢 Agency Mode
Control app terminology and features to match your organization type — law enforcement or private investigation
| Setting | Type | Default | Description |
|---|---|---|---|
agency_mode |
String | law_enforcement | App persona. Controls terminology, PDF report headers, and multi-agent slot availability. Values: law_enforcement | investigation |
💡 How Agency Mode Works
{
"enterprise_license_key": "DVRTT-XXXX-XXXX-XXXX",
"organization_name": "Acme Investigations Inc.",
"agency_mode": "investigation",
"disable_in_app_purchases": true,
"custom_support_email": "it@acmeinv.com"
}
🖼️ Logo Management
Push organization logos directly to all devices using MDM configuration
| Setting | Type | Description |
|---|---|---|
mdm_logos |
JSON Array | List of logos to push to devices (max 10) |
default_logo_id |
String | Auto-select a specific logo on first launch |
logo_position_locked |
Boolean | Prevent users from changing logo position |
logo_position_value |
String | Enforce position: 'left' or 'right' |
Logo JSON Schema
{
"id": "dept_badge_1", // Unique identifier
"name": "Department Badge", // Display name in app
"base64": "iVBORw0KGgo..." // Base64-encoded PNG/JPEG (max 512×512 px)
}
📋 Logo Deployment Process
Prepare Logo
PNG or JPEG, max 512×512 pixels recommended
Configure in MDM
Add logo JSON to mdm_logos array in your MDM console
Automatic Sync
App syncs logos in real-time when config is pushed
{
"mdm_logos": [
{
"id": "dept_badge_1",
"name": "Department Badge",
"base64": "iVBORw0KGgoAAAANSUhEUgAA...FULL_BASE64_HERE...CYII="
},
{
"id": "traffic_unit",
"name": "Traffic Unit Logo",
"base64": "iVBORw0KGgoAAAANSUhEUgAA...ANOTHER_BASE64...CYII="
}
],
"default_logo_id": "dept_badge_1",
"logo_position_locked": true,
"logo_position_value": "left"
}
⚙️ Report Language Settings
| Setting | Type | Options | Default |
|---|---|---|---|
report_language_locked |
Boolean | true / false | false |
report_language_value |
String | 'en', 'fr', 'es', 'ar', 'de', 'it' | — (follow app) |
{
"report_language_locked": true,
"report_language_value": "fr"
}
Forces French for PDF report generation. Officers can still change the app interface language.
📞 Support & Customization
| Setting | Type | Description |
|---|---|---|
custom_support_email |
String | Override support email with your IT help desk |
custom_support_url |
String | Custom help desk URL or internal wiki |
deployment_notes |
String | Internal notes for IT reference (not visible to users) |
📝 Real-World Configuration Examples
Police Department (Full Lock-Down)
{
"enterprise_license_key": "DVRTT-1234-5678-90AB",
"organization_name": "Acme Police Department",
"disable_in_app_purchases": true,
"disable_patterns_feature": true,
"mdm_logos": [{
"id": "dept_patch",
"name": "Department Patch",
"base64": "iVBORw0KGgo..."
}],
"default_logo_id": "dept_patch",
"logo_position_locked": true,
"logo_position_value": "left",
"custom_support_email": "it@acmepd.gov"
}
Multi-Division Agency
{
"enterprise_license_key": "DVRTT-XXXX-XXXX-XXXX",
"organization_name": "Metro Police",
"disable_in_app_purchases": true,
"mdm_logos": [
{
"id": "traffic",
"name": "Traffic Division",
"base64": "iVBORw0..."
},
{
"id": "patrol",
"name": "Patrol Division",
"base64": "iVBORw0..."
},
{
"id": "k9",
"name": "K9 Unit",
"base64": "iVBORw0..."
}
],
"logo_position_locked": false,
"custom_support_email": "support@metropd.org"
}
Officers can choose their division logo. Logo position can be adjusted by user.
Quebec Agency (French PDF Reports)
{
"enterprise_license_key": "DVRTT-XXXX-XXXX-XXXX",
"organization_name": "Service de Police",
"report_language_locked": true,
"report_language_value": "fr",
"disable_in_app_purchases": true,
"custom_support_email": "soutien@servicepd.qc.ca"
}
Enforces French for all PDF reports. Officers may still change the app interface language themselves.
Complete Configuration (All 15 Settings)
{
"enterprise_license_key": "DVRTT-XXXX-XXXX-XXXX",
"organization_name": "Acme Police Department",
"disable_notes_feature": true,
"disable_patterns_feature": true,
"disable_in_app_purchases": true,
"report_language_locked": true,
"report_language_value": "fr",
"mdm_logos": [
{
"id": "dept_badge",
"name": "Department Badge",
"base64": "iVBORw0KGgo...BASE64..."
}
],
"default_logo_id": "dept_badge",
"logo_position_locked": true,
"logo_position_value": "left",
"custom_support_email": "it@acmepd.gov",
"custom_support_url": "https://help.acmepd.gov",
"agency_mode": "law_enforcement",
"deployment_notes": "Deployed 2026-01 – IT ticket #5234 – Approved by Cpt. Smith"
}
All 15 available settings shown. mdm_logos counts as one array setting and can hold up to 10 logos.
iOS — Complete Plist Format (Apple MDMs)
<dict>
<key>enterprise_license_key</key>
<string>DVRTT-XXXX-XXXX-XXXX</string>
<key>organization_name</key>
<string>Acme Police Department</string>
<key>agency_mode</key>
<string>law_enforcement</string>
<key>disable_notes_feature</key>
<true/>
<key>disable_patterns_feature</key>
<true/>
<key>disable_in_app_purchases</key>
<true/>
<key>mdm_logos</key>
<array>
<dict>
<key>id</key>
<string>dept_badge</string>
<key>name</key>
<string>Department Badge</string>
<key>base64</key>
<string>iVBORw0KGgo...BASE64...</string>
</dict>
</array>
<key>default_logo_id</key>
<string>dept_badge</string>
<key>logo_position_locked</key>
<true/>
<key>logo_position_value</key>
<string>left</string>
<key>report_language_locked</key>
<true/>
<key>report_language_value</key>
<string>fr</string>
<key>custom_support_email</key>
<string>it@acmepd.gov</string>
<key>custom_support_url</key>
<string>https://help.acmepd.gov</string>
<key>deployment_notes</key>
<string>Deployed 2026-01 - IT ticket #5234 - Approved by Cpt. Smith</string>
</dict>
Paste directly into the Custom Config / Managed App Config field of any Apple-based MDM (Jamf Pro, Mosyle, Kandji, Intune iOS, VMware Workspace ONE). If your MDM offers Import AppConfig.xml, use our schema instead and you'll get a labeled form. The plist above is exactly what iOS delivers to the app under com.apple.configuration.managed. Certified end-to-end with Mosyle Business on iOS 15.8.
🛠️ Platform-Specific Configuration
📥 Download Configuration Schemas
Import the official managed configuration schema into your MDM console to get field descriptions, validation, and auto-complete when configuring DVR Time Traveler.
Google Workspace
- Log in to Google Admin Console
- Go to Devices → Mobile & endpoints → Apps → Managed Google Play apps
- Select DVR Time Traveler
- Click Managed configurations
- Paste your JSON configuration
- Assign to user/device groups
Microsoft Intune
- Open Microsoft Endpoint Manager
- Go to Apps → App configuration policies → Add
- Platform: Android Enterprise
- Select DVR Time Traveler
- Configuration format: Use configuration designer
- Add configuration keys manually or paste JSON
- Assign to groups
VMware Workspace ONE
- Navigate to Apps & Books → Applications → Native
- Select DVR Time Traveler
- Go to App Configuration tab
- Paste JSON configuration
- Save and push to devices
Test DPC (Testing)
- Install Test DPC from Play Store
- Set up managed work profile
- Install DVR Time Traveler in work profile
- Go to Policy Management → App Restrictions
- Select DVR Time Traveler
- Add configuration JSON
- Test settings in app
✅ Used by SDTech engineering for Android configuration testing — validate your JSON before pushing it to Intune, Workspace ONE, or Managed Google Play in production.
Jamf Pro (iOS)
- Open Jamf Pro admin console
- Go to Mobile Device Apps → select DVR Time Traveler
- Click the App Configuration tab
- Choose Upload Preferences File or paste the plist above directly
- Save and scope to a smart group of enrolled iOS devices
Mosyle Business (iOS)
- Log in to business.mosyle.com
- Go to Apps → Add App → Custom / Enterprise App (upload the .ipa if the app is not yet on the App Store)
- Assign the app to a device or device group
- On the app's App Configuration page, paste the plist above or use Import AppConfig.xml
- Save and sync devices
✅ Certified end-to-end by SDTech on iOS 15.8
Microsoft Intune (iOS)
- Open Microsoft Endpoint Manager
- Go to Apps → App configuration policies → Add → Managed devices
- Platform: iOS/iPadOS
- Select DVR Time Traveler
- Configuration format: use Configuration designer or paste the plist XML above
- Assign to user/device groups
Kandji (iOS)
- Open the Kandji admin console
- Go to Library → Add New → App Config / Custom Managed App
- Select or add DVR Time Traveler (bundle ID:
com.sdtech.dvrtt) - Paste the plist above into the config field
- Assign to a Blueprint and deploy
🔄 Replacing a Device (Freeing a Slot)
How agency slots work
Your agency license includes a fixed number of device slots (seats). Each MDM-enrolled device that activates the app consumes one slot. When every slot is in use, a new device will report “License has reached maximum device limit” until a slot is freed.
Self-service: "Release This Device"
MDM-managed devices now have a “Release This Device” button in the app's subscription screen. When an officer is handing back or replacing a phone, they (or you) can tap it to free its seat instantly — no email to SDTech required. The freed seat is immediately available for the replacement device you enroll in MDM.
This is a soft release: if the button is tapped by mistake, the device simply re-claims its seat the next time the app is reopened — as long as it is still MDM-enrolled. To retire a device permanently, un-enroll it from the app in your MDM console; that withdraws its license key so it can no longer reclaim a seat.
Prefer to keep seat management under IT control only? Self-release can be disabled per license — contact SDTech at activation@sdtech.app and we will turn it off for your license. Once disabled, only SDTech can free a seat on your behalf (see Option B below).
Option A — Self-service release (fastest)
- Enroll and configure the replacement device in your MDM as usual (push the
enterprise_license_keyand any managed settings). - On the device being retired, open the app, go to the subscription screen, and tap “Release This Device.” Its seat is freed immediately.
- The replacement device activates automatically on its next launch and takes the freed seat.
💾 Back up first: before releasing, the app reminds the officer to export their notes and saved DVR passwords/patterns. This data is stored only on the device and does not move with the seat — back it up via Backup & Restore if it is needed.
Option B — Ask SDTech to free the slot
If self-release is disabled for your license, or you no longer have the old device on hand, we can free the seat for you:
- Enroll and configure the replacement device in your MDM as usual.
- Email SDTech at activation@sdtech.app to release the retired device's slot. Include:
- Your
enterprise_license_key(or organization name). - Which device to remove — the old device name/model and the user/officer it belonged to.
- Your
- SDTech releases the slot from the license dashboard, freeing exactly one seat (or all seats at once for a full fleet re-image).
- The replacement device activates automatically on its next launch and takes the freed slot.
Option C — Bulk fleet refresh (100+ devices)
Refreshing a large portion of the fleet at once (aging hardware replacement, agency-wide re-issue) is a routine operation and does not require SDTech intervention for typical volumes. Each seat migrates once, so cooldowns and per-seat caps don't fire.
- Enroll the replacement devices in your MDM in your usual bulk-onboarding flow — push DVRTT and the
enterprise_license_key. - Retire the old devices using any of the three methods:
- Self-service: users tap "Release This Device" on each retiring device (fastest for staggered rollout).
- Admin dashboard: IT clicks Retire device on each old activation row in the DVRTT license dashboard (best for batch operations by IT).
- Un-enroll from MDM: withdrawing the license key from the old device works too — SDTech handles the seat cleanup periodically.
- New devices auto-activate on first launch and take the freed seats.
Rule of thumb — refresh volume vs. license size:
- Up to 50% of the fleet in 30 days: no action needed, no throttling triggers.
- 50%–100% of the fleet in 30 days: still works cleanly, but IT may see amber "high fan-out" indicators in the dashboard — expected during a large refresh.
- Multiple full-fleet refreshes in 30 days (rare, e.g. major fleet-wide reissue): contact activation@sdtech.app in advance so we can raise the migration budget on your license before the refresh starts. A courtesy heads-up avoids the automatic anti-abuse lock triggering mid-refresh.
💾 Reminder about local data: case notes and saved DVR passwords/patterns live only on the device. Instruct users to run Backup & Restore → Export before their old device is wiped, then Import on the replacement.
Good to know
- MDM (agency) licenses run under an anti-abuse rate limit: up to 10 device swaps per seat per 30 days with a 24-hour cooldown per seat. These limits comfortably cover legitimate device replacements, warranty exchanges, and full fleet refreshes.
- If a user simply gets the same device back (same install), it reactivates in its original slot — no action needed.
- For agencies with frequent turnover, ask us to provision a small buffer of extra slots so routine swaps don't hit the limit, and we can batch-clean retired devices periodically.
- Remind users to export/back up their case data before a device is wiped — investigation data is stored only on the device and cannot be recovered by SDTech.
🔧 Troubleshooting
❓ Settings Not Applying
- App installed from Managed Play Store (not regular Play Store)
- Device properly enrolled in MDM
- Configuration pushed to device
- App restarted after config change
adb shell dumpsys restrictions
❓ Activation Code Not Recognized
- Key format:
DVRTT-XXXX-XXXX-XXXX(20 characters with dashes) - Key is active (not expired)
- App package ID matches license
- No typos in key
❓ Logos Not Appearing
- Base64 string is complete (starts with
iVBORw0for PNG) - JSON syntax is valid (use JSONLint)
- Logo ID is unique
- Maximum 10 MDM logos
- Check app logs for sync errors
❓ Real-Time Updates Not Working
- Most settings update instantly
- Some MDM platforms have propagation delay (5-15 minutes)
- Try restarting app if config doesn't sync
- Verify device has network connection
📊 Configuration Summary
| Category | Settings Count | Real-Time Updates |
|---|---|---|
| Agency Licensing | 2 | ✔️ Yes |
| Feature Control | 3 | ✔️ Yes |
| Logo Management | 4 | ✔️ Yes |
| Report Language | 2 | ✔️ Yes |
| Support | 3 | ✔️ Yes |
| Total | 15 settings | All live |