Flutter Firebase Auth Error .createUserWithEmailAndPassword: getGoogleApiForMethod () hat Gms zurückgegeben: com.google.firebase.auth.api.internal.zzao@fb1556c

Jan 04 2021

Präambel

Dies ist seit einiger Zeit ein Kampf und nichts scheint zu funktionieren. Ich habe hier und hier Antworten auf ähnliche Fragen gesehen , aber der erstere war nicht im Flattern und der letztere wurde vor den jüngsten Änderungen an veröffentlicht, firebase_authund ich denke am wichtigsten, der Lösungsvorschläge haben nicht funktioniert.

Die Angelegenheit

Das Problem betrifft eine sehr sehr einfache anfängliche Einrichtung der Firebase-Authentifizierung innerhalb des Flatterns. Ich habe mein Firebase-Projekt genau so eingerichtet, wie es hier vorgeschlagen wird, und dies und das zum Einrichten verwendet firebase_auth.

Der Code, der das Problem verursacht, lautet wie folgt:

void _registerTestUser() async {
  try {
    UserCredential userCredential = await FirebaseAuth.instance
        .createUserWithEmailAndPassword(
            email: "[email protected]",
            password: "SuperSecretPassword!");
    print(userCredential.user.email);
  } on FirebaseAuthException catch (e) {
    if (e.code == 'weak-password') {
      print('The password provided is too weak.');
    } else if (e.code == 'email-already-in-use') {
      print('The account already exists for that email.');
    }
  } catch (e) {
    print(e);
  }
}

Wenn der Code ausgeführt wird, tritt der Fehler auf

I / BiChannelGoogleApi (19546): [FirebaseAuth:] getGoogleApiForMethod () gab Gms zurück: com.google.firebase.auth.api.internal.zzao@fb1556c

Ist zurück gekommen.

Diese Antwort scheint darauf hinzudeuten, dass der Fehler möglicherweise irrelevant ist, dh der Code funktioniert möglicherweise trotzdem. Ich habe einen Haltepunkt auf die Zeile gesetzt UserCredential userCredential = await FirebaseAuth.instanceund bin über die Linie gegangen .createUserWithEmailAndPassword(, dann geht es weiter. Wenn ich wieder über die Linie gehe, gehe ich zurück zur ersten Zeile und der Fehler wird angezeigt. Wenn Sie weitere Schritte ausführen, wird die Funktion vollständig unterbrochen, sodass die print(userCredential.user.email);Zeile nie ausgeführt wird, was darauf hindeuten würde, dass der Code nicht funktioniert. Außerdem gibt die print(e);Zeile in der catchnicht aus, was diesen Fehler ausgibt.

Andere Information

Pubspec.yaml

dependencies:
  flutter:
    sdk: flutter
  firebase_core: ^0.5.3 #firebase core flutter sdk
  firebase_auth: ^0.18.4+1 #firebase authorisation

android / build.gradle

dependencies {
    classpath 'com.android.tools.build:gradle:3.5.0'
    classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
    classpath 'com.google.gms:google-services:4.3.4'  // Google Services plugin
}

android / app / build.gradle

apply plugin: 'com.google.gms.google-services'  // Google Services plugin

main.dart

import 'package:flutter/material.dart';
import 'package:firebase_core/firebase_core.dart';
import 'package:firebase_auth/firebase_auth.dart';

FirebaseAuth auth = FirebaseAuth.instance;

void main() {
  WidgetsFlutterBinding.ensureInitialized();

  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  final Future<FirebaseApp> _initialization = Firebase.initializeApp();

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: FutureBuilder(
        // Initialize FlutterFire:
        future: _initialization,
        builder: (context, snapshot) {
          // Check for errors
          if (snapshot.hasError) {
            return Error();
          }

          // Once complete, show your application
          if (snapshot.connectionState == ConnectionState.done) {
            return MyHomePage();
          }

          // Otherwise, show something whilst waiting for initialization to complete
          return Loading();
        },
      ),
    );
  }
}

class Loading extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Center(
        child: Text('Firebase is loading'),
      ),
    );
  }
}

class Error extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Center(
        child: Text('There has been an error'),
      ),
    );
  }
}

class MyHomePage extends StatelessWidget {
  void _registerTestUser() async {
    try {
      UserCredential userCredential = await FirebaseAuth.instance
          .createUserWithEmailAndPassword(
              email: "[email protected]",
              password: "SuperSecretPassword!");
      print(userCredential.user.email);
    } on FirebaseAuthException catch (e) {
      if (e.code == 'weak-password') {
        print('The password provided is too weak.');
      } else if (e.code == 'email-already-in-use') {
        print('The account already exists for that email.');
      }
    } catch (e) {
      print(e);
    }
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: Text('FlutterFire Test')),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            RaisedButton(
              child: Text('Register a test user'),
              onPressed: () => _registerTestUser(),
              color: Colors.blue,
            ),
          ],
        ),
      ),
    );
  }
}

Auch dieser Fehler ist einige Male aufgetreten, obwohl diese Antwort zu implizieren scheint, dass er nichts mit meinem Problem zu tun hat und nicht auf ein Problem hinweist.

W / ConnectionTracker (19240): java.lang.IllegalArgumentException: Dienst nicht registriert: lp @ fb1556c W / ConnectionTracker (19240): at android.app.LoadedApk.forgetServiceDispatcher (LoadedApk.java:1729) W / ConnectionTracker (19240): at android.app.ContextImpl.unbindService (ContextImpl.java:1874) W / ConnectionTracker (19240): at android.content.ContextWrapper.unbindService (ContextWrapper.java:792) W / ConnectionTracker (19240): at ci.f (: com .google.android.gms.dynamite_measurementdynamite @ 204217100 @ 20.42.17 (150700-0): 1) W / ConnectionTracker (19240): at ci.d (: com.google.android.gms.dynamite_measurementdynamite @ 204217100 @ 20.42.17 (150700-0): 2) W / ConnectionTracker (19240): at lq.D (: com.google.android.gms.dynamite_measurementdynamite @ 204217100 @ 20.42.17 (150700-0): 10) W / ConnectionTracker (19240) : at lc.a (: com.google.android.gms.dynamite_measurementdynamite @ 204217100 @ 20.42.17 (150700-0): 2) W / ConnectionTracker (19240): at ee.run (: com.google.android.gms .dynamite_measurementdynamite @ 204217100 @ 20.42.17 (150700-0): 3) W / ConnectionTracker (19240): at java.util.concurrent.Executors $ RunnableAdapter.call (Executors.java:462) W / ConnectionTracker (19240): at java.util.concurrent.FutureTask.run (FutureTask.java: 266) W / ConnectionTracker (19240): at ix.run (: com.google.android.gms.dynamite_measurementdynamite @ 204217100 @ 20.42.17 (150700-0): 6)

BEARBEITEN

Ändern Sie die Zeile onPressed: () => _registerTestUser(),in main.dartzu onPressed: () {_registerTestUser();}dem gleichen Ergebnis ändert aber den Fehler leicht, die zzao @ fb1556c wird zzao @ ebc85e9.

Antworten

GrahamD Jan 08 2021 at 19:24

Sie beantworten Ihre Frage zwar nicht direkt und stehen offenbar im Widerspruch (wenn auch nicht sehr unterschiedlich) zum FlutterFire-Beispielcode. Hier ist der Code, den ich zum Erstellen eines Benutzers verwende (Benutzer vom Typ Firebase_auth), und ich sehe Ihren Fehler nicht:

User _user = (await _firebaseAuth.createUserWithEmailAndPassword(
              email: email,
              password: password,
            )).user;

Ich kann dann Methoden wie verwenden await _user.sendEmailVerification();und auf seine Eigenschaften zugreifen, wie zum Beispiel _user.emailohne Probleme.

Vielleicht versuchen Sie das anstelle des Berechtigungsnachweises.

PS. Das Problem, auf das W/ConnectionTracker(19240): java.lang.IllegalArgumentException: Service not registered:Sie sich beziehen, wird hier verfolgt, und ich glaube nicht, dass es mit Ihrem Code zusammenhängt:https://github.com/firebase/firebase-android-sdk/issues/1662#issue-638324848

Es gibt verschiedene Variationen des Ausnahmecodes, die jedoch alle miteinander verbunden sind.

Update Ich glaube auch, dass @amit kumar fast korrekt ist, du rennstFirebaseAuth auth = FirebaseAuth.instance;vorherFirebase.initializeApp();. Sie müssen sicherstellen, dass Ihre Zukunft abgeschlossen ist, bevor Sie FirebaseAuth instanziieren, glaube ich. Wahrscheinlich macht mein geänderter Code oben irrelevant.

AmitKumar Jan 05 2021 at 00:17

Zunächst ich sehe Sie nicht initialisiert haben firebasein main.dartkorrekt Datei.

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  await Firebase.initializeApp();
  runApp(MyApp());
}

Sie haben eine Aussage verpasst und versuchen Sie es erneut. Wenn Sie immer noch Probleme haben, lassen Sie es mich wissen

JamM.HernandezQuiceno Jan 12 2021 at 01:41

Probieren Sie es aus:

  void _registerTestUser() async {
    try {
      await FirebaseAuth.instance
          .createUserWithEmailAndPassword(
              email: "[email protected]",
              password: "SuperSecretPassword!")
          .then((userCredential) => print(userCredential.user.email));
    } on FirebaseAuthException catch (e) {
      if (e.code == 'weak-password') {
        print('The password provided is too weak.');
      } else if (e.code == 'email-already-in-use') {
        print('The account already exists for that email.');
      }
    } catch (e) {
      print(e);
    }
  }

Erwägen Sie auch die Verwendung von User anstelle von UserCredential:

  void _registerTestUser() async {
    try {
      final User user = (await FirebaseAuth.instance
              .createUserWithEmailAndPassword(
                  email: "[email protected]",
                  password: "SuperSecretPassword!"))
          .user;

      print(user.email);
    } on FirebaseAuthException catch (e) {
      if (e.code == 'weak-password') {
        print('The password provided is too weak.');
      } else if (e.code == 'email-already-in-use') {
        print('The account already exists for that email.');
      }
    } catch (e) {
      print(e);
    }
  }
ChizaramSuccess Jan 12 2021 at 22:34
 final FirebaseAuth _auth = FirebaseAuth.instance;

        registerUser()async{
        _auth.createUserWithEmailAndPassword(
         email:"[email protected]",
         password: "SuperSecretPassword!",
        ).then((result){
User user = result.user;
}).catchError((e) {
          print(e);
        });
    }