How To Publish Your VR App On Oculus App Lab And Monetize
Written by SideQuest, SkarredGhost & XR Bootcamp
Step-by-Step guide for your App Lab Submission
If you follow the news, you may have heard of App Lab, released by Oculus just a few weeks ago. We have received a lot of questions from our advanced master class and Bootcamp developers, our industry partners, and game developers on the XR Creators Discord server who would like to publish their app/game in App Lab. We thought releasing a guideline could be the best solution to answer the most common concerns of the VR community in one single place.
In this detailed Step-by-Step guide, you will see how easy it is to make use of App Lab and publish your app to this special release channel. We also collected a (long) list of open questions and answers in our FAQ section about everything regarding App Lab, from its connection to SideQuest to best strategies about Monetization and Promotion of applications, not to mention how to get your app to a larger audience through platforms like SideQuest and App Lab DB.
Special thanks to the contributors who have been working with us throughout the creation of this guide (Ayhan Sakarya from XR Bootcamp, Antony Vitillo from SkarredGhost and Orla Harris from SideQuest) This guide will continue to evolve and we will add updated info as well as answers to recently submitted questions.
Alright, without further due, let’s start!
Step 1 – App Creation
First of all you have to create the record for your application in your Oculus Dashboard:
In the following popup enter your App name and choose “Quest (App Lab)”
Here I will quickly list the needed sub-steps you need to do in order to upload and submit your app in step 3. Because Unity and Unreal have different things you need to take care of I will create one for each of them. Here we go!
The APK may be up to 1 GB in size. Quest APKs smaller than 400 MB can be uploaded with the web interface, otherwise use the Oculus Platform command-line tool or the integrations for the Platform tool in Unity or Unreal Engine.
The APK must have an application manifest fit for a release build.
The APK must be signed with an Android certificate
Enable focus awareness, because “Starting with the v19 SDK release, if an app does not support focus awareness, Oculus will flag it with a warning at the time of submission to Oculus Store. We highly recommend that you enable the focus awareness feature early in your development process to test how your app handles the loss of input and let the system UI appear as an overlay
“All Quest applications must be submitted as 64-bit binaries. This is a requirement as of December 19, 2019. Applications submitted before this date as 32-bit binaries will be allowed to continue to update as 32-bit, though we recommend switching to 64-bit.”
For Unity (Windows & MacOS):
Uncheck the developer build flag. The reason is that Oculus will reject your build if it finds “android:debuggable=”true” in your AndroidManifest.xml. And this is usually set if you are creating development builds. So just uncheck it and you are good to go
Create a Store-compatible AndroidManifest.xml file. Head over to Oculus > Tools > Create Store Compatible Manifest File in Unity
Enable focus awareness. Select the OVRCameraRig prefab to open settings in the Inspector window. Under OVR Manager (script), in the Quest Features section, select the Focus Aware check box. When you enable focus awareness, Oculus automatically sets the com.oculus.vr.focusaware value to true in the Android manifest file.
4. Sign your app. Just head over to “Edit > Project Settings > Player > Publishing Settings (Scroll all the way down)” and click on the “Keystore Manager”.
Once in the keystore manager, inside the dropdown head to “Keystore > Create New > Anywhere … “ and choose where you want to create your keystore.
Fill in all the required fields (unity is telling you which field are needed once you have chosen a password for your keystore), hit the “Add Key” button on the lower right corner and you have a freshly generated Android Signing Key in the form of a .keystore file. If you are going to build your app again, now it will be signed using your keystore, and it can be approved by the submission process. Note that, when you restart Unity you will have to provide your password for the keystore, otherwise you can not build the app using this keystore. Here is a link to the Unity Documentation which explains the Keystore Manager fields in more detail: Unity Keystore Manager
Build your app to use 64 bit instead of 32 bit architecture. It is worth noting that Oculus will give you a hint and tell you that it would be better to create 64 bit builds instead of 32 bit builds. You can change this in “Project Settings > Player”, where you can select the target architecture that you want. ARMv7 is a 32-bit architecture and ARM64 is a 64-bit architecture. To enable building on ARM64, you first have to change the scripting backend from Mono to IL2CPP, which we would recommend anyway. After having done this, you have to re-build your app, and it is better if you test it again, since in some rare conditions the Scripting backend change may create some issues with external libraries. If this sounds too complicated to you, don’t worry, at the moment it is not strictly necessary, so you can skip this step for your first submission. It is recommended to learn how to do it, though, since soon it will be mandatory
Enable the OculusVR plugin. Select Edit > Plugins, choose the Virtual Reality section, and make sure that the OculusVR Plugin is enabled
Set up Android Development. This Quick Start guide of Oculus explains how you can set up your Android Development environment for Unreal. Just jump to the “Setup Unreal Engine for Android Development” section
Enable focus awareness. This is a bit more difficult on Unreal, but still there is a way. For Oculus OVRPlugin v13 or above: Navigate to Edit > Project Settings > Plugins > Oculus VR > Mobile, and check “Focus Aware”. Once you make this selection the following entry is added to the app’s Android manifest under the <activity> tag, when you package the app for Android: <meta-data android:name=”com.oculus.vr.focusaware” android:value=”true”/>. However, the OculusVR setting may not be visible on MacOS. If so, just use the following method to add it by hand. For versions older than Oculus OVRPlugin v13: Navigate to Edit > Project Settings > Platforms > Android > Advanced APK Packaging, and add the following to the “Extra Settings for <activity> section” textbox: “<meta-data android:name=”com.oculus.vr.focusaware” android:value=”true”/>” Please check the Unreal Version Compatibility Reference to find out which Unreal/OVR combination is possible
Build for production. Navigate to Edit > Project Settings > Project > Packaging > Project, and check “For Distribution”. This makes sure that the android:debuggable value in the AndroidManifest.xml is false. Your app must be a release version, not a debug version
Don’t remove oculus signature files. Navigate to Edit > Project Settings > Platforms > Android > Advanced APK Packaging, and verify that “Remove Oculus Signature Files from Distribution APK” is not checked
Navigate to Edit > Project Settings > Platforms > Android > APK Packaging, and change the “Install Location” to Auto
Scroll down to Android > Build and check “Support arm64” and uncheck “Support armv7”. Oculus does not accept 32-bit builds anymore.
Note: Unfortunately, the OculusVR plugin settings may not be visible on MacOS. So, even on v4.26 you may not be able to set the focus aware option through the plugin settings. Instead follow step 2 for unreal above for versions older than 4.26 to add the focus aware setting manually.
For Unreal (Windows only)
And again, like the Oculus Platform Tools for unity, this way if uploading your app to Oculus is only possible on windows. Head over to this guide to Upload Apps to Oculus from the Unreal Editor.
Special thanks to @JRissa_Fin and @jsivonen on Twitter for pointing out that some Unreal related details were missing, you are awesome!
Special thanks to @JRissa_Fin and @jsivonen on Twitter for pointing out that some Unreal related details were missing, you are awesome!
Step 2 – Upload your .apk
After the creation, you are going to be redirected to the Overview page of the newly created app. To start the submission process just click on one of all those links, they will all lead to the same upload procedure.
As you can see, there are quite a few steps to be performed for the submission but don’t worry, it is simpler than it looks!
The first step requires us to upload our .apk build. Click the button on the upper-left corner and then select the file from your hard drive.
Oculus now prompts you with another popup, telling you what to take care of in your build. If you are using Unity and if you have tested your build on an Oculus Quest device, most of these things should already be ok.
One thing which you may have forgotten to perform is the “Application Signing”. Again, if you are using the unity engine, this is a very easy thing to do. Just head over to “Edit→Project Settings → Player → Publishing Settings (Scroll all the way down)” and click on the “Keystore Manager”. Fill in all the required fields and you have a freshly generated Android Signing Key in the form of a .keystore file. If you are going to build your experience again, now it will be signed using your keystore, and it can be approved by the submission process. Here is a link to the Unity Documentation which explains the Keystore Manager fields in more detail: Unity Keystore Manager
Another thing that is really important is to uncheck the developer build flag when building in Unity. The reason is that Oculus will reject your build if it finds “android:debuggable=”true” in your AndroidManifest.xml. And this is usually set if you are creating development builds. So just uncheck it and you are good to go.
Another feature that is required is creating a Store-compatible Manifest file. To do that, you have just to head to Oculus→Tools→Create Store Compatible Manifest File in Unity and you’re good to go.
Uncheck development flag
Create Store-compatible Manifest file
Create Android Signing Key with the Keystore Manager
Upload your .apk
Notes: It is worth noting that Oculus will give you a hint and tell you that it would be better to create 64 bit builds instead of 32 bit builds. You can change this in “Project Settings → Player”, where you can select the target architecture that you want. ARMv7 is a 32-bit architecture and ARM64 is a 64-bit architecture. To enable building on ARM64, it may be that you first have to change the scripting backend from Mono to IL2CPP, which we would recommend anyway. After having done this, you have to re-build your app, and it is better if you test it again, since in some rare conditions the backend change may create some problems with some external libraries. If this sounds too complicated to you, don’t worry, at the moment it is not strictly necessary, so you can skip this step for your first submission. It is recommended to learn how to do it, though, since soon it will be mandatory.
Step 3 – Complete details for submission
So once your .apk upload is finished you can start filling in all the other fields. Each step is pretty self-explanatory and Oculus does a good job in explaining them. One thing I noticed though is, under the “Specs” step, I could not enter “Hand tracking Only” as supported controllers and had to add Oculus Touch as well in order to Save & Continue to the next step. For the sake of completeness I will list each step with a short description:
App Name – I bet you know this one
Short Description – A short description of your app, which will be shown in the store listing
Long Description – This will be shown throughout the platform, including the store.
Game Mode – Is it a Single Player, Multiplayer or Coop game?
Supported Controllers – Which controllers do you support? Choose between Oculus Touch, Gamepad, Touch (as Gamepad), and Hand tracking. Though as mentioned above, “Hand tracking only” currently doesn’t seem to work
Comfort Level – In an App Lab submission you can’t change this
Internet Connection – Is an Internet Connection required in your app? Choose what applies to you
External Subscription – Does your app require the user to purchase an external subscription? Then you need to set the appropriate flag
Category – Choose one of the categories “Apps”, “Entertainment”, “Games” and “System”. There is another one called “Early Access” but it is greyed out in the App Lab submission process and can not be chosen
Genres – Select the genre which suits your app the most
Developer – Well, tell the world your dev name!
Publisher – If you have a publisher add its name here
Website – Website of your app
External Support Link (Optional) – This field is optional. In case you have a link to an external support page you can provide it here for your users. The link will be shown on the review creation window for your users in the Oculus Store
Terms of Service (Optional) – This field is optional. This describes the agreement between you and the user of your app
Logo (Transparent) – “The logo allows your audience to quickly recognize your experience, this is your brand. It is most often used in-headset on the Store, Library, and your experience PDP.”
Icon – “The icon is primarily used when your app appears on the mobile feed. Be sure your icon art maintains legibility across various sizes. You may have to modify visual elements so that they remain clear as the image is scaled down.”
Cover Art – “Cover Assets come in three varieties (square, portrait, landscape) and are the most commonly viewed marketing content for your experience in the Store. They may be displayed in web browsers, mobile and pc clients, in headset, and other places at various sizes.”
Hero Cover – “The “Hero” image is the main asset on your product display page (PDP) in the Store. This image will also be used in the case that your experience is featured on the Spotlight unit of the Store.”
Screenshots (5 Images) – “Screenshots support your experience and help users make the decision to purchase your title. Each image should represent a unique scene highlighting the best part of the experience.”
Cubemap (optional) – “Cubemaps provide an immersive way for users to preview content inside of the Oculus VR Store.”
Trailer – “The video trailer is the supporting 2D video for your experience. Make sure you feature the best highlights of your experience that will make users want to download it.”
Content Rating – Here you can create the IARC certificate for your app. You will be guided through each step (it is really easy and short) and have to answer a few questions. If you already have an existing IARC certificate you can choose to use that one instead
Pricing (USD) – Initially your App Lab submission will be “Free”. Once the submission is approved for App Lab, price changes can be manually requested by sending an email to firstname.lastname@example.org
Well, and this is it. 25 steps to submit your app to the Oculus App Lab. Clicking on the “Submit” button will show you what is still missing to properly submit your app for approval:
Once everything is fixed, you can go ahead and submit your app to the store.
After you have performed the submission, the head of your Oculus Development Organization will receive an e-mail confirming that the submission was successful.
You are in the hands of Facebook now. Your application will go through a technical review, after which you will discover if it has been approved or rejected. The head of your organization will receive another e-mail when there is a response from Facebook’s technical team.
Compliments, you are ready to distribute your app now!
FAQ - App Lab
While each release channel (ALPHA, BETA, and RC) can have up to 100 users assigned to them, the App Lab approved app can be found by everyone through exact search(using the exact app name in the Oculus Store search, if this mean has been enabled) or by means of a direct URL. So, because of the lack of documentation, I would assume no, there is no user limit to App Lab approved apps.
Usually, Oculus gives you a few hints when rejecting your .apk directly after the upload. Step 2 of this article goes through each important point. Things that are easily forgotten while testing a lot are the development build flags, the Oculus Store Compatible manifest, and the Android application signing key.
Yes, the approval process is a lot simpler, but always necessary to upload an app.
App Lab supports both free and paid apps, which are shareable via a URL or Oculus Keys. You can change your price at any time. If you wish to run a sale you need to submit a ticket with no guaranteed time frame for approval.
Facebook does not list App Lab apps the same way it does for Oculus Store apps. You can find App Labs experiences directly with their app URL or with an “exact search”, how Facebook is calling it, which is nothing else than searching the app in the store with its exact name. Notice that “exact search” may have been disabled during your submission process, so if you can’t find your app, please check that you have not disabled this option.
You can access the majority of standard platform features including automatic update distribution, platform integration and SDKs, app analytics, developer posts, events, release channels, App Sharing, and more. Apps in App Lab do not have access to notifications, app install and optimizations or App Groupings. Support for Add-ons will be available in the future. As new platform features become available, Facebook will communicate which are available to apps in App Lab.
It is not clear yet, but Oculus advises submitting your application 4 or 5 weeks before your intended publishing date so that you can be quite sure to market your app on the promised delivery date. This makes us understand that 5 weeks is the upper limit for the review time.
The app must be approved any time that you publish an update, but the approval of updates should be much faster.
Yes, all the features offered by the Oculus SDK are enabled on App Lab. They are disabled on SideQuest applications, though.
You should receive a notification on the main email of your Oculus Developer Organization. If you are not the admin of the organization, you can anyway check from time to time the publishing status on the related page of your application on the Oculus Dashboard.
No, there are guidelines on allowed content that you have to follow. Most of the content is allowed, but gambling and adult content are not. If you want to publish an application of this kind, you still have to use SideQuest and sideloading. Note that Sidequest has a restriction on adult content also but platforms like Itch.io allow it.
No, there are guidelines on allowed technical features that you have to follow. For instance, cloud VR streaming is not allowed on App Lab. If you plan to use a service like NVIDIA CloudXR, you have to publish your application through SideQuest.
No. The purpose of App Lab is to avoid the complicacy of developer mode.
Yes, App Lab applications are published on the Oculus Store platform, so their users must be registered with a valid Facebook account.
No, an Oculus Developer account doesn’t need a mandatory Facebook account. But you must make sure to verify your account by providing your phone number or credit card number.
This is probable, but not guaranteed. John Carmack himself has clarified this point: Facebook will be constantly monitoring the statistics of the applications on App Lab and will consider promoting to the official store the ones that are the most successful, but this is not something that must be taken for granted. Facebook will evaluate other factors than the download numbers, like for instance the reliability of the developing team, the retention factor of the application, the profitability in the long term, etc…
Yes it is possible, please speak to the approvals team to organise a batch of keys to transfer users over. You will need to set this up on Itch.io so that if the user has purchased the app via Itch.io they can enter their email address on this page and receive a new email for the purchase with the new link: https://itch.io/docs/buying/already-bought If the user has not purchased the key via Itch.io, e.g. they are a competition winner, then you may need to offer a key via another method if you can validate they own the game
FAQ – SideQuest
The Oculus Store is the official app store for the Oculus Quest, and it has a very strict content curation. App Lab apps are hosted on the same Oculus infrastructure as Quest Store apps, allowing customers to purchase and run App Lab apps in the same way they do with Quest Store apps. The difference is that there is almost no curation for App Lab experiences, but their product detail pages are discoverable only by means of a direct URL or exact search. As this listing is difficult to discover, SideQuest is one of the avenues developers can use to provide direct links to App Lab content. Furthermore, SideQuest also offers applications that are available through sideloading.
Just recently SideQuest has released AppLab.games which is a mobile-friendly site that can be opened in the Oculus browser and enables the direct installation to the device.
When you visit the SideQuest page for a game that’s on App Lab, there is now an “Oculus App” button in the top right corner of the page as well as an “App Lab” label at the top corner of the asset library. Click the button and it takes you to the App Lab page.
Once your application is on App Lab, no one can find it: it is like a Youtube unlisted video: unless you know the link, you can’t access it. You must make your content discoverable if you want it to succeed. SideQuest partnered with Oculus to launch App Lab. With over 1 million+ monthly active users it is a good way to open up your creation for discovery and promotion. In addition to that, the Sidequest listing can also connect to your app on other platforms like Itch.io, Steam, etc.
FAQ – Monetization & Promotion
Whether the goal is to build a business, create a community, test, and experiment with new apps, or get feedback on new ideas, you control how your app is distributed. Apps from App Lab do not appear in the Oculus Store catalog. Apps are shareable via a URL or Oculus Keys, and discoverable by searching the exact app name and found in the “App Lab” section of results. However, you can partner with an external link aggregator, like SideQuest. SideQuest recently released an Open Source aggregator which can be easily embedded into any site and enables a single source of App Lab information for consistency. There are other aggregators such as App Lab DB that require independent submission of your app via your app’s URL.
You cannot collect payment for your app via any mechanism other than those explicitly approved by Oculus. Collecting payment by selling keys is an approved mechanism documented in the Oculus Distribution Options, and you can do so on platforms like SideQuest.
You can choose to have a more controlled release of your App Lab app by requesting Oculus Keys. Oculus Keys are unique 25 character alphanumeric codes that are generated by the system. These codes can be redeemed for a copy of your app and can be promoted and distributed as you see fit. You can also define the time interval inside which a key is valid. Note that for requests over 250 keys, you will need to click the bulk quantities inline link to go to the bulk request page. Bulk requests are reviewed by Oculus and granted at Oculus’s discretion. For more information on distribution, visit Oculus Distribution Options.
Yes, App Lab shares the same payments and advertising policy as the applications on the Oculus Store, and a revenue share is paid pursuant to Oculus Distribution Agreement. This means that Facebook will get a 30% cut over your earnings. Also, as noted above you can request bulk keys to sell on other platforms but this will be at the discretion of Oculus.