около 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();
}
}
}
первый пользователь
Код: Выделить всё
{
"iss": "https://accounts.google.com",
"azp": "....",
"aud": "....",
"sub": "105676566517108135791",
"email": "someemail@gmail.com",
"email_verified": true,
"nonce": "6f7492ed4cf77a82ad276b5d54f65e72",
"name": "some name",
"picture": "...",
"given_name": "Some",
"family_name": "Test",
"iat": 1726990428,
"exp": 1726994028
}возврат пользователя пользователя
< div class="snippet">
Код: Выделить всё
{
"iss": "https://accounts.google.com",
"azp": "....",
"aud": ".....",
"sub": "105676566517108135791",
"nonce": "some_nonce",
"iat": 1726990462,
"exp": 1726994062
}Подробнее здесь: https://stackoverflow.com/questions/790 ... a-on-retur