java.lang.IllegalArgumentException:服务未注册 Flutter 和 Firebase Google SignIn

Posted

技术标签:

【中文标题】java.lang.IllegalArgumentException:服务未注册 Flutter 和 Firebase Google SignIn【英文标题】:java.lang.IllegalArgumentException: Service not registered Flutter and Firebase Google SignIn 【发布时间】:2021-03-26 02:38:18 【问题描述】:

我想允许使用 Firebase 在我的应用中通过 google 登录。这是我的代码:

import 'package:PixiCall/models/user.dart';
import 'package:PixiCall/utils/utilities.dart';
import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:firebase_auth/firebase_auth.dart';
import 'package:google_sign_in/google_sign_in.dart';

class FirebaseMethods 
  final FirebaseAuth _auth = FirebaseAuth.instance;

  GoogleSignIn _googleSignIn = GoogleSignIn();
  static final FirebaseFirestore firestore = FirebaseFirestore.instance;

  //user class
  User1 user = User1();

  Future<User> getCurrentUser() async 
    User currentUser;
    currentUser = await _auth.currentUser;
    return currentUser;
  

  Future<User> signIn() async 
    GoogleSignInAccount _signInAccount = await _googleSignIn.signIn();
    GoogleSignInAuthentication _signInAuthentication =
        await _signInAccount.authentication;

    final AuthCredential credential = GoogleAuthProvider.credential(
      accessToken: _signInAuthentication.accessToken,
      idToken: _signInAuthentication.idToken,
    );

    User user = (await _auth.signInWithCredential(credential)).user;
    return user;
  

  Future<bool> authenicateUser(User user) async 
    QuerySnapshot result = await firestore
        .collection('users')
        .where('email', isEqualTo: user.email)
        .get();

    final List<DocumentSnapshot> docs = result.docs;

    //if user is registered then length of list > 0 or else less than 0
    return docs.length == 0 ? true : false;
  

  Future<void> addDataToDb(User currentUser) async 
    String username = Utils.getUsername(currentUser.email);

    user = User1(
        uid: currentUser.uid,
        email: currentUser.email,
        name: currentUser.displayName,
        profilePhoto: currentUser.photoURL,
        username: username);

    firestore.collection('users').doc(currentUser.uid).set(user.toMap(user));
  

而且 VS Code 中没有错误,我在运行应用程序时在终端中出现此消息:

/ConnectionTracker(14606): Exception thrown while unbinding
W/ConnectionTracker(14606): java.lang.IllegalArgumentException: Service not registered: lv@b068d66
W/ConnectionTracker(14606):     at android.app.LoadedApk.forgetServiceDispatcher(LoadedApk.java:1484)
W/ConnectionTracker(14606):     at android.app.ContextImpl.unbindService(ContextImpl.java:1638)
W/ConnectionTracker(14606):     at android.content.ContextWrapper.unbindService(ContextWrapper.java:703)
W/ConnectionTracker(14606):     at ci.f(:com.google.android.gms.dynamite_measurementdynamite@204516052@20.45.16 (040700-0):1)
W/ConnectionTracker(14606):     at ci.d(:com.google.android.gms.dynamite_measurementdynamite@204516052@20.45.16 (040700-0):2)
W/ConnectionTracker(14606):     at lw.E(:com.google.android.gms.dynamite_measurementdynamite@204516052@20.45.16 (040700-0):9)
W/ConnectionTracker(14606):     at lg.a(:com.google.android.gms.dynamite_measurementdynamite@204516052@20.45.16 (040700-0):3)
W/ConnectionTracker(14606):     at eg.run(:com.google.android.gms.dynamite_measurementdynamite@204516052@20.45.16 (040700-0):3)
W/ConnectionTracker(14606):     at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:457)
W/ConnectionTracker(14606):     at java.util.concurrent.FutureTask.run(FutureTask.java:266)
W/ConnectionTracker(14606):     at iz.run(:com.google.android.gms.dynamite_measurementdynamite@204516052@20.45.16 (040700-0):5)

这是登录按钮:

Widget loginButton() 
    return FlatButton(
      padding: EdgeInsets.all(35),
      child: Text(
        'Login',
        style: TextStyle(
          fontSize: 25,
          fontWeight: FontWeight.w900,
          letterSpacing: 1.2,
        ),
      ),
      onPressed: () => performLogin,
    );
  

  void performLogin() 
    _repository.signIn().then((User user) 
      if (user != null) 
        authenticateUser(user);
       else 
        print('There was an error');
      
    );
  

另外,在 VS Code 的问题选项卡中,我有这个错误:“等待”应用于“用户”,这不是“未来”。此错误与我提供的第一个代码有关。

当我点击登录按钮时,什么也没有发生。它应该让我使用 Google 登录,但它没有。有人知道这可能是什么问题吗?

【问题讨论】:

您是否为 Firebase 提供了 SHA1 密钥?为了能够在 android 上使用 google 登录,您需要提供密钥 是的,我在 Firebase 控制台中提供了它。 :) 【参考方案1】:

您不需要使用async 方法来调用getCurrentUser()

  User getCurrentUser() 
    User currentUser;
    currentUser = _auth.currentUser;
    return currentUser;
  

【讨论】:

我试过你的代码,在此之后,我将 firebase_repository.dart 文件从:Future getCurrentUser() => _firebaseMethods.getCurrentUser();到:用户 getCurrentUser() => _firebaseMethods.getCurrentUser();但是现在我对 main.dart 有问题: home: FutureBuilder(future: _repository.getCurrentUser(), builder: (context, AsyncSnapshot snapshot) if (snapshot.hasData) return HomeScreen(); else return LoginScreen(); ,我需要在这里更改什么?

以上是关于java.lang.IllegalArgumentException:服务未注册 Flutter 和 Firebase Google SignIn的主要内容,如果未能解决你的问题,请参考以下文章

IllegalArgumentException:此 NavController 未知导航目的地 xxx