# App Functionality Review Guidelines

# I. Packaging Requirements

  1. The application must be compatible with VR devices.
  2. The application must be signed. All subsequent versions of your app must also be signed with the same certificate and name.
  3. You app must not require Android features that aren’t supported on QIYU devices. Such as Google Mobile Services, camera access, HMD touchpad, and more.
  4. You must use a supported SDK and Unity Engine version, browse more details in QIYU Device Developer SDK & Document (opens new window).
  5. APK files must be less than 3.5 GB in size, but can be accompanied by multiple (up to 5) expansion files up to 3.5 GB each.
  6. All QIYU applications must be released version and submitted as C++ 64-bit binary files.

# II. Audio Requirements

Apps should support 3D audio spatialization. (Recommended)

Additional Details

For more information, see QIYU Device Developer SDK & Document-Audio (opens new window).

Steps to Test

Locate a sound source within the app and rotate your head.

Expected Result

Sound should switch appropriately between speakers.

# III. Performance Requirements

1.The app must use a refresh at least 72 Hz on QIYU devices.

Additional Details

For more information, see QIYU Device Developer SDK & Document (opens new window).

The SDK Sample provides FPS.cs for calculating FPS.

Expected Result

The application should not experience extended periods of framerate below the requested refresh rate of the display. Exceptions include when there’s a black screen or loading scenes.

2.The app must run for 45 minutes with typical usage without entering thermal throttling Power Save mode.

Steps to Test

  1. Run the script. Please Click here (opens new window) to Download the script.
adb push freq_temp.sh /sdcard/
adb shell
cd sdcard
chmod 775 freq_temp.sh
nohup sh freq_temp.sh > data.csv &
  1. Use the app for length of the content or 45 minutes, whichever is shorter.
  2. Get output data.csv from sdcard, can check each CPU/GPU frequence and thermal.

Expected Result

Device's performance will not be degraded because of thermal issues caused by running application.

3.The app must either display a slow head tracked graphics in the headset within 4 seconds of launch or provide a loading indicator in VR.

Steps to Test

  1. Launch the title.
  2. Count the number of seconds it takes to display something and respond to head tracking.

Expected Result

App begins accepting input, responds to head tracking, and displays graphics within 4 seconds of app startup.

# IV. Functional Requirements

1. The app must install and run without crashes, freezes, or extended unresponsive states.

Steps to Test

  1. Launch the title.
  2. Play through content for at least 45 minutes, or the length of the content if less than 45 minutes.

Expected Result

  • App installs and runs without crashing or freezing.
  • App installs and runs without being disrupted by screen recording, screenshot, and screen projection.

2. Single player apps must pause when the user removes the headset or opens the Flexible Dock.

Additional Details

In Unity, you should see OnApplicationPause(true) called both when the HMD sleeps after dismount, as well as when the display is turned off from the power button.

This will be matched by a corresponding OnApplicationPause(false) when the headset is remounted, or the power button is hit again to turn on the display.

Things that cause OnApplicationPause(true) to occur:

  • Pressing Home button (system UI)
  • Pressing Power button to turn off display
  • Dismounting headset and display is turned off
  • Moving outside of Guardian boundary

Steps to Test

  1. Launch the app.
  2. Take off the HMD.

Expected Result

Things that cause the occurring of application pause:

  • Pressing Home button (system UI)
  • Pressing Power button to turn off display
  • Dismounting headset and display is turned off for 10 seconds
  • Moving outside of Guardian boundary

3. The app must not leave the user stuck at any point in the experience.

Additional Details

For example, if your app requires a login, you must provide instructions for the user to successfully create an account. These instructions must be discoverable in VR, but account creation could happen in 2D.

Game levels must not have broken logic that prevents progressing to the next level.

Steps to Test

  1. Launch the title.
  2. Progress through content for at least 45 minutes.

Expected Result

User must be able to experience all content without being unable to progress or requiring unobtainable information.

4.Volume can be adjusted properly by using the headset volume keys,the in-app volume and sound settings.

Steps to Test

  1. Launch the title.
  2. Adjust volume by using the headset volume keys, the in-app volume and sound settings.

Expected Result

Volume can be adjusted.

5.The application must respond to the HMD’s positional tracking as well as orientation.

Steps to Test

  1. Launch the title.
  2. Lean forward and side-to-side within the app.

Expected Result

Your view should look as if you are moving within the VR world.

6. Only QIYU hardware information should be displayed if the app or store assets involves information about headsets, controllers or related devices.

Steps to Test

  1. Launch the title.
  2. Progress through content for at least 45 minutes.

Expected Result

App should only reference QIYU HMDs and controllers.

The customized controllers should not be similar to that of other brands.

7.The app must not lose the user’s data. Such as saves/settings/downloads/content. If there is a leaderboard, leaderboard records must be saved.

Steps to Test

  1. Launch the title.
  2. Progress through part of the content and save the progress.
  3. Quit and restart the app.
  4. Install a higher version of the app.
  5. Uninstall and reinstall the app.

Expected Result

All user saves/settings/downloads/content created within the app persist throughout use of the application.

Leaderboard records must be saved properly, and won't be lost under any operation.

8.If your app requires Internet connectivity for its core functionality, notify users without an active Internet connection that one is required.

Additional Details

In Unity, you can use the Application.internetReachability property to test for an active Internet connection.

Other engines may require you to test the connection by attempting to reach a server.

Steps to Test

  1. Disconnect device from the network.
  2. Launch the app.

Expected Result

If app requires a connection to the Internet, an error message is displayed.

9.Network functions such as online gameplay or leaderboard is functional in Chinese network environment. ( For games released in Mainland China, the game servers should be set in Mainland China as well. And the data of Mainland China users can not be connected or exchanged with that of overseas users.)

Steps to Test

  1. Launch the title in Chinese network environment,
  2. Enable relevant network functions such as online or leaderboard.

Expected Result

Multiplayer is available in online gameplay.

Each matchmaking time should be proper in online multiplayer session. Automatic cancel or specific notes for players should be given when waiting takes time.

Users are able to create/close/join multiplayer rooms.

10.The voice chat is functional.

Steps to Test

Launch the title and enable voice chat functions;

Expected Result

Voice chat is available.

Voice chat can be turned on/off through in-app settings (if supported).

11.Users must not get disconnected from a multiplayer match if they press the Home button or remove their HMD.

Steps to Test

  1. Launch the title and start a multiplayer session.
  2. Remove the HMD or press the Home button to open the dock.

Expected Result

User stays connected for at least 1 minute.

12.The app must continue to download content if the user removes the headset.

Additional Details

When a user removes their headset, the foreground app is paused, which means any downloads running in the app are also paused. In order for downloads to continue when a user removes their HMD, they must be done in the background. To meet this requirement, you can use Android DownloadManager (opens new window), or other similar utilities, to download in the background.

Steps to Test

  1. Launch app and start a download.
  2. Remove the headset.

Expected Result

The download in application should not be shut down.

13.The user must be able to reset their forward orientation.

Steps to Test

  1. Launch the app.
  2. Observe the forward facing direction.
  3. Turn your body 180 degrees.
  4. Long press the QIYU Home button.

Expected Result

Forward orientation is reset.

14.Headlocked menus and UI elements are generally uncomfortable for the user and should be avoided. (Recommended)

Steps to Test

  1. Play through several levels of the application.
  2. Observe any elements that stay in front of your face no matter which way you look.

Expected Result

Nothing should be headlocked.

15.The app must use the QIYU provided payment channel to handle all the payment processing for the Apps hosted on the QIYU Platform.

Steps to Test

Launch app and check if there are payment channels.

Expected Result

There should be no payment channels that are not provided by the QIYU platform. ( Including payment portals, payment links, in-app purchases or in-app advertising.)

16.If the app involves additional purchased content, users should be able to pay and unlock the purchased content normally on the QIYU platform.

Testing steps

Launch app and purchase additional content.

Expected results

Users should be able to pay and use the purchased content normally on the QIYU platform.

17.If the app supports MRC, the phone screen should be consistent with in-app during MRC recording.

Testing steps

  1. Launch the mixed reality recording application in headset.
  2. Connect the headset to the QIYU app on phone and launch the app for MRC recording.

Expected results

Users can use the MRC function normally and the phone screen is consistent with in-app during MRC recording.

18.The versions of content amount/functionalities/gameplay, etc. offered in the apps should not be lower than the performance of other platforms in general circumstances.

# V. Security Requirements

The app must request the minimum number of permissions required to function and must not request permissions that are not supported by the QIYU headset. For the permissions that QIYU supports applying for storage space, location information, microphone.

Additional Details

The review team will be paying especially close attention to the list of permissions that Google considers dangerous, which includes camera, location, microphone, reading and writing external storage, and others.

For more information about permissions, see https://developer.android.com/guide/topics/permissions/overview.html (opens new window).

Steps to Test

  1. Look at permissions requested in the android manifest. From a command line, you can also run $ aapt dump badging and search the output for uses-permission.
  2. Verify that all permissions are utilized by the application.

Expected Result

There must be a rationale behind every permission your app requests in the app manifest.

# VI. Tracking Requirements

1.When configuring the submission metadata for your app, it must meet the requirements for either sitting, standing, or roomscale play modes.

Steps to Test

  1. Launch the title.
  2. Play through several levels.

Expected Result

Sitting: no action requires you to stand or reach down to the ground.

Standing: You are able to interact with all gelements while standing, turning around, or reaching within a 2 x 2 (m²) play area.

Roomscale: The app must be completely usable within a 2 x 2 (m²) play area.

2.In the in-site mode, users can run and interact with the app normally within the play zone.In custom mode, users can run and interact with the app normally within the play zone.

Steps to Test

Launch the title, set the minimum play zone and activate it.

Expected Result

When the play zone is activated, users should be given a clear indication after stepping out of the play zone.

Users can run and interact with the app normally within the play zone.

3.If users move out of the play zone, the app could run as normal when returning or resetting the zone.

Steps to Test

  1. Launch the title, set a play zone.
  2. Move out of the play zone and move back into it.
  3. Move out of the play zone and set a new one.

Expected Result

The app could still run normally when users move back into the play zone.

The app could still run normally after users set a new play zone.

4. Notice should be given when the play zone is closed.

Steps to Test

Close the play zone and launch the title;

Expected Result

A clear and prominent security indication needs to be provided if the play zone is detected to be closed.

# VII. Input Requirements

1.In-app menus should be activated with the menu button on the left QIYU controller. (Recommended)

Steps to Test

  1. Launch the title.
  2. Click the menu button.

Expected Result

App should open an in-app menu, if applicable.

2.When picking up objects within the app, use the controller’s grip button rather than the trigger button. (Recommended)

Steps to Test

  1. Launch the title.
  2. Pick up an object.

Expected Result

You use the grip button to pick up objects.

3.In-application hands and controllers should line up with the user’s real-world counterparts in position and orientation as closely as possible.

Steps to Test

While using your app, hold your hands in front of your face and raise your headset slightly so you can compare your real-world hands and your virtual hands. Repeat this process with your hands at different angles and positions in order to observe and correct any disparities.

Expected Result

In-application hands should match your real-world hands.

4. Screen capture (fast screen capture) or screen recording (fast screen recording) is available without blocking the app process.

Steps to Test

  1. Launch the title.
  2. Take a screenshot by pressing the home button and the right trigger button at the same time;

Expected Result

Screen capture (fast screen capture) or screen recording (fast screen recording) is available without blocking the app process.

The process will not call up the in-app menu, causing the application screen to be obscured.

# VIII. Accessibility Requirements

  1. Application should provide versions with Chinese localization texts integrated, and the default language must match the system language.
  2. Application should be playable in its entirety without the use of audio, or provide subtitle options for in-application dialogue and/or sound effects to communicate progress to the user. (Recommended)
  3. Text and in-app controls and elements necessary for app progression should be clearly legible. When possible, provide options for increased contrast and/or larger user interface (UI) elements. (Recommended)
  4. When possible, the application should provide clarity and direction to the user through a combination of visual, audio, and/or haptic feedback instead of relying on one form of feedback. Relevant guidance for complex functions is required. (Recommended)
  5. Applications should provide an option to be played with one hand and/or controller. Ideally, the user can configure their controller options. (Recommended)
  6. Applications should enable people to edit their display settings such as brightness and contrast to accommodate their visual needs. (Recommended)
  7. Applications should either provide color blindness options, or use other techniques such as combining color and pattern for easy visual distinction. (Recommended)
  8. Applications should provide the user with the option to rotate their view without physically moving their head/neck. (Recommended)
  9. Applications should support multiple locomotion styles when possible. This includes, but is not limited to, teleportation, free locomotion, and snap turning. (Recommended)
  10. Applications that can be used in sitting or standing mode should provide a setting to enable users to perform all interactions and access information from a fixed position. (Recommended)