I'm currently updating my Android app to migrate from GoogleSignInClient to the new Credential Manager for user authentication. Previously, I used GoogleSignInClient to get the user's display name, email address, profile photo, and Google ID(Important). Here's a snippet of the old code that was working fine:
GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
.requestEmail()
.build();
mGoogleSignInClient = GoogleSignIn.getClient(this, gso);
private void handleSignInResult(Task<GoogleSignInAccount> completedTask) {
GoogleSignInAccount account = completedTask.getResult();
if (account != null) {
photoUrl = account.getPhotoUrl();
name = account.getDisplayName();
email = account.getEmail();
googleId = account.getId();// <= crucial for my app's functionality
}
}
Now that GoogleSignInClient is deprecated, I'm trying to use Credential Manager instead. However, I'm having trouble finding a direct replacement for the above functionality.
My Questions:
scopes in the OAuth consent screen? With my previous setup, it was working fine without any additional scopes.Any guidance or examples would be greatly appreciated. Thank you!
Answering my own question. Actually, we can get the google user ID from the token itself.
idToken = googleIdTokenCredential.idToken
String[] segments = idToken.split("\\.");
byte[] payloadAsByteArray = Base64.decode(segments[1], Base64.NO_PADDING);
JSONObject payloadInJson = new JSONObject(new String(payloadAsByteArray, UTF_8));
String uniqueIdentifier = payloadInJson.get("sub");