DVR Time Traveler

Agency & MDM Deployment Guide

Complete reference for deploying DVR Time Traveler at scale with Mobile Device Management (MDM) platforms

✔️ Google Workspace ✔️ Microsoft Intune ✔️ VMware Workspace ONE ✔️ MobileIron

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.

Example Configuration
{
  "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

Data Security: Set disable_notes_feature: true if the agency restricts the "Notes" feature
Password Compliance: Set disable_patterns_feature: true if the agency restricts the "PW/Patterns" feature
Cost Control: In-app purchases are disabled by default for MDM-managed devices. Set to 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

Law Enforcement (default): Uses "Officer", "Badge Number", "Agency", and "Court Report" terminology. Multi-agent slots (Officer 1 / Officer 2) are enabled for shared patrol devices.
Private Investigation: Uses "Investigator", "Investigator ID", "Organization", and "Investigation Report" terminology. Multi-agent slots are disabled (one user per device).
Priority: MDM config overrides license policy, which overrides the user's local setting. If set via MDM, users cannot change their mode.
Example — Private Investigation Firm
{
  "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

mdm_logos Array Structure
{
  "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

1
Prepare Logo

PNG or JPEG, max 512×512 pixels recommended

2
Convert to Base64

Use online tool: base64-image.de

Or command line: base64 -i logo.png

3
Configure in MDM

Add logo JSON to mdm_logos array in your MDM console

4
Automatic Sync

App syncs logos in real-time when config is pushed

Complete Logo Configuration Example
{
  "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)
PDF Generation Language Lock Example (Quebec Agencies)
{
  "report_language_locked": true,
  "report_language_value": "fr"
}

Forces French for PDF report generation. Officers can still change the app interface language.

🔒 Privacy and storage: Sensitive records use OS-protected storage (Android Keystore / iOS Keychain); password-protected backups use AES-256-GCM. Photos and PDFs are ordinary files, not separately encrypted by the app. The app does not automatically upload case content to SDTech. User exports, sharing, voluntary submissions and device photo-cloud synchronization may transfer copies.

📞 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

  1. Log in to Google Admin Console
  2. Go to Devices → Mobile & endpoints → Apps → Managed Google Play apps
  3. Select DVR Time Traveler
  4. Click Managed configurations
  5. Paste your JSON configuration
  6. Assign to user/device groups

Microsoft Intune

  1. Open Microsoft Endpoint Manager
  2. Go to Apps → App configuration policies → Add
  3. Platform: Android Enterprise
  4. Select DVR Time Traveler
  5. Configuration format: Use configuration designer
  6. Add configuration keys manually or paste JSON
  7. Assign to groups

VMware Workspace ONE

  1. Navigate to Apps & Books → Applications → Native
  2. Select DVR Time Traveler
  3. Go to App Configuration tab
  4. Paste JSON configuration
  5. Save and push to devices

Test DPC (Testing)

  1. Install Test DPC from Play Store
  2. Set up managed work profile
  3. Install DVR Time Traveler in work profile
  4. Go to Policy Management → App Restrictions
  5. Select DVR Time Traveler
  6. Add configuration JSON
  7. Test settings in app
Download Test DPC

✅ 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)

  1. Open Jamf Pro admin console
  2. Go to Mobile Device Apps → select DVR Time Traveler
  3. Click the App Configuration tab
  4. Choose Upload Preferences File or paste the plist above directly
  5. Save and scope to a smart group of enrolled iOS devices

Mosyle Business (iOS)

  1. Log in to business.mosyle.com
  2. Go to Apps → Add App → Custom / Enterprise App (upload the .ipa if the app is not yet on the App Store)
  3. Assign the app to a device or device group
  4. On the app's App Configuration page, paste the plist above or use Import AppConfig.xml
  5. Save and sync devices

✅ Certified end-to-end by SDTech on iOS 15.8

Microsoft Intune (iOS)

  1. Open Microsoft Endpoint Manager
  2. Go to Apps → App configuration policies → Add → Managed devices
  3. Platform: iOS/iPadOS
  4. Select DVR Time Traveler
  5. Configuration format: use Configuration designer or paste the plist XML above
  6. Assign to user/device groups

Kandji (iOS)

  1. Open the Kandji admin console
  2. Go to Library → Add New → App Config / Custom Managed App
  3. Select or add DVR Time Traveler (bundle ID: com.sdtech.dvrtt)
  4. Paste the plist above into the config field
  5. 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)

  1. Enroll and configure the replacement device in your MDM as usual (push the enterprise_license_key and any managed settings).
  2. On the device being retired, open the app, go to the subscription screen, and tap “Release This Device.” Its seat is freed immediately.
  3. 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:

  1. Enroll and configure the replacement device in your MDM as usual.
  2. 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.
  3. SDTech releases the slot from the license dashboard, freeing exactly one seat (or all seats at once for a full fleet re-image).
  4. 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.

  1. Enroll the replacement devices in your MDM in your usual bulk-onboarding flow — push DVRTT and the enterprise_license_key.
  2. 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.
  3. 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

Check:
  • App installed from Managed Play Store (not regular Play Store)
  • Device properly enrolled in MDM
  • Configuration pushed to device
  • App restarted after config change
Verify via ADB: adb shell dumpsys restrictions

❓ Activation Code Not Recognized

Verify:
  • 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

Verify:
  • Base64 string is complete (starts with iVBORw0 for 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

Solution:
  • 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

💬 Agency Support

📧

Email Support

support@sdtech.app

📞

Phone

+1-514-716-4443

🌐

Website

sdtech.app

💼

Sales Inquiries

enterprise@sdtech.app