Daydream App Quality Requirements - Functionality

FN-S1: App uses a supported version of the Google VR SDK

You must use a supported version of the Google VR SDK for your application. Currently, this is version 1.10.0 or newer.

FN-S2: App uses Daydream API calls to transition between activities

For Daydream applications, transitions between activities are handled in a special way to ensure that head tracking is maintained throughout the transition. In general, VR activities are expected to avoid directly sending intents to begin subsequent activities, and instead should use the SDK methods provided in DaydreamApi to initiate transitions.

For example, to return to Daydream Home, call:

To launch another VR application, call:

or use one of the alternative methods for formatting and sending intents.

These methods display a smooth transition while maintaining head tracking and preserving head tracking state across activities, and should always be used for any activity transition from a VR activity. If you are launching a VR activity from a 2D UI, you must also use these methods.

FN-M1: App manifest does not request the NFC permission

NFC is used by the Daydream platform for viewer pairing, and cannot be used by applications.

FN-M2: App manifest sets correct VR activity styles

VR activities must:

  • Suppress Android’s default WindowManager transition animations.
  • Hide all system UI elements, including the action bar, navigation buttons, and keyboard.
  • Run in landscape orientation, and disallow orientation changes.
  • Disable multiwindow support.

The Google VR SDK includes the following theme, which disables WindowManager transition animations, the action bar, and title bar.

android:theme="@style/VrActivityTheme"

Additionally, activities that expect to be launched solely from the Daydream Home (most applications) or another VR activity should also include the following attribute to enable faster transitions:

android:enableVrMode="@string/gvr_vr_mode_component"

Here is an example manifest for a VR activity that has been formatted to meet the style requirements:

<application>
    <activity android:name="<Your Activity Name Here>"
          android:screenOrientation="landscape"
           android:configChanges="orientation|keyboardHidden|screenSize"
           android:enableVrMode="@string/gvr_vr_mode_component"
           android:resizeableActivity="false"
           android:theme="@style/VrActivityTheme">
     </activity>
</application>

App manifest sets an intent type of ACTION_MAIN with category CATEGORY_DAYDREAM. For example:

<activity
    ... >
    ...
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="com.google.intent.category.DAYDREAM"/>
    </intent-filter>
</activity>

For Daydream activities that should not show up in VR Home (for instance because it is an internal activity and not a launch target), use android.intent.action.VIEW instead.

FN-M3: App manifest sets hardware features according to the platform(s) supported

Daydream apps use the following Android features:

  • android:glEsVersion="0x00020000"
  • android.hardware.sensor.gyroscope
  • android.hardware.sensor.accelerometer
  • android.hardware.vr.high_performance
  • android.software.vr.mode

Full Daydream apps must have all these features set to required. For apps that have a Cardboard mode or where VR use is optional, certain features can be set to not required.

Feature requirements

This table shows the appropriate value for the android:required attribute.

Feature Daydream Only Hybrid Daydream/Cardboard VR Optional
android:glEsVersion="0x00020000" true true false
android.hardware.sensor.gyroscope true true false
android.hardware.sensor.accelerometer true true false
android.hardware.vr.high_performance true false false
android.software.vr.mode true false false

Examples

Application only supports Daydream:

<uses-feature android:glEsVersion="0x00020000" android:required="true" />
<uses-feature android:name="android.hardware.sensor.accelerometer" android:required="true" />
<uses-feature android:name="android.hardware.sensor.gyroscope" android:required="true" />
<uses-feature android:name="android.hardware.vr.high_performance" android:required="true" />
<uses-feature android:name="android.software.vr.mode" android:required="true" />

Application supports both Daydream and Cardboard devices:

<uses-feature android:glEsVersion="0x00020000" android:required="true" />
<uses-feature android:name="android.hardware.sensor.accelerometer" android:required="true" />
<uses-feature android:name="android.hardware.sensor.gyroscope" android:required="true" />
<uses-feature android:name="android.hardware.vr.high_performance" android:required="false" />
<uses-feature android:name="android.software.vr.mode" android:required="false" />

Application's VR mode is optional:

<uses-feature android:glEsVersion="0x00020000" android:required="false" />
<uses-feature android:name="android.hardware.sensor.accelerometer" android:required="false" />
<uses-feature android:name="android.hardware.sensor.gyroscope" android:required="false" />
<uses-feature android:name="android.hardware.vr.high_performance" android:required="false" />
<uses-feature android:name="android.software.vr.mode" android:required="false" />

FN-U1: App hides the status bar and navigation bar while in VR

Your app must not display Android’s system bars when the user is in VR.

For information about how to suppress the system status bar, see Hide the Status Bar on Android 4.1 and Higher.

For information about how to suppress the system navigation bar, see Hiding the Navigation Bar.

FN-A1: App pauses when the user exits VR

Pressing either the Home button on the controller or the Home button on the phone's system bar (accessable if the user removes their phone from the viewer) immediately pauses the application, including any audio that was playing. User and app state should be handled in a reasonable way.

Although not a requirement, we strongly recommend that your app preserves user or app state when leaving the foreground and prevents accidental data loss due to back-navigation and other state changes. When returning to the foreground, the app can restore the preserved state and any significant stateful transaction that was pending, such as changes to editable fields, game progress, menus, videos, and other sections of the app or game. For example:

  • When the app is resumed from the Recents app switcher, the app returns the user to the exact state in which it was last used.
  • When the app is resumed after the device wakes from sleep (locked) state, the app returns the user to the exact state in which it was last used.
  • When the app is relaunched from Home or All Apps, the app restores the app state as closely as possible to the previous state.

FN-A2: App closes from VR correctly

Pressing the Close close button or the Back button in the system bar (accessible if the user removes their phone from the viewer) should immediately pause the application, including any audio that was playing. User and app state should be handled in a reasonable way. The user should be taken to the 2D phone launcher.

If you are creating a hybrid application, and the user launched into VR from the hybrid application, then (and only then) the Close close button or back button can optionally return the user to the 2D version of your application where they launched into VR.