App distribution on Meta for Work & Meta for Education
Updated: Nov 12, 2024
Meta for Work and Meta for Education are enterprise-grade solutions that allow organizations to use mixed reality to transform their business operations, training programs, and customer experiences by providing tools to manage fleets of Meta Quest devices and deploy apps to those managed devices.
This guide describes the various distribution options available to developers for managed devices.
Overview
At a high level, developers can choose to distribute their apps via Meta Horizon Store or to make apps available for deployment privately to customers via one or more deployment methods:
Distribution via Meta Horizon Store
Private app deployment via Meta for Work or Meta for Education, Meta Quest Developer Center or a third party MDM solution
Choosing the right distribution method depends on the needs of your business and your customers.
In this guide, you’ll learn more about each method to help you decide which works best for you.
Distributing apps via the Meta Horizon Store
The Meta Horizon Store is a distribution platform provided by Meta, where developers can publish their apps & experiences. The Store is available on the web and on Meta Quest devices, including managed devices (subject to admin control).
Public Store
When you publish an app to the store, it becomes available for discovery by everyone with a Meta Quest device. Apps on the public store are installed by end users using the Store app on their devices. However, they cannot be directly deployed to device groups or device profiles by an admin in Meta Admin Center.
To learn more about distributing your app in the Store, take a look at Publishing your VR App.
Managed Store
If your app is eligible, you can also opt to distribute your app to the managed store, where it can be discovered by admins on Admin Center and by managed users on the store.
When you opt in for managed store discovery, your app will be available for admins to browse and deploy to managed devices within their organization. Your app will be shown to managed users browsing their managed Meta Horizon Store, and can be directly installed by an admin on managed devices.
Criteria for the managed store
To be eligible for managed store distribution, your app must first be available in the public Meta Horizon Store. In addition, your app must be free to download from the store. Off-platform monetization for bulk license subscriptions are permitted, per the app policies.
Opting in for managed store distribution
Within Meta Quest Developer Center, navigate to Store Availability on the Distribution tab, and choose how your app can be distributed. You’ll find options for Public and Managed.
If your app is already live, Public will already be enabled.
Before you enable Managed distribution, you may be required to sign an addendum to your existing Developer Distribution Agreement.
The distribution options cannot be removed once the app is submitted for review, but the option for managed distribution can be enabled after review.
Note: App engagement analytics for your app cannot be filtered based on the store distribution method.
Deploying private apps
For developers building custom applications for individual customers, or applications that aren’t suitable for distribution via the Store (referred to as private apps in this guide), you can deploy apps by one or more private methods, as described below.
Private apps do not undergo a formal review by Meta. All private apps hosted on the Meta Quest Developer Center and distributed through a business channel are responsible for complying with applicable Meta terms and policies and applicable legal requirements, as well as the best practices specified in the Code of Conduct for Virtual Experiences (see Private App Policies). Meta reserves the right to take action if a developer does not comply with these terms.
Unlike apps in the Store, private apps do not have API access to any platform features that require a Data Use Checkup (DUC). If your app requires access to these platform features, you will need to select a different distribution option.
App sharing between Meta accounts is also not supported for managed Meta account users on managed Meta Quest devices. Private apps shared with organizations that use Meta for Work or Meta for Education must be installed onto managed devices by organization admins.
Private apps cannot share a package name with any apps already in the Store. If you’re deploying a custom or early-release version of an existing app as a private app, you must change the package name to something unique.
Deploying private apps via Meta Quest Developer Center
Private apps can be made available to organizations that use Meta for Work or Meta for Education for distribution via a business release channel in the Meta Quest Developer Dashboard.
Admins provide an organization key through which they can receive an invite to a private app and add it to their organization’s app library. From the organization’s app library, admins can then directly install the private app on managed devices.
Prerequisites
Private app hosting is not enabled by default for Meta Quest developer organizations. In order to deploy private apps to managed devices via the Meta Quest Developer Center, developers need to be invited to share private apps by an admin of a Meta for Work or Meta for Education organization.
When you have been invited to share private apps by a Meta for Work or Meta for Education organization, you will receive an invitation by email.
The invitation will contain a link and an Organization Key, which you will need to enter as part of a verification flow once you click the link. Once verification is complete, you’ll be able to share your private apps with the Meta for Work or Meta for Education organization that sent the invite. If this is your first time receiving an invite, your developer organization will be automatically enabled to create private apps.
Creating a private app in Meta Quest Developer Center
Click Quest (Private app). Be sure to select the correct application type. Business channels are automatically created as the default release channel for private apps.
In the left-side navigation, under My Apps, select your private app.
In the left-side navigation, click Distribution, then Release Channels.
In the Business Channel, click the Organizations tab.
Click Add Organization to enter the organization key for an organization (see details on how to get an Organization key here).
Once added, the application will be shared with an admin for the organization. You can see the status of the invitation under the Organization tab.
Updating a private app on Meta Quest Developer Center
Use Meta Quest Developer Hub (MQDH) to upload new builds to an existing business channel. All users and organizations invited to this channel will have access to the updated build.
Admins will receive a notification within Meta Admin Center that an update is available to be accepted.
In the left-side navigation, under My Apps, select your private app.
In the left-side navigation, click Distribution, then Release Channels.
In the Business Channel, click the Organizations tab.
Select Subscribed Organizations.
Click on the delete icon on the right, then confirm deletion.
The application will be removed from the recipient organization’s app library and will be deleted from devices that had previously installed the app.
Private apps via self-hosted APKs
As an alternative to distributing private apps via Meta Quest Developer Center, admins can deploy your apps to their managed devices directly, by adding a URL to your self-hosted APKs.
Sharing your self-hosted private app with customers using Meta for Work or Meta for Education
Host your APK file at a public URL. This must be a URL that initiates a direct download of the APK file.
(Recommended) Generate a MD5 hash that your customers can use to validate the APK file once it’s downloaded.
(Recommended) Protect your app from being downloaded by unintended recipients by requiring a custom HTTP header that will be added when making a download request to your public URL.
(Optional) Upload any required expansion files that should be downloaded along with the app when installed on customer devices.
Provide your self-hosted APK URL to your customer.
Your customer will then log in to Meta Admin Center and add your app using the details you provided.
Apps that are distributed via self-hosted URLs are not automatically updated when you upload a new APK to the same destination URL, and admins are not notified when your APK is updated.
To ensure your app is updated on managed devices, upload your latest build to a new URL and share that URL with the admins of organizations you’re working with.
Private apps via third-party MDM
If you’re deploying apps to organizations that use a supported third-party MDM solution, you can provide an APK file to the customer to install to managed devices via their MDM service.
Apps with modular content
This guide covers various approaches to deploying single / self-contained apps on managed devices. But you may have an app which delivers content in a modular format. For example, if your app provides a library of training modules, you may not want all of those modules to be compiled inside the APK file, either for file-size or content management reasons.
Depending on your app’s content topology, there are different ways to ensure your content is deployed on managed devices.
Launcher apps & standalone module apps
Some developers ship modular content in the form of a ‘launcher’ app and a set of content modules each in their own APK, using deep-links to navigate between the library app and the modules.
If you deploy modular content in this way, you can treat each APK as a separate Private App, and use one of the Private App deployment methods described above to deploy to managed devices. When using this approach, any code updates affecting content modules will need to be deployed as app updates to the individual content module APKs.
Note: Apps are not permitted to initiate an install or download of other APK files on managed devices. This would need to be done by one of the deployment options described elsewhere in this guide.
Library apps and asset bundles
As an alternative to building and maintaining standalone APKs for each content module, developers can build a single ‘library’ app, and provide content modules as separate asset bundles.
With this approach, content modules can be kept outside of the main app’s APK, optimizing file size and install time.
Note: Asset bundles for content modules will need to be hosted by the developer at public-accessible URLs.