Google登录无法正常运行

时间:2019-12-24 04:44:55

标签: firebase flutter dart firebase-authentication google-signin

我正尝试使用Google登录我的项目,该应用程序完全可以正常运行,但是当我单击Google登录时,只要打开Goog​​le帐户,然后单击它们就不会登录,丢给我一个错误。

这是我的代码:

final GoogleSignIn _googleSignIn = GoogleSignIn();
  final FirebaseAuth firebaseAuth = FirebaseAuth.instance;

  SharedPreferences prefs;

  bool isLoading = false;
  bool isLoggedIn = false;
  FirebaseUser currentUser;

  @override
  void initState() {
    super.initState();
    isSignedIn();
  }

  void isSignedIn() async {
    this.setState(() {
      isLoading = true;
    });

    prefs = await SharedPreferences.getInstance();

    isLoggedIn = await _googleSignIn.isSignedIn();
    if (isLoggedIn) {
      Navigator.push(
          context, MaterialPageRoute(builder: (context) => HomePage()));
    }

    this.setState(() {
      isLoading = false;
    });
  }

  Future<FirebaseUser> _handleSignIn() async {
    final GoogleSignInAccount googleUser = await _googleSignIn.signIn();
    final GoogleSignInAuthentication googleAuth =
    await googleUser.authentication;

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

    final FirebaseUser firebaseUser =
        (await firebaseAuth.signInWithCredential(credential)).user;
    print("signed in " + firebaseUser.displayName);

    if (firebaseUser != null) {
      // Check is already sign up
      final QuerySnapshot result = await Firestore.instance
          .collection('users')
          .where('id', isEqualTo: firebaseUser.uid)
          .getDocuments();
      final List<DocumentSnapshot> documents = result.documents;
      if (documents.length == 0) {
        // Update data to server if new user
        Firestore.instance
            .collection('users')
            .document(firebaseUser.uid)
            .setData({
          'id': firebaseUser.uid,
          'nickname': firebaseUser.displayName,
          'photoUrl': firebaseUser.photoUrl,
          'createdAt': DateTime.now().millisecondsSinceEpoch.toString(),
        });

        // Write data to local
        currentUser = firebaseUser;
        await prefs.setString('id', currentUser.uid);
        await prefs.setString('nickname', currentUser.displayName);
        await prefs.setString('photoUrl', currentUser.photoUrl);
      } else {
        // Write data to local
        await prefs.setString('id', documents[0]['id']);
        await prefs.setString('nickname', documents[0]['nickname']);
        await prefs.setString('photoUrl', documents[0]['photoUrl']);
      }
      Fluttertoast.showToast(msg: "Sign in success");
      this.setState(() {
        isLoading = false;
      });
      Navigator.push(
          context, MaterialPageRoute(builder: (context) => HomePage()));
    } else {
      Fluttertoast.showToast(msg: "Sign in fail");
      this.setState(() {
        isLoading = false;
      });
    }
    return firebaseUser;
  } 

我得到的错误是:

W/Gralloc3(22915): mapper 3.x is not supported
D/FlutterView(22915): Attaching to a FlutterEngine: io.flutter.embedding.engine.FlutterEngine@3c0fd83
D/FlutterView(22915): Already attached to this engine. Doing nothing.
W/ActivityThread(22915): handleWindowVisibility: no activity for token android.os.BinderProxy@ac37963
E/flutter (22915): [ERROR:flutter/lib/ui/ui_dart_state.cc(157)] Unhandled Exception: PlatformException(sign_in_failed, com.google.android.gms.common.api.ApiException: 10: , null)
E/flutter (22915): #0      StandardMethodCodec.decodeEnvelope (package:flutter/src/services/message_codecs.dart:569:7)
E/flutter (22915): #1      MethodChannel.invokeMethod (package:flutter/src/services/platform_channel.dart:321:33)
E/flutter (22915): <asynchronous suspension>
E/flutter (22915): #2      MethodChannel.invokeMapMethod (package:flutter/src/services/platform_channel.dart:349:48)
E/flutter (22915): #3      MethodChannelGoogleSignIn.signIn (package:google_sign_in_platform_interface/src/method_channel_google_sign_in.dart:45:10)
E/flutter (22915): #4      GoogleSignIn._callMethod (package:google_sign_in/google_sign_in.dart:227:42)
E/flutter (22915): <asynchronous suspension>
E/flutter (22915): #5      GoogleSignIn._addMethodCall (package:google_sign_in/google_sign_in.dart:282:18)
E/flutter (22915): #6      GoogleSignIn.signIn (package:google_sign_in/google_sign_in.dart:352:9)
E/flutter (22915): #7      _SignDemoState._handleSignIn (package:food/main.dart:67:64)
E/flutter (22915): #8      _InkResponseState._handleTap (package:flutter/src/material/ink_well.dart:706:14)
E/flutter (22915): #9      _InkResponseState.build.<anonymous closure> (package:flutter/src/material/ink_well.dart:789:36)
E/flutter (22915): #10     GestureRecognizer.invokeCallback (package:flutter/src/gestures/recognizer.dart:182:24)
E/flutter (22915): #11     TapGestureRecognizer.handleTapUp (package:flutter/src/gestures/tap.dart:486:11)
E/flutter (22915): #12     BaseTapGestureRecognizer._checkUp (package:flutter/src/gestures/tap.dart:264:5)
E/flutter (22915): #13     BaseTapGestureRecognizer.handlePrimaryPointer (package:flutter/src/gestures/tap.dart:199:7)
E/flutter (22915): #14     PrimaryPointerGestureRecognizer.handleEvent (package:flutter/src/gestures/recognizer.dart:467:9)
E/flutter (22915): #15     PointerRouter._dispatch (package:flutter/src/gestures/pointer_router.dart:76:12)
E/flutter (22915): #16     PointerRouter._dispatchEventToRoutes.<anonymous closure> (package:flutter/src/gestures/pointer_router.dart:117:9)
E/flutter (22915): #17     _LinkedHashMapMixin.forEach (dart:collection-patch/compact_hash.dart:379:8)
E/flutter (22915): #18     PointerRouter._dispatchEventToRoutes (package:flutter/src/gestures/pointer_router.dart:115:18)
E/flutter (22915): #19     PointerRouter.route (package:flutter/src/gestures/pointer_router.dart:101:7)
E/flutter (22915): #20     GestureBinding.handleEvent (package:flutter/src/gestures/binding.dart:218:19)
E/flutter (22915): #21     GestureBinding.dispatchEvent (package:flutter/src/gestures/binding.dart:198:22)
E/flutter (22915): #22     GestureBinding._handlePointerEvent (package:flutter/src/gestures/binding.dart:156:7)
E/flutter (22915): #23     GestureBinding._flushPointerEventQueue (package:flutter/src/gestures/binding.dart:102:7)
E/flutter (22915): #24     GestureBinding._handlePointerDataPacket (package:flutter/src/gestures/binding.dart:86:7)
E/flutter (22915): #25     _rootRunUnary (dart:async/zone.dart:1138:13)
E/flutter (22915): #26     _CustomZone.runUnary (dart:async/zone.dart:1031:19)
E/flutter (22915): #27     _CustomZone.runUnaryGuarded (dart:async/zone.dart:933:7)
E/flutter (22915): #28     _invoke1 (dart:ui/hooks.dart:273:10)
E/flutter (22915): #29     _dispatchPointerDataPacket (dart:ui/hooks.dart:182:5)
E/flutter (22915): 
E/flutter (22915): 
W/ActivityThread(22915): handleWindowVisibility: no activity for token android.os.BinderProxy@e2eecf9
E/flutter (22915): [ERROR:flutter/lib/ui/ui_dart_state.cc(157)] Unhandled Exception: PlatformException(sign_in_failed, com.google.android.gms.common.api.ApiException: 10: , null)
E/flutter (22915): #0      StandardMethodCodec.decodeEnvelope (package:flutter/src/services/message_codecs.dart:569:7)
E/flutter (22915): #1      MethodChannel.invokeMethod (package:flutter/src/services/platform_channel.dart:321:33)
E/flutter (22915): <asynchronous suspension>
E/flutter (22915): #2      MethodChannel.invokeMapMethod (package:flutter/src/services/platform_channel.dart:349:48)
E/flutter (22915): #3      MethodChannelGoogleSignIn.signIn (package:google_sign_in_platform_interface/src/method_channel_google_sign_in.dart:45:10)
E/flutter (22915): #4      GoogleSignIn._callMethod (package:google_sign_in/google_sign_in.dart:227:42)
E/flutter (22915): <asynchronous suspension>
E/flutter (22915): #5      GoogleSignIn._addMethodCall.<anonymous closure> (package:google_sign_in/google_sign_in.dart:291:16)
E/flutter (22915): #6      _rootRunUnary (dart:async/zone.dart:1134:38)
E/flutter (22915): #7      _CustomZone.runUnary (dart:async/zone.dart:1031:19)
E/flutter (22915): #8      _FutureListener.handleValue (dart:async/future_impl.dart:140:18)
E/flutter (22915): #9      Future._propagateToListeners.handleValueCallback (dart:async/future_impl.dart:682:45)
E/flutter (22915): #10     Future._propagateToListeners (dart:async/future_impl.dart:711:32)
E/flutter (22915): #11     Future._addListener.<anonymous closure> (dart:async/future_impl.dart:391:9)
E/flutter (22915): #12     _rootRun (dart:async/zone.dart:1126:13)
E/flutter (22915): #13     _CustomZone.run (dart:async/zone.dart:1023:19)
E/flutter (22915): #14     _CustomZone.runGuarded (dart:async/zone.dart:925:7)
E/flutter (22915): #15     _CustomZone.bindCallbackGuarded.<anonymous closure> (dart:async/zone.dart:965:23)
E/flutter (22915): #16     _microtaskLoop (dart:async/schedule_microtask.dart:43:21)
E/flutter (22915): #17     _startMicrotaskLoop (dart:async/schedule_microtask.dart:52:5)
E/flutter (22915): 
D/FlutterView(22915): Detaching from a FlutterEngine: io.flutter.embedding.engine.FlutterEngine@3c0fd83

有人可以帮我解决问题吗,谢谢。

我已经被重定向到下面的页面,但是即使我选择了“外部选项”,也无法获得创建选项。 enter image description here

你能告诉我在这个地方应该做什么吗? enter image description here

1 个答案:

答案 0 :(得分:0)

问题来自google api,要解决该问题,您需要选择项目并填写“ OAuth”表单https://console.developers.google.com/apis/credentials/consent