Skip to main content

Why MRUK Spatial Mapping and QR Tracking Fail on Managed Meta Devices

Meta Quest 3, Quest 3S, Quest 2, Quest Pro. Both MHMS and Legacy enrollment. Spatial mapping, QR code detection, apps using Meta's Spatial SDK or MR Utility Kit (MRUK), specifically apps requiring com.oculus.permission.USE_SCENE or ACCESS_MR_SENSORS

Written by Westley Heagy

What is MRUK?

MRUK stands for Meta MR Utility Kit. It is a Unity SDK package that gives apps access to Meta's Scene API. Developers use it to build spatially-aware experiences: room scanning, surface detection, QR code tracking, keyboard tracking, and content placement in physical space. QR code detection via MRUK requires Meta XR Core SDK v83 or later and Meta MR Utility Kit v83 or later.

It works by scanning the environment using passthrough cameras and the Scene API. To do this, apps require the com.oculus.permission.USE_SCENE permission, which controls access to Meta's spatial data. When the platform grants this permission, it also enables ACCESS_MR_SENSORS, which is what allows the passthrough cameras to read the environment for spatial tracking.

Meta's Spatial SDK and MRUK require store-level authorization to work reliably across every launch. This means the app needs to be distributed through Meta's Horizon store channel. Apps uploaded directly to ManageXR as APKs are not recognized as trusted by Meta's platform. At the permission level, what this looks like in practice is that ACCESS_MR_SENSORS reverts to "ignore" on every app relaunch. Without it, com.oculus.permission.USE_SCENE cannot be exercised, and spatial features silently fail. The app launches without error, so there is no obvious indication of what is wrong.

The same APK typically works correctly when distributed outside of ManageXR via sideloading tools like SideQuest. This leads developers to believe ManageXR is blocking something at the system level. ManageXR is not the cause, and the behavior is the same no matter which approved third-party MDM is in use. The issue is Meta's platform trust. The app lacks store-level authorization because it was not distributed through Meta's Horizon channel.

This also means turning on Automatically Grant Permissions in ManageXR does not fix the issue. ManageXR can only auto-grant standard Android permissions like CAMERA and RECORD_AUDIO. It cannot grant com.oculus.permission.USE_SCENE. That is a Meta-specific runtime permission tied to store authorization, and no ManageXR setting can substitute for it.

Meta reproduced it in their own QA environment, and confirmed this issue. They do not plan to fix it. Their workaround is to distribute the app as a Private App through Meta's Horizon store channel.

Affected Behaviors

The following features fail on managed devices when this issue is present:

  • QR code detection (MRUK v78+)

  • Spatial mapping and room scanning

  • Any feature built on Meta's Spatial SDK or Scene API that requires com.oculus.permission.USE_SCENE or ACCESS_MR_SENSORS

  • Any Unity app using the MRUK prefab with Scene Support set to Required or Supported

The failure pattern is consistent, e.g., works on first launch, fails on every subsequent launch.

Not affected:

  • Camera permission for standard in-app camera use (android.permission.CAMERA)

  • Apps that do not use the Spatial SDK or MRUK

Common Misdiagnosis

Developers who experience this issue often report one of the following:

  • "ManageXR is restricting OpenXR at the system level"

  • "My app works sideloaded but not under ManageXR"

  • "Automatically Grant Permissions is on but QR scanning still doesn't work"

  • "Camera permissions look correct in Android settings but MRUK still can't scan"

ManageXR is not blocking OpenXR, and the camera permission (android.permission.CAMERA) is not the issue. The root cause is that the app lacks store-level authorization, so Meta's platform withholds ACCESS_MR_SENSORS and com.oculus.permission.USE_SCENE on every relaunch.

The Workaround: Distribute as a Private App

Meta's workaround is to publish the app as a Meta Horizon Private App and install it through Meta's Horizon store channel rather than uploading the APK directly to ManageXR.

Private App distribution gives the app proper store-level authorization, which is what Meta's platform checks for on every launch. Once the app has that authorization, spatial mapping and QR tracking work reliably.

Steps

1. Publish the app as a Private App on Meta Horizon

Follow Meta's guide: Deploying Private Apps

Private Apps do not require public review. They are distributed only to members of an organization you control in the Meta Horizon Admin Center.

2. Add the Private App to your Horizon Managed Apps library

In the Meta Horizon Admin Center, add the Private App to your organization's Managed Apps library.

3. Import the app into ManageXR via the MAS integration

Use ManageXR's Meta Horizon Managed App Store integration to sync the app from your Managed Apps library into ManageXR. Once imported, deploy it to your configuration as you would any other app. Do not upload the APK directly to ManageXR's VR Content library.

The app installs through Horizon's infrastructure with proper store authorization. Spatial mapping and QR tracking should work on every launch from that point forward.

Did this answer your question?