В моем приложении Android я вхожу через Firebase AuthUI с помощью входа в Google. Эта часть работает. Теперь я попытался войти с помощью IdToken
, но всегда получаю следующее сообщение об ошибке:
com.google. android .gms.tasks.RuntimeExecutionException: com.google.firebase.auth. FirebaseAuthInvalidCredentialsException: предоставленные учетные данные авторизации искажены или истек срок их действия. [Неверный id_token в ответе IdP: XXXXXXX ...]
Это работает и успешно регистрирует меня в моем проекте Firebase:
@OnClick(R.id.sign_in)
public void signIn() {
startActivityForResult(
AuthUI.getInstance().createSignInIntentBuilder()
.setTheme(getSelectedTheme())
.setLogo(getSelectedLogo())
.setAvailableProviders(getSelectedProviders())
.setTosAndPrivacyPolicyUrls(getSelectedTosUrl(),getSelectedPrivacyPolicyUrl())
.setIsSmartLockEnabled(true,
true)
.build(),
RC_SIGN_IN);
}
Но я пытаюсь использовать signInWithCredential
, используя учетные данные, полученные из IdToken
, дают мне сообщение об ошибке выше:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == RC_SIGN_IN) {
handleSignInResponse(resultCode, data);
return;
}
}
@MainThread
private void handleSignInResponse(int resultCode, Intent data) {
IdpResponse response = IdpResponse.fromResultIntent(data);
if (resultCode == RESULT_OK) {
FirebaseAuth auth = FirebaseAuth.getInstance();
FirebaseUser firebaseUser = auth.getCurrentUser();
if(firebaseUser != null){
auth.getCurrentUser().getIdToken(true).addOnCompleteListener(task -> {
String idToken = task.getResult().getToken();
AuthCredential cred = GoogleAuthProvider.getCredential(idToken ,null);
auth.signInWithCredential(cred).addOnCompleteListener(task1 ->
Log.v(TAG,"results: " + task1.getResult()));
});
}
}
}
Я следую этому учебному пособию , и моя цель - войти в несколько проектов Firebase.
Попытка войти во вторичный проект Firebase с использованием учетных данных из IdToken выше возвращает ту же ошибку.
FirebaseApp app = FirebaseApp.getInstance("secondary");
FirebaseAuth.getInstance(app).signInWithCredential(credential);