Flutter和google_sign_in插件:PlatformException(sign_in_failed,com.google.android.gms.common.api.ApiException:10:,null)

Boy*_*rov 27 google-signin flutter

凭证对话框(Google表单)已成功打开,但是在填写凭证后出现此错误。我遵循了这里的指示。创建了一个Firebase项目,并从Google API控制台启用了Google Drive API(现在是我现在所需要的)。

代码抛出异常:

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

await _googleSignIn.signIn();
Run Code Online (Sandbox Code Playgroud)

那是堆栈跟踪:

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)
Run Code Online (Sandbox Code Playgroud)

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.
Run Code Online (Sandbox Code Playgroud)

任何帮助都感激不尽。谢谢!

Kyl*_*ppe 54

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

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
Run Code Online (Sandbox Code Playgroud)

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

./gradlew signingReport
Run Code Online (Sandbox Code Playgroud)

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

在此处输入图片说明

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

  • 如果步骤 4 不起作用,请像这样调用 gradlew: ./gradlewSigningReport (4认同)
  • 最好的答案。完美的。 (4认同)
  • 插话说这也是唯一对我有用的事情。尝试了其他所有方法并花了几天时间尝试解决问题,然后才发现这个问题。 (3认同)
  • 这是最简单的方法!这应该被接受。 (3认同)
  • 对我来说,这是唯一有效的方法,我的 keytool 生成的 SHA-1 / SHA-256 不起作用 (2认同)
  • 是的,有效,谢谢。顺便说一句,如果您遇到堆内存错误,请尝试: `-XX:MaxHeapSize=256m -Xmx1536M` (2认同)

Mat*_*ini 52

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

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

安卓版

  1. 在颤振项目中打开终端
  2. cd android
  3. ./gradlew signingReport 或者 gradlew 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>
Run Code Online (Sandbox Code Playgroud)

  • gradlew签名报告对我帮助很大,因为我首先使用了错误的密钥库。通过该命令,您绝对会得到正确的命令。 (4认同)

TSR*_*TSR 30

我刚才遇到了同样的问题。如果您在调试中运行并且在Firebase中注册Sha指纹,则可能会发生这种情况。我通过生成一个debug.keystore并在Firebase上的应用程序中注册了它来解决了它。之后不要忘记下载新的google-services.json。另请参阅https://developers.google.com/android/guides/client-auth

在此处输入图片说明

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

-添加释放密钥的SHA证书指纹。

keytool -exportcert -list -v \
-alias <your-key-name> -keystore <path-to-production-keystore>
Run Code Online (Sandbox Code Playgroud)

有关此内容的更多详细信息,请参见此处"get release certificate" https://developers.google.com/android/guides/client-auth

如果您的身份验证仍然不起作用,可能是因为您从Playstore下载了该应用程序,并且启用了 “通过Google Play功能进行应用程序签名” 。在这种情况下,请转到Play商店发布控制台,然后在发布管理下转到应用程序签名。在那里,您会找到要在Firebase控制台中注册的SHA证书指纹。

在此处输入图片说明

  • 您的编辑链接到“如果您使用 Play App Signing(使用 Android App Bundle 时的要求)发布了您的应用程序,您可以从 Google Play Console 的发布 &gt; 设置 &gt; 应用程序完整性页面获取您的 SHA-1”救了我!谢谢你! (10认同)
  • 谢谢你 这有帮助。值得一提的是,必须同时添加SHA1和SHA256密钥才能使身份验证正常工作 (8认同)
  • 仅供参考,即使在配置了我的 sha 指纹后,我也遇到了同样的错误。结果我还必须为每个 https://github.com/flutter/flutter/issues/25909#issuecomment-497378619 添加一个支持电子邮件地址。 (6认同)
  • 接受这个作为答案。 (3认同)
  • @TSR 这有效,但我不必下载新的 google-services.json。 (3认同)

fun*_*983 16

为了让 google_sign_in 工作,您可能需要采取其他步骤:

][2]

  • 如果您可以在调试期间运行 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.**
Run Code Online (Sandbox Code Playgroud)


Joh*_*ers 15

当我遇到此问题时,我尝试了本文中介绍的所有其他解决方案。这些都不起作用。最终,我弄清楚了:在我的情况下,我必须确保设置“支持电子邮件”。

公共设置支持电子邮件


小智 15

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

在 Firebase 控制台中启用谷歌登录方法


Bal*_*des 10

早期给出的答案是正确的。它们都不是假的。但如果您仍然面临该错误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-1,并已从您的 firebase 控制台项目package id email support下载。google service json


小智 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在您计算机上项目的本地文件夹中运行。

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

我希望这可以帮助某人。


Rab*_*han 8

以下解决方案在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

  • 清洁非常重要 (16认同)

小智 8

如果您发布的应用无法正常运行,并且您使用的是 Google Play 签名,请从您的 Play 商店帐户复制 SHA,您本地密钥中的那个将无法正常工作 在此处输入图片说明


小智 7

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

以下是填写应用同意书时需要遵循的步骤:

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

您的屏幕现在应该与第 6 步中的示例类似

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

以下是如何在步骤 7 中填写这些区域的突出示例

  1. 单击“保存”

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

  • 如果您到达这里,为了您的精神理智,请勿在 oauth 屏幕同意中添加徽标。它不是必需的,它会触发验证。 (5认同)

Rog*_*mao 7

“Flutter clean”是在 Firebase 控制台中注册 SHA1 后每个人都缺少的部分!


Sen*_*kha 7

您错过了在 firebase 上启用谷歌登录的配置步骤。

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

? 只需完成以下这些足够的步骤

  1. 启用谷歌身份验证方法
  2. 在当前项目中配置证书指纹project-level setting如何生成证书
  3. 项目支持电子邮件选择电子邮件
  4. 下载google-service.json到您的项目中。
  5. flutter clean
  6. 开始 flutter run

图片


Sac*_*hin 5

确保您已添加

 dependencies {
    classpath 'com.google.gms:google-services:4.2.0'
}
Run Code Online (Sandbox Code Playgroud)

在 android/build.gradle 和

apply plugin: 'com.google.gms.google-services'
Run Code Online (Sandbox Code Playgroud)

android/app/build.gradle中。另外,请确保android/app/build.gradle中的 applicationId 与AndroidManifest.xml中的包名称相同(有时更改包名称后您可能会忘记更改 applicationId)。清单文件中的此 applicationId 或包名称应该是 firebase 应用程序中的 android 包名称。


小智 5

对于平台异常 10,请尝试以下操作:

  1. 在您的机器上生成新的 SHA1 指纹,
  2. 转到 Firebase 控制台中的 Firebase Android 应用程序设置
  3. 单击 Android 应用程序设置中的“添加新指纹”
  4. 将新的 SHA1 指纹粘贴到字段中
  5. 生成新的 json 配置文件
  6. 替换android目录下的config文件
  7. 运行 flutter 干净
  8. 运行你的项目


Boy*_*rov 0

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。它奏效了。