繁体   English   中英

我的 Flutter 应用程序中的 Google 登录失败

[英]Google sign-in is failing in my Flutter app

我在控制台中收到以下错误消息

I/flutter (14118): PlatformException(sign_in_failed, com.google.android.gms.common.api.ApiException: 10: , null)

谷歌登录失败。

谷歌登录之前工作。 我不知道到底发生了什么变化,但它今天坏了,我完全不确定是什么原因造成的。 I'm not sure if it was me setting my android sdk in my project structure in Intellij IDEA (because I migrated from Android Studio), that I moved my google sign in code to another dart file, or something else.

我已经设置了我的 SHA-1 和 SHA-256 密钥,并对它们进行了双重/三重检查,重新生成了我的密钥库并再次检查。 但这绝对不是问题,尽管所有其他线程都说过。

我还在正确项目下的凭据面板中完全设置了我的 Google O-Auth 集中屏幕。 添加了我的支持email,设置名称,添加了一个logo,并在各个字段下添加了firebase.com站点。

并且已经在我的 firebase 项目中设置了我的支持 email

并在我的努力中多次尝试运行flutter clean

import 'dart:async';
import 'dart:io';

import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:firebase_auth/firebase_auth.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:google_sign_in/google_sign_in.dart';
import 'package:image_picker/image_picker.dart';
import 'package:rotaract/logic/cloud_functions.dart';
import 'package:rotaract/main.dart';
import 'package:firebase_storage/firebase_storage.dart';
import 'package:photo_view/photo_view.dart';
import 'package:rotaract/ui/clubdecision/join_club.dart';
import 'package:rotaract/ui/clubdecision/register_club.dart';
import 'package:rotaract/ui/photo_view.dart';

class ClubDecision extends StatefulWidget {
  final FirebaseAuth _auth = FirebaseAuth.instance;
  final GoogleSignIn _googleSignIn = GoogleSignIn();

  @override
  State<StatefulWidget> createState() => ClubDecisionState();
}

class ClubDecisionState extends State<ClubDecision> {
  StreamSubscription<FirebaseUser> _listener;
  FirebaseUser _currentUser;

  bool errored = false;

  @override
  void initState() {
    super.initState();
    _checkCurrentUser().then((v) {
      if (_currentUser == null) {
        _handleGoogleSignIn().then((FirebaseUser user) {
          print(user.email);
          errored = false;
        }).catchError((e) {
          print(e);
          setState(() {
            errored = true;
          });
        });
      }
    }).catchError((e) {
      print(e);
      setState(() {
        errored = true;
      });
    });
  }

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

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

    final FirebaseUser user = (await widget._auth.signInWithCredential(credential)).user;
    assert(user.email != null);
    assert(user.displayName != null);
    assert(!user.isAnonymous);
    assert(await user.getIdToken() != null);

    final FirebaseUser currentUser = await widget._auth.currentUser();
    assert(user.uid == currentUser.uid);
    setState(() {
      _currentUser = user;
    });
    return user;
  }

  Future<void> _checkCurrentUser() async {
    return widget._auth.currentUser().then((user) {
      _currentUser = user;
      _currentUser?.getIdToken(refresh: true);

      _listener = widget._auth.onAuthStateChanged.listen((FirebaseUser user) {
        setState(() {
          _currentUser = user;
        });
      });
    });
  }

  @override
  void dispose() {
    _listener.cancel();
    super.dispose();
  }

  @override
  Widget build(BuildContext context) {
    return _currentUser == null
        ? Scaffold(
            body: Center(
              child: Column(mainAxisAlignment: MainAxisAlignment.center, children: <Widget>[
                SizedBox(
                  width: 200,
                  child: RaisedButton(
                    color: Color(0xFFeeeeee),
                    onPressed: () {
                      setState(() {
                        errored = false;

                        _checkCurrentUser();

                        if (_currentUser == null) {
                          _handleGoogleSignIn().then((FirebaseUser user) {
                            print(user.email);
                            errored = false;
                          }).catchError((e) {
                            print(e);
                            errored = true;
                          });
                        }
                      });
                    },
                    child: Row(
                      mainAxisAlignment: MainAxisAlignment.start,
                      children: <Widget>[
                        Image.asset(
                          'assets/g_logo_500.png',
                          width: 24,
                        ),
                        Padding(padding: EdgeInsets.only(right: 10)),
                        Text(
                          "Login using Google",
                          textAlign: TextAlign.left,
                          style: TextStyle(
                              color: Theme.of(context).accentColor,
                              fontSize: 15,
                              fontFamily: "Pacifico"),
                        ),
                      ],
                    ),
                  ),
                ),
                Text(
                  !errored ? "Logging you in..." : "Couldn't sign you in. Try again.",
                  style: TextStyle(color: Theme.of(context).accentColor),
                )
              ]),
            ),
          )
...

昨天还好好的。 但我不确定它今天是怎么坏的......它不再适用于我的 Nexus 5 模拟器,也不能通过 USB 调试在我的三星 Galaxy S9 上运行。

我不知道该怎么办了...

作为最后的努力,我将android/build.gradle中的google服务更新到了最新版本,这显然起作用了...

classpath 'com.google.gms:google-services:4.3.1'

Go 播放商店并搜索“应用程序完整性”

Google Play 商店应用完整性

在此处输入图像描述

然后复制 SHA 密钥并添加到 Firebase 或 Google Cloud 签名密钥中。

然后你对 go 就好了。

为我工作

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM