Build1 publisher2 min readPublished
Opting into quantum-ready Play signing invalidates the SHA-1 in your Android OAuth client
A developer's Play-delivered build returned nothing at all from Sign in with Google, because the fingerprint buttons on Play Console's app signing page no longer describe the certificate that signs the app.
The Engineer · Build desk

What happened
- A developer reported that Sign in with Google worked on development and preview builds, while the Play-delivered build showed no account picker, no error message and no crash when the button was tapped.
- Credential Manager returns a result meaning cancelled whenever a sign-in cannot complete, which is the same result a user swiping the dialog away produces.
- Registering that fingerprint fixed the sign-in within minutes and required no rebuild or new release.
Compiled by The EngineerSomething wrong?How this is made
Why it matters
- constraint Debug and preview channels cannot clear this class of bug, because they run the upload signature while Play delivers its own; the only build that exercises the real certificate is the one on a tester's phone.
- exposure Any team that enrolled in the beta and configured its OAuth client from the console buttons has a sign-in path that fails for every Play Store user while internal installs keep passing review.
- cost Debugging it takes days, and the person on call after a release is the one who spends them, since the API returns nothing to look up and the first plausible theory can be ruled out incorrectly.
- decision Verification has to move from comparing console fields to reading the certificate off the installed artifact.
The reason this appears only in production is in the contract Credential Manager exposes to the app. When a sign-in cannot complete, it returns a result that means cancelled [6]. In the library the author was using, the catch blocks map `GetCredentialCancellationException` to a cancelled response and `NoCredentialException` to a no-saved-credential response [7]. Before that point Google asks two questions: is the package name registered, and does the app's certificate match the fingerprint on file [9]. A no to either is a refusal, and the refusal arrives as cancelled [9].
The post lists four conditions that land in that one bucket: a user swiping the dialog away, an app that is not registered properly, a certificate that does not match, and a consent screen still in Testing with this person absent from the tester list [8]. Three of the four are configuration faults on the developer's side [15].
Play App Signing is the part most Android teams already know. You sign with your upload key, and Play strips that signature and applies its own before delivering the app to users [10]. The installed app therefore carries a different fingerprint than the file you uploaded, so both the upload key and Play's signing key have to be registered with Google; register only the upload key and every Play Store install fails while local installs keep working [11].
The beta changes which certificate is authoritative. According to the dev.to post, if the app uses Play App Signing and the developer has opted into quantum-ready app signing (beta), the SHA-1 fingerprint buttons on Play Console's app signing page are not the certificate that signs the app [3]. The one to fingerprint is `deployment_cert.der`, one of three files behind Download certificates under Manage Play app signing, reached through Protect with Play and Play Store protection [4]. The post identifies that file without describing what the beta changes about the signing pipeline [17].
The author went to the OAuth client first. The Android client had the right package name, a SHA-1 copied straight from Play Console's app signing page, a consent screen published to production, and no unusual permissions requested [12]. On that evidence the fingerprint theory looked dead, and another day went into the test user's Google account instead [13]. "The console tells you what you configured. The phone tells you what's true," the author wrote [14].
Registering the deployment certificate's SHA-1 in the Android OAuth client fixed it with no rebuild, and sign-in started working within minutes [5]. Read the certificate off the app that is actually installed [18]. Finding that took several days [2].
What to watch
- Whether Google labels the app signing page's SHA-1 buttons as non-authoritative for apps enrolled in the quantum-ready beta, or changes what those buttons return.
- Whether the deployment certificate in the beta stays stable, since any rotation re-breaks every fingerprint already registered in an OAuth client.
- Whether Credential Manager ever separates certificate rejection from user dismissal in the result it returns to the app.