【问题标题】:Flutter and google_sign_in plugin: PlatformException(sign_in_failed, com.google.android.gms.common.api.ApiException: 10: , null)Flutter 和 google_sign_in 插件:PlatformException(sign_in_failed, com.google.android.gms.common.api.ApiException: 10: , null)
【发布时间】:2019-06-30 15:12:31
【问题描述】:

凭据的对话框(Google 表单)已成功打开,但在我填写凭据后出现此错误。我按照here 的说明进行操作。创建了一个 Firebase 项目,从 Google API 控制台启用了 Google Drive API(这就是我现在需要的)。

抛出异常的代码:

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)

google_sign_in插件的版本是4.0.0。

这是 flutter doctot -v 的输出:

[√] Flutter (Channel stable, v1.0.0, on Microsoft Windows [Version 10.0.17763.253], locale en-US)
• Flutter version 1.0.0 at C:\src\flutter-0.7.3\flutter
• Framework revision 5391447fae (10 weeks ago), 2018-11-29 19:41:26 -0800
• Engine revision 7375a0f414
• Dart version 2.1.0 (build 2.1.0-dev.9.4 f9ebf21297)

[√] Android toolchain - develop for Android devices (Android SDK 28.0.3)
• Android SDK at C:\Users\myuser\AppData\Local\Android\Sdk
• Android NDK location not configured (optional; useful for native profiling support)
• Platform android-28, build-tools 28.0.3
• ANDROID_HOME = C:\Users\myuser\AppData\Local\Android\Sdk
• Java binary at: C:\Program Files\Android\Android Studio\jre\bin\java
• Java version OpenJDK Runtime Environment (build 1.8.0_152-release-1248-b01)
• All Android licenses accepted.

[√] Android Studio (version 3.3)
• Android Studio at C:\Program Files\Android\Android Studio
• Flutter plugin version 32.0.1
• Dart plugin version 182.5124
• Java version OpenJDK Runtime Environment (build 1.8.0_152-release-1248-b01)

[!] IntelliJ IDEA Community Edition (version 2018.1)
• IntelliJ at C:\Program Files\JetBrains\IntelliJ IDEA Community Edition 2018.1.6
X Flutter plugin not installed; this adds Flutter specific functionality.
X Dart plugin not installed; this adds Dart specific functionality.
• For information about installing plugins, see
  https://flutter.io/intellij-setup/#installing-the-plugins

[!] VS Code, 64-bit edition (version 1.30.2)
• VS Code at C:\Program Files\Microsoft VS Code
• Flutter extension not installed; install from
  https://marketplace.visualstudio.com/items?itemName=Dart-Code.flutter

[√] Connected device (1 available)
• Android SDK built for x86 • emulator-5554 • android-x86 • Android 8.1.0 (API 27) (emulator)

! Doctor found issues in 2 categories.

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

【问题讨论】:

  • 致所有人:注意异常代码 ApiException: 10 并首先参考文档 - developers.google.com/android/reference/com/google/android/gms/… 确保您正在解决正确的问题。例如,代码 7 仅表示“没有互联网连接”。
  • 运行./gradlew signingReport,它在app Android文件夹下。在 google Firebase Google 登录配置中添加 SHA1。 developers.google.com/android/guides/client-auth 。您工作的每台计算机都需要一个 SHA1。
  • @KirillKarmazin 知道 12500 是什么吗? E/flutter (23795): [错误:flutter/lib/ui/ui_dart_state.cc(157)] 未处理异常: PlatformException(sign_in_failed, com.google.android.gms.common.api.ApiException: 12500: , null)

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


【解决方案1】:

我刚才遇到了同样的问题。如果您在调试中运行并且您确实在 firebase 中注册 SHA 指纹,则可能会发生这种情况。 我通过生成debug.keystore 并在 Firebase 上的应用程序中注册它来解决它。之后不要忘记下载新的google-services.json。 另见this

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

-添加发布密钥的SHA证书指纹。

keytool -exportcert -list -v \ -alias <your-key-name> -keystore <path-to-production-keystore>

有关详细信息,请参阅"get release certificate"https://developers.google.com/android/guides/client-auth 部分的此处

如果您的身份验证仍然无效,可能是因为您从 Playstore 下载了该应用并启用了“Google Play 应用签名功能” 然后对于这种情况,去玩商店发布控制台,然后去发布管理下的应用签名。在那里,您将找到要在 Firebase 控制台中注册的 SHA 证书指纹。

【讨论】:

  • 谢谢。这有帮助。值得注意的是,必须添加 SHA1 和 SHA256 密钥才能使身份验证工作
  • 接受这个作为答案。
  • @TSR 这行得通,但我不必下载新的 google-services.json。
  • 仅供参考,即使在配置了我的 sha 指纹后,我也遇到了同样的错误。事实证明,我还必须为每个 github.com/flutter/flutter/issues/25909#issuecomment-497378619 添加一个支持电子邮件地址。
  • 您的编辑链接到“如果您使用 Play App Signing 发布了您的应用,这是使用 Android App Bundle 时的要求,您可以从 Google Play Console 的 Release > Setup 获取您的 SHA-1 > 应用程序完整性页面”救了我!谢谢!
【解决方案2】:

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

第 1 步:生成 SHA1SHA256 密钥。
第 2 步:将 SHA1 和 SHA256 添加到 Firebase。 (在您的应用设置中)
第 3 步:将 google-services.json 下载到您的项目文件夹中的 android/app
第 4 步:在您的终端中运行命令 flutter clean
第 5 步:运行您的 Flutter 应用。

欲了解更多信息,请访问:
https://developers.google.com/android/guides/client-auth
https://firebase.google.com/docs/flutter/setup

【讨论】:

  • 清洁很重要
  • 这是正确的解决方案。此外,如果 Firebase 包名和项目包名(路径)不匹配,您仍然会收到此错误代码:10。
【解决方案3】:

我花了很长时间试图解决这个问题。

1.打开grade.properties 该文件位于:{{YOUR PROJECT}}/android/gradle.properties

2。如屏幕截图所示,将以下参数添加到“org.gradle.jvmargs”。

-XX:MaxHeapSize=256m -Xmx256m

3.右键单击“gradlew”并转到“在终端中打开” 此文件位于 {{YOUR PROJECT}}/android/gradlew

4.输入以下命令。

gradlew signingReport

如果不起作用,请先尝试第二个命令:

./gradlew signingReport

5.等待编译完成,您的 SHA 密钥应该会打印出来。

使用这些密钥在https://console.firebase.google.com/ 中验证您的应用

【讨论】:

  • 对我来说这是唯一有效的方法,我的 keytool 生成的 SHA-1 / SHA-256 无效
  • 如果第 4 步不起作用,请像这样调用 gradlew:./gradlew signingReport
  • 插话说这也是唯一对我有用的东西。尝试了其他所有方法并花了几天时间尝试解决问题,然后才找到它。
  • 这是最简单的方法!这应该被接受。
  • 最佳答案。完美。
【解决方案4】:

打开 Firebase 控制台并点击设置图标。

您将看到连接到您的 Firebase 项目的应用列表

适用于安卓

  1. 在你的 Flutter 项目中打开终端
  2. cd android
  3. ./gradlew signingReportgradlew signingReport
  4. 粘贴您的 SHA1 密钥
  5. 下载并替换google-services.json
  6. flutter clean

IOS:

  1. 配置您的 Firebase 项目
  2. 选择IOS
  3. 输入您的捆绑包 ID
  4. 下载凭据
  5. 下载替换GoogleService-info.plist

将此添加到您的 info.plist

<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 对我帮助很大,因为我首先使用了错误的密钥库。使用该命令,您肯定会得到正确的命令。
【解决方案5】:

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

【讨论】:

    【解决方案6】:

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

    【讨论】:

      【解决方案7】:

      您可能需要采取其他步骤才能使 google_sign_in 正常工作:

      • 如果您可以在调试期间运行 Google 登录但在发布时无法运行,则很有可能您没有将发布密钥的 SHA1 和 SHA256 添加到 Firebase。 要获取发布密钥的 SHA,请使用 keytool -list -v -keystore ~/key.jks -alias key

      您最终应该得到至少 6 个 SHA 凭据:2 个来自调试密钥,2 个来自 Google Play 链接,2 个来自发布密钥。请注意,将发布 SHA 凭据添加到 firebase 后,您无需重新下载 google-services.json 文件。

      # Flutter Wrapper
      -keep class io.flutter.app.** { *; }
      -keep class io.flutter.plugin.**  { *; }
      -keep class io.flutter.util.**  { *; }
      -keep class io.flutter.view.**  { *; }
      -keep class io.flutter.**  { *; }
      -keep class io.flutter.plugins.**  { *; }
      
      # GooglePlay Services
      -keep class com.google.android.gms.** { *; }
      -dontwarn com.google.android.gms.**
      -keep class com.google.common.** { *; }
      -dontwarn com.google.common.**
      

      【讨论】:

      • 你拯救了我的一天!
      【解决方案8】:

      如果您发布的应用无法正常运行,并且您正在使用 Google Play 签名,从您的 Play 商店帐户中复制 SHA,则本地密钥中的 SHA 将无法使用

      【讨论】:

      • 谢谢!这是将我的应用程序投入生产所缺少的重要步骤,这让我反复试验了几个小时。这里的其他解决方案仅适用于构建调试版本。
      【解决方案9】:

      我找到了错误 com.google.android.gms.common.api.ApiException: 10 的解决方案:我通过向 firebase 添加更多密钥来解决它。一开始我觉得它很愚蠢,没用,后来证明是解决方案(我加了10个SHA,如果很多也别担心)。

      1. 我在哪里找到了所有这些密钥?

      我通过进入android文件夹并输入命令./gradlew signingReport找到了所有这些键(我使用linux,它也适用于mac。对于windows,命令是gradlew signingReport

      1. 在那之后?

      之后,他在我的终端上打印了一个很长的键列表,我取出了所有不同的,位于列表顶部的键。

      注意:您将获得应用程序每个包的所有密钥(调试和发布),但请放心,所有这些包都是相同的,并且仅用于调试(因此您必须使用这些相同的密钥只有一次)

      1. 终于

      获得所有应用密钥后,转到项目的 Firebase 设置,向下滚动并添加您找到的所有密钥。 之后,您需要再次下载google-services.json 文件并在您计算机上项目的本地文件夹中运行flutter clean

      现在您可以构建您的应用并查看它是否有效!

      我希望这可以帮助某人。

      【讨论】:

      • 感谢您的评论。我终于能够解决它。 :)
      【解决方案10】:

      “Flutter clean”是大家在 Firebase 控制台注册 SHA1 后缺少的部分!

      【讨论】:

        【解决方案11】:

        您错过了在 Firebase 上启用 google 登录的配置步骤。

        Google 登录会在您连接的 iOS 和网络应用程序上自动配置。要为您的 Android 应用设置 Google 登录,您需要在项目设置中为每个应用添加 SHA1 指纹。

        只需完成以下足够的步骤

        1. 启用 Google 身份验证方法
        2. project-level setting 的当前项目中配置证书指纹How to Generate certificate
        3. 项目支持电子邮件选择电子邮件
        4. google-service.json 下载到您的项目中。
        5. 运行flutter clean
        6. 开始flutter run

        【讨论】:

          【解决方案12】:

          对于平台异常 10,试试这个:

          1. 在您的机器上生成新的 SHA1 指纹,
          2. 在 Firebase 控制台中转到您的 Firebase android 应用设置
          3. 在您的安卓应用设置中点击添加新指纹
          4. 将新的 SHA1 指纹粘贴到字段中
          5. 生成新的 json 配置文件
          6. 替换android目录下的配置文件
          7. 运行 flutter clean
          8. 运行您的项目

          【讨论】:

            【解决方案13】:

            早先给出的答案是正确的。它们都不是假的。但是,如果您仍然面临错误PlatformException(sign_in_failed, com.google.android.gms.common.api.ApiException: 10: , null)。您应该检查的一件事是您的OAuth 2.0 Client IDs

            1. 转至:https://console.cloud.google.com/apis/credentials
            2. 在屏幕左上角选择您的项目
            3. 根据您的平台(iOS 或 Android)创建客户端 ID
            4. 只需按照以下步骤操作

            成功生成客户端 ID 后,您的应用程序将按预期运行。

            --- 注意---

            但首先,请确保您已注册您的 SHA-1package id email support 并已从您的 firebase 控制台项目下载 google service json

            【讨论】:

              【解决方案14】:

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

              您需要按照以下步骤填写应用同意书:

              1. 导航到 google api 控制台(当前位于 https://console.developers.google.com),确保您已登录到创建 Firebase 项目的帐户。
              2. 从开发者控制台左上角的“选择项目”下拉菜单中选择您的项目。
              3. 在左侧窗格中转到“凭据”,然后切换到“OAuth 同意屏幕”。
              4. 在“应用程序名称”下输入您的应用程序的公开名称
              5. 在“应用程序徽标”下上传应用程序的本地图像文件
              6. 在“支持电子邮件”下输入您的 Firebase 应用程序中列出的同一支持电子邮件。

              Your screen should now look like this example by step 6

              1. 向下滚动并填写“应用程序主页链接”、“应用程序隐私政策链接”和“应用程序服务条款链接”,方法是在您的 Firebase 授权域前添加 http://应用程序。

              Here is a highlighted example of how these regions should be filled out in step 7

              1. 点击保存

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

              【讨论】:

              • 这真的是问题的答案吗?
              • 感谢您的反馈。我试图更新我的答案以更具体 - 请让我知道它现在是否合适 - 如果不合适,我该如何改进它。
              • 您需要“提交验证”,还是只需“保存”?
              • 如果您来到这里,为了您的理智,不要在 oauth 屏幕同意中添加徽标。这不是必需的,它会触发验证。
              【解决方案15】:

              这可能看起来很愚蠢,但这只是发生在我身上(在过去有一些使用 firebase 的经验之后)。 我注意到我没有启用 Google 身份验证。请务必启用,因为您可能仍会看到登录提示(显示您手机的 google 用户,但未启用)。

              【讨论】:

              • 我在哪里启用thant?
              • @AhmedAlbarody 在您的 Firebase 控制台中 - 选择身份验证,然后您需要启用要使用的服务。
              【解决方案16】:

              当我重新安装我的操作系统时,这也发生在我身上。 只需运行./gradlew signingReport并将 SHA-1 和 SHA-256 复制到 Firebase 配置“添加指纹”

              【讨论】:

              • 也解决了我的问题
              【解决方案17】:

              确保你已经添加了

               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 )。清单文件中的这个 applicationId 或包名称应该是 您在 firebase 应用中的 android 软件包名称。

              【讨论】:

                【解决方案18】:

                您应该为您使用的每台电脑生成 SHA-1 和 SHA-256。并将它们全部添加到 firebase 项目设置中。

                你应该在OAuth Consent标签中填写表格。

                【讨论】:

                  【解决方案19】:

                  确保 SHA-1 必须是仅在您的系统中生成的调试密钥,然后下载 google-services.json 文件并将其附加到您的项目中

                  【讨论】:

                    【解决方案20】:

                    我遇到了这个问题,花了 5 个小时才解决。我记得我在某处读到 API Exception 10 表示指纹存在问题。因此,它必须是密钥库或 Firebase 中的错误配置。最终,它是密钥库。我仍然不确定为什么会这样,但这就是我所做的,顺便说一下,我使用的是 Windows 10:

                    1.) 确保在文件 android/build.gradle 我有以下内容:

                    buildscript {
                        repositories {
                            google()
                            jcenter()
                        }
                    
                        dependencies {
                            classpath 'com.android.tools.build:gradle:3.5.1'
                            classpath 'com.google.gms:google-services:4.2.0'
                        }
                    }
                    

                    2.) 我将这两行添加到文件 android/gradle.properties

                    android.useAndroidX=true
                    android.enableJetifier=true
                    

                    3.) 导航到 C:\Users\YOURUSER\.android 并删除以下内容:

                    debug.keystore
                    debug.keystore.lock
                    

                    4.) 以管理员身份打开终端,并在此目录下生成调试密钥库。

                    $ 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 
                    

                    5.) 将 SHA1 指纹添加到 firebase 的配置中

                    这就是我的结局。我希望它可以帮助某人。

                    【讨论】:

                    • 以上所有方法均无效,但确实有效...非常感谢!
                    【解决方案21】:

                    请确保您这样做:

                    【讨论】:

                      【解决方案22】:

                      如果它以前可以工作,但现在使用的是另一台 PC,则您需要将由该 PC 生成的新 SHA-1/SHA-256 指纹添加到您在 Firebase 中的项目中。一个很好的分步示例:https://stackoverflow.com/a/56091158/5365164

                      【讨论】:

                        【解决方案23】:

                        但是,上面给出的答案是正确的,但是,如果您遇到问题,请不要忘记验证 app/build.gradle 的 signingConfig {} 部分。它不应该有任何不需要的密钥库文件引用,这可能会导致与 google-services.json 和密钥库不匹配。

                        【讨论】:

                          【解决方案24】:

                          在我的情况下,这是一个愚蠢的错误,请确保您在 firebase 中的 applicationId 像:'com.example.appname' 与您的 app/src/build.gradle 文件中的 applicationId 完全匹配,在 defaultConfig{} 下。没有拼写错误,没有大写,小写字母冲突。在我的情况下,一个字母是大写字母,导致所有问题。

                          【讨论】:

                            【解决方案25】:

                            连同其他人建议的步骤 跑步 ./gradlew clean 为我工作。

                            【讨论】:

                              【解决方案26】:

                              遇到同样的问题。我查看了signingReport,发现发布的SHA1和SHA256和其他的不一样。我在 firebase 中添加了这些值并重新下载了 goggle-services.json。这解决了问题。

                              另外,在构建 apk 之前运行 flutter clean

                              【讨论】:

                                【解决方案27】:

                                我知道这个问题已经有很多回复了,但我还没有看到这个。我通过清理解决了 ApiException: 10!

                                1. https://console.cloud.google.com/apis/credentials 中删除了未使用的 OAuth 2.0 客户端 ID
                                2. 从 Firebase 控制台中删除了未使用的指纹。
                                3. 再次下载 google-services.json

                                【讨论】:

                                • 删除了未使用的指纹并为我解决了更新 google-services.json
                                【解决方案28】:

                                android/app/build.gradle 中,我更改了 com.android.tools.build:gradle:3.1.3/com.google 的依赖项.gms:google-services:3.2.1com.android.tools.build:gradle:3.2.1/com.google.gms:google-services:4.2 .0。它奏效了。

                                【讨论】:

                                  【解决方案29】:

                                  在 Firebase 中注册应用时,我将 applicationId 更改为适合我的应用的内容。然而,当我运行调试器时,这导致我的手机上安装了第二个 Flutter 应用程序(当然,由于 applicationId 的变化)。所以对我的情况有用的是remove 安装和re-install 应用程序。

                                  【讨论】:

                                    【解决方案30】:

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

                                    【讨论】:

                                      猜你喜欢
                                      • 2020-01-06
                                      • 2020-08-15
                                      • 2019-10-04
                                      • 2020-12-30
                                      • 2019-11-29
                                      • 2022-11-02
                                      • 2022-11-07
                                      • 2020-01-31
                                      • 2021-12-12
                                      相关资源
                                      最近更新 更多