Quest V2 Signing

Built-in support for V2 signing for Oculus Quest apps has been making it into new Unity releases for 2019.2, 2019.3, and soon, 2018.4. It shows up as a checkbox in the Player Settings in the Oculus area.

We discovered one issue with this in that the change also requires the 1.38.2 version of the ‘Oculus Android’ package. Newly created projects that add Oculus support will automatically get this version of the Oculus Android package. However, existing projects that already had Oculus support set up will not automatically grab the latest version of the package.

If you have an existing project and want to use the Quest support, please go to Package Manager (Windows/Package Manager), scroll down to ‘Oculus Android’ and make sure that you’re using the 1.38.2 version of the package. Until you do this, built .apks may be missing some tracking functionality when run on Quest hardware.

We’ll look into making sure that future builds of Unity grab the correct version of the package for this change, but until then, doing a quick upgrade in Package Manager should work fine.

3 Likes

Hello
Thank you very much for your input. In this regard, I’d like to ask you. I’m trying to upload an app to the Oculus Store and I’m not accepted by the v2-schema signed app. It’s for Quest and I think that’s how the scheme has to be. Do you have any idea what might be going on?

@jj-unity Is it possible to toggle the check box through code? We’re building the same app for Go and Quest and I would like to do this in my scripted build pipeline

1 Like

You should be able to set it with:

https://docs.unity3d.com/ScriptReference/PlayerSettings.VROculus-v2Signing.html

As for the store issue, I would check with the Oculus developer docs, and also make sure you aren’t trying to upload a development build.

3 Likes

I’m on 2019.2.11f1 and If I enable v2 signing, the apk built is missing glEsVersion in the manifest and apk is rejected by oculus build manager.

I added the line in Plugins/Android/AndroidManifest.xml I can clearly see the line if I add a breakpoint on IPostGenerateGradleAndroidProject, but after it’s just stripped in some final merge.

If I disable v2 signing it works and the line is present again.

1 Like

That’s an interesting one. Thanks. I’ll look into it.

hey @jj-unity any luck on the gles missing from manifest issue yet?

Is Quest v2 signing required for test build on Oculus? Or just for Oculus Store upload?
Should I disable for testing my apps on Quest?

2 Likes

Okay I have problem sending APK to oculus store for tests. App is created for Quest, but on store we do not have this permission, so it is considered “mobile”. Okay, nothing unnormous here till now. And that’s when the fun part starts:
Trying to send APK through store to ALPHA channel → apk is more than 200 MB so I have to use command tool “ovr-platform-util”.
So I’m using - and this tool, after upload states:

“ERROR: The APK is intended only for the 6DoF device and cannot be used on the 3DoF mobile platform. You can set the android parameter: required = “false” in the android.hardware.vr.headtracking property if the APK should be shared by GearVR / Go and Oculus Quest. APKs for 3DoF platforms should have a V1 signature.”

I used custom manifest and followed all instructions, so changed those lines:

Getting now this error:

“ERROR: The APK file is signed using the unsupported Signature Scheme V2 standard. Disable signing using the Scheme V2 standard and resubmit (開發人員專用的 Android 7.0  |  Android Developers).”

The time this error appered I was using old XR plugin. I disabled there V2 Signing. Deleted APK and build new one (with bumped build number) - still same error.
Changed min. platform for 21 - still error,
Used custom gradle with “v2SigningEnabled false” - still this error,
Upgraded XR plugin to new XR, clicking “yes” for every question of removing old XR plugin files etc. - still this error,
Also disabled V2 Signing in new plugin - still same error.

Did I forgot to check some small hidden checkbox somewhere, because it obviously cannot be that simple like disabling V2 Signing in options of course :slight_smile: ?

Do you have any idea what is wrong here?

Did you ever figure out what was causing the error?

Tested with Unity 2019.4.3 :

In Project Settings / Publishing Settings, in section Build :
Check Custom Launcher Gradle Template
A file is created : Assets/plugins/Android/launcherTemplate.Gradle

Open this file with any text editor

Between nodes lintOptions {…} and buildTypes {…} insert :

signingConfigs {
       release {
           v1SigningEnabled true
           v2SigningEnabled false
       }
    }

Compile

Sideload the apk and check it runs on Quest and Go (it was ok for me)

This apk was then sucessfully uploaded to the Oculus Store (ie the message “ERROR: The APK file is signed using the unsupported Signature Scheme V2 standard. etc” is not displayed anymore)

This solution was inspired from :

2 Likes

Huge Thank you @BleuCobalt ! You saved my day and a lot of time.

My situation was, that I had to upgrade a long term VR project from Unity 2018 to 2019.4.11 → and with it to URP and Shader and Input System… this already was a task but at least everything is running fine again and successful tested on the oculus go. But the last day when I upload to the oculus store (preview channel) I got these signing errors and this drove my crazy. Until I today came back with a cooled mind and saw you entry and voila: upload successful.

I can say: Tested with Unity 2019.4.11 and the APK was successful signed with V1 for the oculus go.

Thank you for sharing your solution!

P.S.: under XR → Oculus Settings there’s a checkbox: V2 Signing, but this seem to do nothing in this case. Unity seems to overwrite always with V2 unless you use a “Custom Launcher Gradle Template”

When uploading to the Oculus platform, I get the error
ERROR: Please sign your APK and then resubmit.
Apksigner verify yields:

Verified using v1 scheme (JAR signing): false
Verified using v2 scheme (APK Signature Scheme v2): true
Number of signers: 1```
Anyone have a sense of where the correct Quest signing settings are in Unity 2020? It worked fine in our 2019 LTS builds. (The above solution by BlueCobalt didn't work for us for Quest.)

 @jj-unity  — any guesses on what might have changed, or how to ensure we're signing these Quest 1+2 builds the right way? Many thanks.

[SOLUTION]: For anyone that got caught in the same issue we did, you need to make sure for Quest/Quest 2 that “minimum API level” = 23 (not higher!) or the builds will not be signed with v1 (only v2), and will be rejected by the Oculus Store uploader.

This was extra confusing because we have had builds with minimum API of 25 on the store platform for almost a year with no problem. This seems to be a recent change in the required specs? Either way, it works now.

Specs: Unity 2020.2
Oculus Integration 23.1

4 Likes

I love you. I’ve been trying to figure out what was going on all day. Thank you kind internet stranger!

I’m having this same problem. GLES 3 gets stripped out of the AndroidManifest during build regardless of Unity’s only target graphics API being GLES 3 AND manually including the “uses-feature” in the AndroidManifest. Did you ever figure this one out?

EDIT: SOLVED
Check the changelog of the Oculus VR package. Update to the latest version.
https://docs.unity3d.com/Packages/com.unity.xr.oculus.android@2.38/changelog/CHANGELOG.html

  • Fixed an issue with manifest generation when combined with the 1.44 Oculus Integration assets.
  • Fixed an issue introduced in 2.38.4 where some entries in a custom AndroidManifest.xml were getting removed when V2 signing was enabled.
1 Like

Any fallback solutions for a project stuck in Unity 2017 LTS?