около 2–4 дней назад наше приложение получило несколько отчетов от нашего пользователя. который использует вход с учетной записью Google, после того как я его проверил.
Проблема заключалась в следующем:
- когда пользователь сначала входит в систему в нашем приложении, нажмите «Войти с помощью» Google, затем отобразите диалоговое окно от Google, в котором пользователь должен выбрать учетную запись для входа в систему. После того, как пользователь выберет ее, отобразится запрос на согласие пользователя. пользователь должен с этим согласиться. -> код работает нормально, может получать электронную почту пользователя.
- но когда пользователь выходит из системы, а затем входит в систему с той же учетной записью, запрос на согласие пользователя не отображается, тогда наш код не может получить электронную почту, но он будет вернуть некоторый идентификатор строки, например "11231231231231231"
GetSignInWithGoogleOption googleIdOption = new GetSignInWithGoogleOption.Builder(getString(R.string.your_web_client_id)).setNonce("nonce").build();
GetCredentialRequest request = new GetCredentialRequest.Builder().addCredentialOption(googleIdOption).build();
credentialManager.getCredentialAsync(this, request, new CancellationSignal(), Executors.newSingleThreadExecutor(), new CredentialManagerCallback() {
@Override
public void onResult(GetCredentialResponse result) {
handleSignIn(result);
}
@Override
public void onError(GetCredentialException e) {
Log.e(TAG, "Login Err" + e.getMessage());
}
});
public void handleSignIn(GetCredentialResponse result) {
Credential credential = result.getCredential();
if (credential instanceof CustomCredential) {
if (GoogleIdTokenCredential.TYPE_GOOGLE_ID_TOKEN_CREDENTIAL.equals(credential.getType())) {
GoogleIdTokenCredential googleIdTokenCredential = null;
try {
googleIdTokenCredential = GoogleIdTokenCredential.createFrom(((CustomCredential) credential).getData());
} catch (Exception e) {
Log.e(TAG, "Received an invalid google id token response" + e.getMessage());
}
String personName = googleIdTokenCredential.getDisplayName();
String email = googleIdTokenCredential.getId();
}
}
}
Подробнее здесь: https://stackoverflow.com/questions/790 ... a-on-retur