【问题标题】:Unhandled Exception: PlatformException(sign_in_failed, com.google.android.gms.common.api.ApiException: 10: , null, null)未处理的异常:PlatformException(sign_in_failed, com.google.android.gms.common.api.ApiException: 10: , null, null)
【发布时间】:2021-11-28 23:34:59
【问题描述】:

我正在尝试使用颤振应用程序进行谷歌登录,但我收到了这个错误。 我已经获得了 SHA-1 密钥并将其放入 OAuth 和 Firebase,并在 app 目录下设置了 google-services.json 文件。 但我还是遇到了同样的问题。

 E/flutter (12401): [ERROR:flutter/lib/ui/ui_dart_state.cc(209)] Unhandled Exception: PlatformException(sign_in_failed, com.google.android.gms.common.api.ApiException: 10: , null, null)
E/flutter (12401): #0      StandardMethodCodec.decodeEnvelope (package:flutter/src/services/message_codecs.dart:607:7)
E/flutter (12401): #1      MethodChannel._invokeMethod (package:flutter/src/services/platform_channel.dart:156:18)
E/flutter (12401): <asynchronous suspension>
E/flutter (12401): #2      MethodChannel.invokeMapMethod (package:flutter/src/services/platform_channel.dart:356:43)
E/flutter (12401): <asynchronous suspension>
E/flutter (12401): #3      GoogleSignIn._callMethod (package:google_sign_in/google_sign_in.dart:235:30)
E/flutter (12401): <asynchronous suspension>
E/flutter (12401): #4      GoogleSignIn.signIn.isCanceled (package:google_sign_in/google_sign_in.dart)
E/flutter (12401): <asynchronous suspension>
E/flutter (12401): 

我是这样设置的。

GCP OAuth

Firebase setting - I filled all blanks

我不知道该区域必须是哪个clientId。

which clientId has to be on this area?

I got 4 clientId because I already used google clientId to make django web login with google

【问题讨论】:

  • 我认为answer 会有所帮助。
  • 谢谢你让我试试这个方法。然后我需要获取所有 3 个 sha-1 密钥并设置在我的火力基础上,对吗?
  • 是的,三个键都需要。
  • 我只在调试模式下运行这个应用程序。没关系?

标签: firebase flutter sha1 google-login


【解决方案1】:

我粘贴了你的代码,但我遇到了同样的问题

    E/flutter (11108): [ERROR:flutter/lib/ui/ui_dart_state.cc(209)] Unhandled Exception: PlatformException(sign_in_failed, com.google.android.gms.common.api.ApiException: 10: , null, null)
E/flutter (11108): #0      StandardMethodCodec.decodeEnvelope (package:flutter/src/services/message_codecs.dart:607:7)
E/flutter (11108): #1      MethodChannel._invokeMethod (package:flutter/src/services/platform_channel.dart:156:18)
E/flutter (11108): <asynchronous suspension>
E/flutter (11108): #2      MethodChannel.invokeMapMethod (package:flutter/src/services/platform_channel.dart:356:43)
E/flutter (11108): <asynchronous suspension>
E/flutter (11108): #3      GoogleSignIn._callMethod (package:google_sign_in/google_sign_in.dart:235:30)
E/flutter (11108): <asynchronous suspension>
E/flutter (11108): #4      GoogleSignIn.signIn.isCanceled (package:google_sign_in/google_sign_in.dart)
E/flutter (11108): <asynchronous suspension>
E/flutter (11108): 

这是我的代码

import 'dart:io';
import 'dart:async';
import 'dart:convert' show json;
import 'package:firebase_auth/firebase_auth.dart';
import "package:http/http.dart" as http;

import 'package:billim/base/home_page.dart';
import 'package:billim/user/login_result.dart';
import 'package:flutter/material.dart';
import 'package:flutter/cupertino.dart';

// 카카오 로그인
import 'package:kakao_flutter_sdk/auth.dart';
import 'package:kakao_flutter_sdk/user.dart';
import 'package:kakao_flutter_sdk/common.dart';

// 네이버 로그인
import 'package:flutter/services.dart';
import 'package:flutter_naver_login/flutter_naver_login.dart';
import 'package:google_sign_in/google_sign_in.dart';

import 'package:webview_flutter/webview_flutter.dart';

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

class LoginScreen extends StatefulWidget {
  LoginScreen({Key? key}) : super(key: key);

  @override
  _LoginScreenState createState() => _LoginScreenState();
}

class _LoginScreenState extends State<LoginScreen> {
  List<String> loginIcon = [
    'http://static.billim.co.kr/icons/login_icon_1.png',
    "http://static.billim.co.kr/icons/login_icon_2.png",
    "http://static.billim.co.kr/icons/login_icon_3.png",
  ];

......

Widget _buildBody() {

.......
    Row(
      mainAxisAlignment: MainAxisAlignment.center,
      children: List<Widget>.generate(loginIcon.length, (idx) {
          return Padding(
              padding: const EdgeInsets.symmetric(horizontal: 10.0),
                child: SizedBox(
                  width: 60.0,
                  height: 60.0,
                  child: IconButton(
                    onPressed: () {
                      if(idx == 0) {
                        buttonLoginPressed();
                      else if(idx == 1) {
                        _loginWithKakao();
                      } else if(idx == 2) {
                      signInwithGoogle();
                      }
                    },
                    icon: Image.network(loginIcon[idx], fit: BoxFit.fill,),
                  ),
                 ),
               );
              },)
            ),
......

Future<String?> signInwithGoogle() async {
    try {
      final GoogleSignInAccount? googleSignInAccount =
      await _googleSignIn.signIn();
      final GoogleSignInAuthentication googleSignInAuthentication =
      await googleSignInAccount!.authentication;
      final AuthCredential credential = GoogleAuthProvider.credential(
        accessToken: googleSignInAuthentication.accessToken,
        idToken: googleSignInAuthentication.idToken,
      );
      await _auth.signInWithCredential(credential);
    } on FirebaseAuthException catch (e) {
      print(e.message);
      throw e;
    }
  }

  Future<void> signOutFromGoogle() async{
    await _googleSignIn.signOut();
    await _auth.signOut();
  }

【讨论】:

  • 启用 Google 登录 Firebase 将您的 SHA 1 密钥添加到 Firebase 项目中
【解决方案2】:

第 1 步: 将此依赖项添加到您的 pubsec 文件中

firebase: ^9.0.2
  firebase_core: ^1.2.1
  firebase_database: ^7.1.0
  firebase_auth: ^1.2.0
  font_awesome_flutter: ^9.0.0
  google_sign_in: ^5.0.3

步骤:2 创建一个新的 dart 文件并粘贴此代码

import 'package:firebase_auth/firebase_auth.dart';
import 'package:google_sign_in/google_sign_in.dart';

class FirebaseService {
  final FirebaseAuth _auth = FirebaseAuth.instance;
  final GoogleSignIn _googleSignIn = GoogleSignIn();

  Future<String?> signInwithGoogle() async {
    try {
      final GoogleSignInAccount? googleSignInAccount =
          await _googleSignIn.signIn();
      final GoogleSignInAuthentication googleSignInAuthentication =
          await googleSignInAccount!.authentication;
      final AuthCredential credential = GoogleAuthProvider.credential(
        accessToken: googleSignInAuthentication.accessToken,
        idToken: googleSignInAuthentication.idToken,
      );
      await _auth.signInWithCredential(credential);
    } on FirebaseAuthException catch (e) {
      print(e.message);
      throw e;
    }
  }

  Future<void> signOutFromGoogle() async{
    await _googleSignIn.signOut();
    await _auth.signOut();
  }
}

第 3 步: 使用谷歌功能调用登录:

在 Firebase 中启用 Google 登录 将您的 SHA 1 密钥添加到 Firebase 项目中

【讨论】:

  • 谢谢我试过这种方式。但我仍然遇到同样的问题。我在答案下发布我的代码。请检查这个。
  • 我用你的代码解决了这个问题。我确实扑腾干净,然后它起作用了
猜你喜欢
  • 2019-10-01
  • 2020-04-29
  • 2019-11-24
  • 2020-01-06
  • 2022-11-02
  • 2019-10-04
  • 2019-11-29
  • 2021-06-25
  • 2021-12-12
相关资源
最近更新 更多