Flutter Firebase Auth Error .createUserWithEmailAndPassword: getGoogleApiForMethod () mengembalikan Gms: com.google.firebase.auth.api.internal.zzao@fb1556c
Pembukaan
Ini telah menjadi perjuangan untuk sementara waktu sekarang dan sepertinya tidak ada yang berhasil, saya telah melihat jawaban untuk pertanyaan serupa di sini dan di sini tetapi yang pertama tidak berdebar-debar dan yang terakhir diposting sebelum perubahan terbaru ke firebase_auth
dan saya rasa yang paling penting adalah solusi yang diusulkan tidak berhasil.
Masalah
Masalahnya menyangkut penyiapan awal yang sangat sederhana dari autentikasi firebase dalam flutter. Saya telah menyiapkan proyek firebase saya persis seperti yang disarankan di sini dan menggunakan ini dan ini untuk menyiapkan firebase_auth
.
Kode yang menyebabkan masalah adalah sebagai berikut:
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);
}
}
Ketika kode dijalankan kesalahan
I / BiChannelGoogleApi (19546): [FirebaseAuth:] getGoogleApiForMethod () mengembalikan Gms: com.google.firebase.auth.api.internal.zzao@fb1556c
Dikembalikan.
Jawaban ini tampaknya menyarankan bahwa kesalahan mungkin tidak relevan, yaitu kode tetap dapat berfungsi. Saya meletakkan breakpoint pada garis UserCredential userCredential = await FirebaseAuth.instance
dan melangkahi, itu berlanjut .createUserWithEmailAndPassword(
, kemudian setelah melangkah lagi kembali ke baris pertama dan kesalahan ditampilkan. Melangkahi pemutusan lebih lanjut dari fungsi seluruhnya, sehingga print(userCredential.user.email);
baris tidak pernah dijalankan, yang akan menunjukkan kode tidak berfungsi. Selain itu, print(e);
baris di dalam catch
bukan yang menghasilkan kesalahan ini.
Info lain
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,
),
],
),
),
);
}
}
Juga kesalahan ini telah muncul beberapa kali, meskipun jawaban ini tampaknya menyiratkan bahwa itu tidak ada hubungannya dengan masalah saya dan tidak menunjukkan adanya masalah.
W / ConnectionTracker (19240): java.lang.IllegalArgumentException: Layanan tidak terdaftar: lp @ fb1556c W / ConnectionTracker (19240): di android.app.LoadedApk.forgetServiceDispatcher (LoadedApk.java:1729) W / ConnectionTracker (19240): di android.app.ContextImpl.unbindService (ContextImpl.java:1874) W / ConnectionTracker (19240): di android.content.ContextWrapper.unbindService (ContextWrapper.java:792) W / ConnectionTracker (19240): di ci.f (: com .google.android.gms.dynamite_measurementdynamite @ 204217100 @ 20.42.17 (150700-0): 1) W / ConnectionTracker (19240): di ci.d (: com.google.android.gms.dynamite_measurementdynamite @ 204217100 @ 20.42.17 (150700-0): 2) W / ConnectionTracker (19240): di lq.D (: com.google.android.gms.dynamite_measurementdynamite @ 204217100 @ 20.42.17 (150700-0): 10) W / ConnectionTracker (19240) : di lc.a (: com.google.android.gms.dynamite_measurementdynamite @ 204217100 @ 20.42.17 (150700-0): 2) W / ConnectionTracker (19240): di ee.run (: com.google.android.gms .dynamite_measurementdynamite @ 204217100 @ 20.42.17 (150700-0): 3) W / ConnectionTracker (19240): di java.util.concurrent.Executors $ RunnableAdapter.call (Executors.java:462) W / ConnectionTracker (19240): di java.util.concurrent.FutureTask.run (FutureTask.java: 266) W / ConnectionTracker (19240): di ix.run (: com.google.android.gms.dynamite_measurementdynamite @ 204217100 @ 20.42.17 (150700-0): 6)
EDIT
Mengubah garis onPressed: () => _registerTestUser(),
di main.dart
untuk onPressed: () {_registerTestUser();}
memberikan hasil yang sama tapi perubahan kesalahan sedikit, yang zzao @ fb1556c menjadi zzao @ ebc85e9.
Jawaban
Meskipun tidak secara langsung menjawab pertanyaan Anda dan tampaknya berselisih (meskipun tidak terlalu berbeda dengan) dengan kode contoh FlutterFire. Berikut adalah kode yang saya gunakan untuk membuat pengguna (Jenis Pengguna Firebase_auth) dan saya tidak melihat kesalahan Anda:
User _user = (await _firebaseAuth.createUserWithEmailAndPassword(
email: email,
password: password,
)).user;
Saya kemudian dapat menggunakan metode seperti await _user.sendEmailVerification();
dan mengakses propertinya seperti _user.email
tanpa masalah.
Mungkin coba itu alih-alih kredensial.
PS. Masalah: yang W/ConnectionTracker(19240): java.lang.IllegalArgumentException: Service not registered:
Anda maksud sedang dilacak di sini dan saya tidak yakin ini terkait dengan kode Anda:https://github.com/firebase/firebase-android-sdk/issues/1662#issue-638324848
Ini memiliki beberapa variasi kode pengecualian tetapi semuanya terkait.
Perbarui Saya juga percaya bahwa @amit kumar hampir benar, Anda menjalankanFirebaseAuth auth = FirebaseAuth.instance;
sebelumnyaFirebase.initializeApp();
. Anda perlu memastikan masa depan Anda selesai sebelum Anda membuat instance FirebaseAuth, saya yakin. Mungkin membuat kode yang saya ubah di atas tidak relevan.
Pertama yang saya lihat Anda belum diinisialisasi firebase
dalam main.dart
berkas dengan benar.
void main() async {
WidgetsFlutterBinding.ensureInitialized();
await Firebase.initializeApp();
runApp(MyApp());
}
Anda melewatkan satu pernyataan, coba lagi dan jika Anda masih mendapat masalah, beri tahu saya
Cobalah ini:
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);
}
}
Pertimbangkan juga untuk menggunakan User, bukan 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);
}
}
final FirebaseAuth _auth = FirebaseAuth.instance;
registerUser()async{
_auth.createUserWithEmailAndPassword(
email:"[email protected]",
password: "SuperSecretPassword!",
).then((result){
User user = result.user;
}).catchError((e) {
print(e);
});
}