Flutter Google Login не регистрируется в Firebase - PullRequest
0 голосов
/ 18 октября 2019

1. Проблема

Я пытаюсь реализовать простые кнопки входа в Facebook и Google с помощью Firebase и Flutter, однако версия Google ведет себя очень странно. Когда я печатаю FirebaseAuth.instance.currentUser(), я получаю либо ошибки, либо предыдущие данные для входа в Facebook.

Когда я вхожу в Facebook, моя учетная запись действительно появляется в Firebase, однако, похоже, что логин Googleничего.

Это я что-то напутал в приведенном ниже коде или какая-то проблема несовместимости с AndroidX с частями этих библиотек? Что-то еще?

Кроме того, мне не очень понятно, нужно ли мне поместить Project public-facing name где-нибудь внутри моего проекта, чтобы сделать интеграцию с Firebase работающей (мне пришлось сделать что-то похожее на настройку входа в Facebook). кнопка).

2. Логин Facebook

Мне пришлось заменить logInWithReadPermissions на signInWithCredential, потому что последние версии изменили свой API. Я также пытался использовать предыдущие версии пакетов, но обнаружил много ошибок (возможно, из-за AndroidX):

final _auth = FirebaseAuth.instance;

Future<FirebaseUser> _loginWithFacebook () async {
  final facebookLogin = FacebookLogin();
  final result = await facebookLogin.logInWithReadPermissions(['email']);

  if (result.status == FacebookLoginStatus.loggedIn){
    final FacebookAccessToken accessToken = result.accessToken;
    AuthCredential credential = FacebookAuthProvider.getCredential(
      accessToken: accessToken.token,
    );

    AuthResult signInResult = await _auth.signInWithCredential(credential);

    FirebaseUser fbUser = signInResult.user;
    return fbUser;
  }
  else{
    return null;
  }
}

3. Google Login

Опять же, signInWithCredential представляется более новым API:

Future<FirebaseUser> _loginWithGoogle () async{
  final GoogleSignIn _googleSignIn = GoogleSignIn();

  GoogleSignInAccount googleUser = await _googleSignIn.signIn();

  final GoogleSignInAuthentication googleAuth = await googleUser.authentication;
  final AuthCredential credential = GoogleAuthProvider.getCredential(
    accessToken: googleAuth.accessToken,
    idToken: googleAuth.idToken,
  );
  AuthResult signInResult = await _auth.signInWithCredential(credential);

  final FirebaseUser user = signInResult.user;

  print(user);

  return user;
}

Редактировать

Я пробовал его на Android 9.0 (пирог)эмулятор, и он все еще не работает.

1 Ответ

0 голосов
/ 19 октября 2019

Очевидно, мой код аутентификации был корректным как для Google, так и для Facebook, учитывая самый современный API.

Однако мне нужно было интегрировать SHA1 Fingerprint в мою среду Firebase, что яЯ не осознавал, что мне нужно было это сделать, потому что ни одно из руководств, которые я использовал, не упомянуло об этом, и его можно легко отклонить при включении метода входа в Google в Firebase.

В любом случае, вот шаги, которые вам понадобятсязавершено, чтобы получить SHA1 Fingerprint:

  1. Открыть командную строку и cd C:\Program Files\Android\Android Studio\jre\bin.
  2. Получить ключ SHA1:
    keytool -list -v -alias androiddebugkey -keystore %USERPROFILE%\.android\debug.keystore
    
  3. Перейти к Firebase Console > Project settings > Add Key и добавьте ключ.
...