#android #firebase #firebase-authentication #google-authentication
#Android #Firebase #Firebase-аутентификация #google-аутентификация
Вопрос:
Прежде всего, я должен сказать, что я очень новичок в разработке Android, поэтому простите меня, если я упускаю из виду что-то очевидное.
Для университетского проекта мне нужно создать приложение, которое сначала проверяет подлинность пользователей через их учетную запись Google с помощью Firebase. Сначала я следовал инструкциям, которые я нашел здесь .
Для начала я скопировал вставленный этот код из учебника Firebase.Кажется, все работает, за исключением одной вещи :
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
Log.d(TAG, "------------------ onActivityResult ------------------");
super.onActivityResult(requestCode, resultCode, data);
// Result returned from launching the Intent from GoogleSignInApi.getSignInIntent(...);
if (requestCode == RC_SIGN_IN) {
GoogleSignInResult result = Auth.GoogleSignInApi.getSignInResultFromIntent(data);
if (result.isSuccess()) {
Log.d(TAG, "------------------ googleSignInSuccess ------------------");
// Google Sign In was successful, authenticate with Firebase
GoogleSignInAccount account = result.getSignInAccount();
firebaseAuthWithGoogle(account);
// Start menu activity once the user has been logged in
Intent intent = new Intent(this, MenuActivity.class);
startActivity(intent);
} else {
Log.d(TAG, "------------------ googleSignInFailure ------------------");
// Google Sign In failed, update UI appropriately
// [START_EXCLUDE]
//Log.d(TAG, result.getStatus().getStatusMessage());
updateUI(null);
// [END_EXCLUDE]
}
}
}
Здесь, result.isSuccess() == false
. Поэтому я думаю, что по какой-то причине, которую я не могу понять, аутентификация Google завершается с ошибкой. Я уверен, что ввел правильный пароль, я также включил аутентификацию учетной записи Google в консоли Firebase моего приложения.
Заранее большое вам спасибо, если вы можете мне помочь.
РЕДАКТИРОВАТЬ: если быть более точным, при первом запуске программы на моем эмуляторе (или после каждого удаления из него данных) я должен ввести свои учетные данные Google в специальной всплывающей операции входа в Google. Это работает нормально, и, похоже, то же действие успешно аутентифицирует меня. Однако после этого result.isSuccess()
значение по-прежнему равно false, и я не понимаю, почему.
Комментарии:
1. Было бы полезно проанализировать проблему, если вы можете предоставить другую часть кода
2. Какую часть вы имеете в виду?
3. Как вы делаете запрос клиента
4. у меня была та же проблема, я не предоставил сертификаты SHA для приложения, это жизненно важный шаг, который вы можете сделать так. developers.google.com/android/guides/client-auth
Ответ №1:
Я, наконец, нашел проблему, я допустил ошибку при аутентификации своего приложения в консоли Firebase здесь (раздел «перед началом»), 4-й шаг. Вместо этого я ввел debug
один, и теперь он работает.
Тем не менее, спасибо!
Ответ №2:
Вы можете проверить статус результата с result.getStatus().getStatusMessage()
помощью . Запишите это сообщение или отладьте свой статус результата, и он должен указывать на проблему. Status
также имеет getResolution()
метод, который предоставляет ожидающее намерение, которое должно разрешить ваш сбой (сначала проверьте, доступно ли разрешение с помощью вызова hasResolution()
, который возвращает true
, может ли он справиться с этим за вас).
Комментарии:
1. Я попробовал ваше решение, и я могу получить сообщение о состоянии, однако его печать в терминале IDE с помощью Log.d (единственный известный мне способ) приводит к сбою моего приложения. Кроме того, метод hasResolution() возвращает false .
2. Откуда вы это взяли
result
? Все, что я получаю от onActivityResults, — это целые числа onActivityResult(requestCode: Int, resultCode: Int, data: Intent?)3. проверьте данные: намерение?
Ответ №3:
Попробуйте изменить GSO с помощью :
GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
.requestIdToken(getString(R.string.default_web_client_id))
.requestEmail()
.build();
Надеюсь, это поможет!