Oculus Rift, the headset that re-ignited the virtual reality hype. While more and more Rift games, apps, and experiences are being released every day, their documentation is not always as clear as you might like it to be when it comes to figuring out how to publish your own app to the public, especially since Gear VR and Oculus Rift guidelines are often mixed together in the documentation. Very confusing. The review process for Oculus Rift apps is also extremely long and strict, so it pays off to put some extra effort in beforehand.
Therefore, this tutorial will try to lift the smokescreen and guide you through the steps required to publish an Oculus Rift app to the Oculus Store.
As I said before, the Oculus review process is very strict, so you have to make sure your app is following their guidelines exactly. Here is a checklist of the most fundamental demands Oculus puts on your app:
- Use the latest Oculus SDK
- Run at around 90 Hz on a system with recommended specifications (except on startup or loading screens)
- Be able to Start, Pause, and Quit from Oculus Home and desktop client
- Your own app-controls should not interfere with reserved actions like the Home button, volume control, recenter, back button, and the Universal Menu
- Your app should have entitlement checking enabled. This is done automatically if you build your app in Unity or through Headjack, but you do have to fill in an Oculus App ID, which you can get by going to your Oculus Dashboard > My Apps > Overview > Platform > App ID
- App audio should play through the Oculus headphones
- App should install/uninstall cleanly from your system, or should launch without having to install at all, like apps created with Headjack
- Your app should launch fairly quickly, and should always remain responsive to head-tracking, even when starting up
- When selecting Exit to Home in the Universal Menu, the app should exit within a few seconds
- When selecting Recenter App from the Universal Menu, the app should recenter correctly
- When inside the Universal Menu:
- No new frames should be rendered by the app, it should freeze on the last frame
- The app should play no music or sounds
- The app should no longer react to user input
- The Universal Menu should render and react smoothly
- When the app exits, either through the Universal Menu, by closing the desktop window, or by pressing Alt+F4, an exit code 0 must be returned and no errors should appear in the log
- The orientation of the app should adjust correctly to a seated versus a standing user
- Your app should not crash at any point (oh, really?!)
- Your app should not include pornography, excessively violent or sexual content, hate, bullying, harassment or gambling with real money
- If you want to enable in-app purchases, these have to run through the Oculus SDK, so no third-party commerce functionality is allowed
- And finally, make sure you have enough content in your app, because if you have one 360º video Oculus will tell you to just upload it to Facebook 360 so it can be viewed in Oculus Video
The best and easiest way to check if your app meets all technical store requirements is to run the oculusVRCvalidator.
Now that you’ve made sure your app does not violate any of the requirements laid down by Oculus, it is time to create a crap-ton of screenshots and artwork used to spice up your listing in the Oculus Store. Prepare to put some time into this, since you’ll first have to make your way through a 41-page long artwork guideline document created by Oculus. Page 6 and 7 show you an overview of which assets are required. Here a quick summary:
|Name||Width (px)||Height (px)||Type|
|Logo||Max. 9000||1440||PNG 24/32 bit, with transparency|
|Icon Art||512||512||PNG 24/32 bit, no transparency, square corners|
|Store Cover Art – Landscape||2560||1440||PNG 24/32 bit, no transparency, square corners|
|Store Cover Art – Square||1440||1440||PNG 24/32 bit, no transparency, square corners|
|Store Cover Art – Portrait||1008||1440||PNG 24/32 bit, no transparency, square corners|
|Store Cover Art – VR Landscape||1080||360||PNG 24/32 bit, no transparency, square corners|
|Hero Image||3000||900||PNG 24/32 bit, no transparency, 700px on each side for “bleed area”|
|5x Screenshot||2560||1440||PNG 24/32 bit, no transparency, square corners|
If you’re still in the mood after creating all these store assets, you can optionally add a 1080p MP4 Preview Video together with an optional 2560×1440 Video Cover image to your store listing.
You got your app and artwork covered, so now click here to create an Oculus Account if you don’t already have one. Now go to the Oculus Dashboard page, login, and click Create New App to start your app submission process. Select Rift as the platform, fill in your app name, and then press Save and Continue.
Click the Build tab on the page you’re redirected to. If you created your Oculus Rift app with Headjack, you’ll end up with an file and an appname_v1.0_b1_Data folder. Since you can only upload one file to the Oculus store, you’ll have to zip the .exe and the folder together using WinZip or WinRAR.
You would have never guessed, but to upload your zipped app build to the store, you need to click the big Upload Build button. You can then drag ‘n drop your .zip file onto the page. You’re now asked to fill in all kinds of technical information regarding your app. For apps created with Headjack, all you have to do is fill in the Version number, which is visible in the name of the .exe file, and the Launch File, which is simply the full name of your .exe file, e.g. appname_v1.0_b1.exe. When done, press Upload to start the upload process.
Once your upload has processed successfully, navigate to the Submission Info tab, click the Edit button, and fill out all the details like app category, comfort rating, and genre. For Recommended Processor, Memory, and Graphics card I usually fill in the recommended Oculus specs, respectively:
- Intel i5-6400 equivalent or greater
- 8GB+ RAM
- NVIDIA GTX 970 / AMD 290 equivalent or greater
Press Save and Continue to move on to the About sub-section. Here you fill in, amongst other things, your website, email address, app name, and app descriptions. Again, press Save and Continue. You’ve now arrived on the Assets sub-section, where you can upload all the artwork you created earlier. And once more, press Save and Continue. Select whether your app is a paid or free. Press Save and Continue for the last time.
If you filled in everything correctly during the previous steps, you will now see a list of green checkmarks. If you see a red exclamation mark instead, click the Fix button behind it to resolve the issue. Once everything looks good, the Submit For Review button will become active. Press it to submit your Oculus Rift app for review.
Congratulations on submitting your app! You’re probably very excited to see your app live in the Oculus Store as soon as possible. Unfortunately, the guys at Oculus do not seem to be in a rush. It usually takes between 3 to 4 weeks (!!) before they provide feedback on your app submission. Oculus has a support ticket system, but the response time there is also abominable. And even if you get feedback from them, it usually is nothing more than a single line of text saying something is wrong, without offering any advice on how to resolve it.
If and when they finally approve the app build you submitted, there is still a process you have to go through before it will actually go live. From the Oculus documentation:
“If you’re a fit for the Store, we will get in touch with you by email or phone (or vidchat, or VR hangout, or basically whatever you fancy) to coordinate closely on finalizing your app, discussing a release plan, getting an agreement in place, and lots of other things.
Once our ducks are both in a collective row, our team will look forward to launching your app.”
All in all, an extremely slow process, with little to no feedback, and so little room to iterate and improve your app. We would love to see Oculus hiring a boatload of new people to speed up the app review process. Until that time though, we’re gonna need a lot of patience. At the very least, I hope this tutorial has saved you some frustration and precious time.
Feel free to leave a comment if you still have questions!