During the early days of consumer VR, the Samsung Gear VR has reigned supreme. It is affordable, does not require cables and a bulky PC, and works great for viewing 360º video experiences. Gear VR will probably remain an important headset, at least until Google’s Daydream platform reaches the masses.

Gear VR is a collaboration between Samsung and Oculus, so all Gear VR app submissions have to go through the same arduous process as an Oculus Rift app. This tutorial will show you how to publish a Gear VR app to the Oculus Store.

Preparing your app

Since Oculus is fairly strict with its app reviews and take up to 4 weeks to provide you with feedback on your submission, it is immensely important to make sure your app follows their guidelines to the dot, to improve your odds of getting your app approved the first time around. Therefore I recommend you make sure your app adheres to the following list of criteria Oculus imposes:

  1. Use the latest Oculus SDK
  2. Run at around 60 Hz on a Gear VR (except on startup or loading screens)
  3. Be able to Start, Pause, and Quit your app from Oculus Home
  4. Your app-controls should not interfere with reserved actions like the Home button, volume control, recenter, back button, and the Universal Menu
  5. 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
  6. Audio from your app should target the correct audio device
  7. App should install and uninstall cleanly from the device
  8. App should always be responsive to head-tracking and launch fairly quickly
  9. When selecting Exit to Home in the Universal Menu, the app should exit within a few seconds
  10. When selecting Recenter App from the Universal Menu, the app should recenter correctly
  11. 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
  12. When the app exits, either through the Universal Menu, an exit code 0 must be returned and no errors should appear in the log
  13. Something you would never expect, but your app is not allowed to crash at any point
  14. Your app should not include pornography, excessively violent or sexual content, hate, bullying, harassment or gambling with real money
  15. If you want to enable in-app purchases, these have to run through the Oculus Mobile SDK, so no third-party commerce functionality is allowed
  16. If your app collects user-data, should be clearly communicated to the user, including a privacy policy document
  17. Make sure the version number of your app is correctly incremented
  18. You have to fill in an Oculus App ID for entitlement checking, which you can get by going to your Oculus Dashboard > My Apps > Overview > Platform > App ID
  19. 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

AndroidManifest.xml

The above mentioned list covers some basic criteria, but when you wish to publish a Gear VR app in the Oculus Store, your AndroidManifest.xml file also has to adhere to certain rules. Therefore I recommend you click here to check the manifest requirements in detail.

Some things to pay extra attention to:

  • Change android.intent.category.LAUNCHER to android.intent.category.INFO*
  • If present, remove the android:noHistory attribute from the <activity> tag
  • If not present, add android:excludeFromRecents=”true” to the <activity> tag
  • Set android:minSdkVersion and android:targetSdkVersion to 19

* This setting makes your app launchable only from the Oculus Store, and no app icon will be displayed on your device with this setting on INFO. So while developing, it’s probably best to keep this setting on LAUNCHER.

Click here for an example of a working AndroidManifest.xml file

If you created your app with Headjack, we automatically generate a correct AndroidManifest file for you, so you don’t have to worry about it.

Code Signing

If you have developed your app in Unity, you can simply go to File > Build Settings, switch platform to Android, and then click Build to export your app as an APK file. Click here to learn how to install and run your APK on a Gear VR outside of the Oculus Store. However, to create an app which can be published in the Oculus Store, you will need to first code sign your APK. And to code sign your APK, you need to create a so-called keystore, which the store uses to identify your particular app.

To create a keystore file follow our new tutorial if you don’t have Unity, or the steps below if you do have Unity:

  1. Go to the Publishing Settings tab found under the Android Player Settings in Unity.
  2. Select Create New Keystore and then click the Browse Keystore button.
  3. Give your keystore a name and click on Save.
  4. Now fill in a password for your keystore in the Keystore password and Confirm password fields.
  5. In the dropdown menu behind Alias, select Create a new key and fill in the necessary info in the window that opens, after which you can click Create key.
  6. Now select your newly created key in the dropdown behind Alias and fill in your keystore password in the Password field.

If you now build your APK it will be signed and ready for submission to the Oculus Store! It is very important that you make a backup of your keystore file and its password, because without it you will not be able to submit an update of your app ever again.

If you have uploaded all the assets of your Google Cardboard app to Headjack, then you select Gear VR as Platform, Store as Distribution Channel, and then select or add your keystore file and fill in the passwords before clicking Build Application. You will then receive a signed APK which is ready to be submitted to the store! You can generate a keystore file using the above mentioned steps or using Android Studio and then upload it on the Settings > App Signing page under your Headjack account.

Submission Validator

Of course you were very meticulous in following all of the above mentioned steps, but it is still highly recommended to use the Gear VR Submission Validator tool to double-check. This tool will check your APK and AndroidManifest and will give you error- and warning messages if something is wrong, in which case you will first have to fix these issues before you can submit your app. Very useful, but not super user-friendly unfortunately, so let me guide you through the process.

To get the tool to work:

  1. Download the Submission Validator for Windows or Mac
  2. If on Windows, download and install OpenSSL
  3. Download and install the Android NDK (for nm)
  4. Download and install the Android SDK tools or Android Studio (for aapt)

Since the Submission Validator works with the command line, it is important to figure out the paths to OpenSSL, nm, and aapt on your device, because you’ll need to input these in the command we’ll execute to run the Validator. The generic command is:

check_submission –aapt *path/to/aapt* –openssl *path/to/openssl* –nm *path/to/nm* *path/to/apk*

Example Windows command:

C:\Dev\Oculus\Mobile\check_submission.exe –aapt C:\Dev\Android\adt-bundle-windows-x86_64-20140702\sdk\build-tools\android-4.4W\aapt.exe –nm C:\Dev\Android\adt-bundle-windows-x86_64-20140702\sdk\build-tools\android-4.4W\nm.exe –openssl C:\Program Files\openssl\openssl.exe C:\Dev\Unity\MyProjects\GearVR-app\awesome-app.apk

Example OSX command:

~/Dev/Oculus/check_submission –aapt ~/Library/Android/sdk/build-tools/21.1.2/aapt –nm ~/Library/Android/sdk/build-tools/21.1.2/nm –openssl /usr/bin/openssl ~/Dev/Unity/MyProjects/GearVR-app/awesome-app.apk

Now that you have the command figured out, open cmd on Windows or terminal on OSX, copy/paste the command, and then press ENTER to run it. If you have followed all the above mentioned steps carefully, you should now be presented with the message:

APK Manifest file appears to be properly configured. Your APK is ready to be submitted for review.

If not, the tool has detected some errors which you’ll first need to fix before proceeding.

Store art

Once your app has successfully passed the Submission Validator, it is time to create a small mountain of screenshots and artwork used to spice up your listing in the Oculus Store. This will probably take you some time, since you’ll first have to fight 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 wish, you can optionally add a 1080p MP4 Preview Video together with an optional 2560×1440 Video Cover image to your store listing.

Oculus Account

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 Gear VR as the platform, fill in your app name, and then press Save and Continue.

Submit app to Store channel

Click the Build tab on the page you’re redirected to. If you created your Gear VR app with Headjack, you’ll end up with an appname_v1.0_b1.apk.

You would have never guessed, but to upload this app build to the store, you need to click the big Upload Build button. You can then drag ‘n drop your APK file onto the page to start the upload process. You’re now asked to fill in some info regarding your app. 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, input devices, and genre.

Press Save and Continue to move on to the About sub-section. In this section you fill in things like your website, email address, app name, and app descriptions. Again, press Save and Continue. You’re now in the Assets sub-section, where you can add all the artwork you created earlier. And once more, press Save and Continue. Select whether your app is a paid or free. Finally, press the Save and Continue button again to wrap things up.

You should now see a page with green checkmarks if you completed all the forms. If you see a red exclamation mark it means you forgot something, so click the Fix button to complete the step. If all the lights are green, the Submit For Review button will become active. Press it to submit your Gear VR app for review.

Waiting for approval

Sweet, you just officially submitted your app! Unfortunately, the Oculus Store review process takes between 3 to 4 weeks (!!) and their feedback when they reject an app is usually fairly meagre.

If and when your app finally gets approved, there is still a process you have to go through before it will be available in the Oculus Store. 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.

As the length of this tutorial already suggests, publishing a Gear VR app to the Oculus Store is a looooong process which requires a lot of patience and attention to detail on the part of the developer. I hope that this tutorial has at least helped you avoid some of the common pitfalls.

If you still have questions, let us know in the comments!