Firebase Android: сбой входа в Google

#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();
  

Надеюсь, это поможет!