Firebase flatter和谷歌登录插件:PlatformException(登录失败,com.google.android.gms.common.api.apieexception:10:,null)

Firebase flatter和谷歌登录插件:PlatformException(登录失败,com.google.android.gms.common.api.apieexception:10:,null),firebase,flutter,dart,firebase-authentication,google-signin,Firebase,Flutter,Dart,Firebase Authentication,Google Signin,凭证的对话框(Google表单)已成功打开,但在填写凭证后,出现此错误。我按照老师的指示去做。创建了一个Firebase项目,从GoogleAPI控制台启用了GoogleDriveAPI(这就是我现在需要的) 引发异常的代码: final GoogleSignIn _googleSignIn = GoogleSignIn( scopes: [ 'https://www.googleapis.com/auth/drive', ], ); await _googleSignIn.s

凭证的对话框(Google表单)已成功打开,但在填写凭证后,出现此错误。我按照老师的指示去做。创建了一个Firebase项目,从GoogleAPI控制台启用了GoogleDriveAPI(这就是我现在需要的)

引发异常的代码:

final GoogleSignIn _googleSignIn = GoogleSignIn(
  scopes: [
    'https://www.googleapis.com/auth/drive',
  ],
);

await _googleSignIn.signIn();
这是堆栈跟踪:

E/flutter ( 5068): [ERROR:flutter/shell/common/shell.cc(184)] Dart Error: Unhandled exception:
E/flutter ( 5068): PlatformException(sign_in_failed, com.google.android.gms.common.api.ApiException: 10: , null)
E/flutter ( 5068): #0      StandardMethodCodec.decodeEnvelope (package:flutter/src/services/message_codecs.dart:551:7)
E/flutter ( 5068): #1      MethodChannel.invokeMethod (package:flutter/src/services/platform_channel.dart:292:18)
E/flutter ( 5068): <asynchronous suspension>
E/flutter ( 5068): #2      GoogleSignIn._callMethod (package:google_sign_in/google_sign_in.dart:226:58)
E/flutter ( 5068): <asynchronous suspension>
E/flutter ( 5068): #3      GoogleSignIn._addMethodCall (package:google_sign_in/google_sign_in.dart:268:20)
E/flutter ( 5068): #4      GoogleSignIn.signIn (package:google_sign_in/google_sign_in.dart:339:48)
E/flutter ( 5068): #5      ThatsMyComponentState.theSignInFuction.<anonymous closure> (package:my_app/widgets/my_file.dart:666:45)
E/flutter ( 5068): <asynchronous suspension>
E/flutter ( 5068): #6      _InkResponseState._handleTap (package:flutter/src/material/ink_well.dart:507:14)
E/flutter ( 5068): #7      _InkResponseState.build.<anonymous closure> (package:flutter/src/material/ink_well.dart:562:30)
E/flutter ( 5068): #8      GestureRecognizer.invokeCallback (package:flutter/src/gestures/recognizer.dart:102:24)
E/flutter ( 5068): #9      TapGestureRecognizer._checkUp (package:flutter/src/gestures/tap.dart:242:9)
E/flutter ( 5068): #10     TapGestureRecognizer.acceptGesture (package:flutter/src/gestures/tap.dart:204:7)
E/flutter ( 5068): #11     GestureArenaManager.sweep (package:flutter/src/gestures/arena.dart:156:27)
E/flutter ( 5068): #12     _WidgetsFlutterBinding&BindingBase&GestureBinding.handleEvent (package:flutter/src/gestures/binding.dart:184:20)
E/flutter ( 5068): #13     _WidgetsFlutterBinding&BindingBase&GestureBinding.dispatchEvent (package:flutter/src/gestures/binding.dart:158:22)
E/flutter ( 5068): #14     _WidgetsFlutterBinding&BindingBase&GestureBinding._handlePointerEvent (package:flutter/src/gestures/binding.dart:138:7)
E/flutter ( 5068): #15     _WidgetsFlutterBinding&BindingBase&GestureBinding._flushPointerEventQueue (package:flutter/src/gestures/binding.dart:101:7)
E/flutter ( 5068): #16     _WidgetsFlutterBinding&BindingBase&GestureBinding._handlePointerDataPacket (package:flutter/src/gestures/binding.dart:85:7)
E/flutter ( 5068): #17     _invoke1 (dart:ui/hooks.dart:168:13)
E/flutter ( 5068): #18     _dispatchPointerDataPacket (dart:ui/hooks.dart:122:5)

任何帮助都将不胜感激。谢谢

android/app/build.gradle中,我将依赖项从com.android.tools.build:gradle:3.1.3/com.google.gms:google services:3.2.1更改为com.android.tools.build:gradle:3.2.1/com.google.gms:google services:4.2.0。它成功了。

我刚才遇到了同样的问题。如果您正在运行调试,并且没有在firebase中注册
SHA
指纹,则可能会发生这种情况。 我通过生成一个
debug.keystore
并在Firebase上的应用程序中注册来解决这个问题。别忘了在那之后下载新的
googleservices.json
。 另见

编辑 如果无法在发布模式下使用身份验证,请尝试以下操作:

buildscript {
    repositories {
        google()
        jcenter()
    }

    dependencies {
        classpath 'com.android.tools.build:gradle:3.5.1'
        classpath 'com.google.gms:google-services:4.2.0'
    }
}
debug.keystore
debug.keystore.lock
-添加释放密钥的SHA证书指纹

keytool-exportcert-list-v\
-别名-密钥库

有关这方面的更多详细信息,请参见此处的“获取发布证书”部分

如果您的身份验证仍然不起作用,可能是因为您从Playstore下载了应用程序,并启用了“应用程序通过Google Play签名功能” 对于这种情况,请转到play store publish console,然后转到release management下的应用程序签名。在那里,您将找到要在Firebase控制台中注册的SHA证书指纹


为了让google\u登录正常工作,您可能需要采取其他步骤:

  • 链接GooglePlay与Firebase[()

  • 如果您可以在调试期间运行Google登录,但不能在发行版中运行,则很有可能您没有将发行版密钥的SHA1和SHA256添加到firebase。 要获取释放密钥的SHA,请使用
    keytool-list-v-keystore~/key.jks-alias key
您最终应至少拥有6个SHA凭据:2个来自调试键,2个来自Google Play链接,2个来自release键。请注意,将release SHA凭据添加到firebase后,您不需要重新下载Google-services.json文件

  • 添加GooglePlay Proguard规则

当我遇到这个问题时,我尝试了这篇文章中描述的所有其他解决方案。这些都不起作用。最终我发现:在我的情况下,我必须确保设置“支持电子邮件”


在Firebase中注册应用程序时,我将我的applicationId更改为适合我的应用程序的内容。但是,这导致在我运行调试器时在手机上安装了第二个颤振应用程序(当然,由于applicationId的更改)因此,对我的情况起作用的是
删除安装并
重新安装应用程序。

对于我来说,我不需要添加额外的SHA,我意识到我没有在Firebase控制台的身份验证选项卡中启用谷歌登录方法


我尝试了以上所有方法,但都没有效果。
我的错误是,我的驱动器中有多个android studio版本文件夹,并且在firebase设置中输入了错误的SHA1键。

您可能遇到此错误的一个原因是您没有填写google的OAuth同意书。这是对firebase的新更改

以下是填写应用程序同意书所需遵循的步骤:

  • 导航到google api控制台(当前位于),确保您已登录到创建firebase项目的帐户
  • 从开发人员控制台左上角的“选择项目”下拉列表中选择您的项目
  • 在左侧窗格中,转到“凭据”,然后切换到“OAuth同意屏幕”
  • 在“应用程序名称”下输入应用程序的公共名称
  • 在“应用程序徽标”下,上载应用程序的本地图像文件
  • 在“支持电子邮件”下,输入firebase应用程序中列出的相同支持电子邮件
  • 向下滚动并填写“应用程序主页链接”、“应用程序隐私政策链接”和“应用程序服务条款链接”,方法是在firebase应用程序所在的授权域之前添加http://
  • 单击保存

  • 这些步骤对我很有效!虽然链接可能不存在,但我想引用此解决方案的来源

    以下解决方案适用于颤振项目:

    步骤1:生成SHA1SHA256键。
    步骤2:将SHA1和SH256添加到firebase。(在应用程序设置中)
    步骤3:将google services.json下载到项目文件夹中的android/app
    步骤4:在终端中运行命令
    flatterclean

    步骤5:运行你的颤振应用程序。

    有关更多信息,请访问:


    在Firebase控制台中注册SHA1后,所有人都会错过这一块!确保SHA-1必须是仅在系统中生成的调试密钥,然后下载google-services.json文件并将其附加到项目中

    确保已添加

     dependencies {
        classpath 'com.google.gms:google-services:4.2.0'
    }
    
    在android/build.gradle和

    apply plugin: 'com.google.gms.google-services'
    
    android/app/build.gradle中,确保android/app/build.gradle中的applicationId与AndroidManifest.xml中的包名相同(更改后可能会忘记更改applicationId)
    buildscript {
        repositories {
            google()
            jcenter()
        }
    
        dependencies {
            classpath 'com.android.tools.build:gradle:3.5.1'
            classpath 'com.google.gms:google-services:4.2.0'
        }
    }
    
    android.useAndroidX=true
    android.enableJetifier=true
    
    debug.keystore
    debug.keystore.lock
    
    $ keytool -genkey -v -keystore debug.keystore -storepass android -alias androiddebugkey -keypass android -keyalg RSA -keysize 2048 -validity 10000
    
    $ keytool -list -v -keystore debug.keystore -alias androiddebugkey -storepass android -keypass android 
    
    <key>CFBundleURLTypes</key>
    <array>
        <dict>
            <key>CFBundleTypeRole</key>
            <string>Editor</string>
            <key>CFBundleURLSchemes</key>
            <array>
                <string>**INSERT HERE YOUR RESERVED_CLIENT_ID FROM GoogleService-Info.plist**</string>
            </array>
        </dict>
    </array>
    
    gradlew signingReport
    
    ./gradlew signingReport