Flutter Firebase認証エラー.createUserWithEmailAndPassword:getGoogleApiForMethod()がGmsを返しました:com.google.firebase.auth.api.internal.zzao@fb1556c
前文
今と何も動作しているようだ一方でこれは、良いのための闘争となっている私は、同様の質問への回答を見ているこことここが、前者はフラッタではなかったし、後者は前に投稿された最近の変化にfirebase_auth
、私は最も重要な推測します提案された解決策は機能していません。
問題
この問題は、フラッター内でのFirebase認証の非常に単純な初期設定に関係しています。ここで提案されているとおりにFirebaseプロジェクトを設定し、これとこれを使用して設定しましたfirebase_auth
。
問題の原因となっているコードは次のとおりです。
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);
}
}
コードを実行すると、エラーが発生します
I / BiChannelGoogleApi(19546):[FirebaseAuth:] getGoogleApiForMethod()がGmsを返しました:com.google.firebase.auth.api.internal.zzao@fb1556c
返却されます。
この回答は、エラーが無関係である可能性があること、つまりコードがとにかく機能する可能性があることを示唆しているようです。行にブレークポイントを設定してUserCredential userCredential = await FirebaseAuth.instance
ステップオーバーすると、それが続行され.createUserWithEmailAndPassword(
、もう一度ステップオーバーすると最初の行に戻り、エラーが表示されます。それ以上ステップオーバーすると、関数が完全に終了するため、print(userCredential.user.email);
行が実行されることはありません。これは、コードが機能していないことを示しています。さらに、のprint(e);
行catch
はこのエラーを出力しているものではありません。
他の情報
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,
),
],
),
),
);
}
}
また、このエラーは数回発生していますが、この回答は私の問題とは何の関係もないことを意味しているようで、問題を示しているわけではありません。
W / ConnectionTracker(19240):java.lang.IllegalArgumentException:サービスが登録されていません:lp @ fb1556c W / ConnectionTracker(19240):android.app.LoadedApk.forgetServiceDispatcher(LoadedApk.java:1729)W / ConnectionTracker(19240):at android.app.ContextImpl.unbindService(ContextImpl.java:1874)W / ConnectionTracker(19240):android.content.ContextWrapper.unbindService(ContextWrapper.java:792)W / ConnectionTracker(19240):ci.f(:com .google.android.gms.dynamite_measurementdynamite @ 204217100 @ 20.42.17(150700-0):1)W / ConnectionTracker(19240):ci.d(:com.google.android.gms.dynamite_measurementdynamite @ 204217100 @ 20.42.17 (150700-0):2)W / ConnectionTracker(19240):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):java.util.concurrent.Executors $ RunnableAdapter.call(Executors.java:462)W / ConnectionTracker(19240):java.util.concurrent.FutureTask.run(FutureTask.java: 266)W / ConnectionTracker(19240):ix.run(:com.google.android.gms.dynamite_measurementdynamite @ 204217100 @ 20.42.17(150700-0):6)
編集
行を変更するonPressed: () => _registerTestUser(),
にmain.dart
するには、onPressed: () {_registerTestUser();}
同じ結果を与えるが、fb1556c @ zzaoがzzao @ ebc85e9なり、少しの誤差を変更します。
回答
あなたの質問に直接答えることはなく、FlutterFireサンプルコードとは明らかに対立していますが(それほど違いはありませんが)。ユーザー(Firebase_auth Type User)を作成するために使用するコードは次のとおりですが、エラーは表示されません。
User _user = (await _firebaseAuth.createUserWithEmailAndPassword(
email: email,
password: password,
)).user;
その後、などのメソッドを使用してawait _user.sendEmailVerification();
、_user.email
問題なくそのプロパティにアクセスできます。
資格情報の代わりにそれを試してみてください。
PS。問題:W/ConnectionTracker(19240): java.lang.IllegalArgumentException: Service not registered:
あなたが参照しているものはここで追跡されており、あなたのコードに関連しているとは思わない:https://github.com/firebase/firebase-android-sdk/issues/1662#issue-638324848
例外コードにはいくつかのバリエーションがありますが、それらはすべて関連しています。
更新@amitkumarはほぼ正しいと思います、あなたはFirebaseAuth auth = FirebaseAuth.instance;
前に走っていますFirebase.initializeApp();
。FirebaseAuthをインスタンス化する前に、将来が完了することを確認する必要があると思います。おそらく、上記の変更したコードは無関係になります。
まずfirebase
、main.dart
ファイルが正しく初期化されていないことがわかります。
void main() async {
WidgetsFlutterBinding.ensureInitialized();
await Firebase.initializeApp();
runApp(MyApp());
}
1つのステートメントを見逃して再試行しましたが、それでも問題が発生する場合はお知らせください
これを試してみてください:
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);
}
}
UserCredentialの代わりにUserを使用することも検討してください。
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);
});
}