已成功打开凭据对话框(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.
任何帮助将不胜感激。谢谢!
答案 0 :(得分:20)
我花了很长时间试图解决这个问题。
1。打开grade.properties 。该文件位于:{{您的项目}} / 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/中验证您的应用
答案 1 :(得分:10)
我刚才遇到了同样的问题。如果您在调试中运行,并且没有不在firebase中注册sha指纹,则可能会发生这种情况。
我通过生成debug.keystore
并将其注册到Firebase上的应用程序中来解决了该问题。之后不要忘记下载新的google-services.json
。
另请参见https://developers.google.com/android/guides/client-auth
答案 2 :(得分:9)
以下解决方案适用于flutter项目:
第1步:生成 SHA1 和 SHA256 键。
步骤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
答案 3 :(得分:7)
您错过了在Firebase上启用Google登录的配置步骤。
已在连接的iOS和网络应用上自动配置Google登录。要为您的Android应用设置Google登录,您需要在“项目设置”中为每个应用添加SHA1指纹。
✅只需在下面完成以下足够的步骤
project-level setting
的当前项目中google-service.json
下载到您的项目中。flutter clean
flutter run
答案 4 :(得分:6)
我找到了错误 com.google.android.gms.common.api.ApiException: 10
的解决方案:我通过向 firebase 添加更多键来解决它。一开始我觉得这很愚蠢而且没用,后来结果证明这是解决方案(我加起来最多 10 个 SHA,如果很多,不要担心)。
我通过进入 android 文件夹并输入命令 ./gradlew signingReport
找到了所有这些键(我使用的是 linux,它也适用于 mac。对于 windows,命令是 gradlew signingReport
)
在那之后,他在我的终端上打印出一长串按键,我把所有不同的都拿了出来,在列表的顶部。
注意:您将获得应用程序每个包的所有密钥(调试和发布),但请放心,所有这些包都是相同的并且仅用于调试(因此您必须使用这些相同的密钥只有一次)
获得所有应用密钥后,转到项目的 Firebase 设置,向下滚动并添加找到的任何密钥。
之后,您需要再次下载 google-services.json
文件并在计算机上项目的本地文件夹中运行 flutter clean
。
现在您可以构建您的应用并查看它是否有效!
我希望这可以帮助某人。
答案 5 :(得分:4)
早点给出的答案是对的。它们都不是假的。但是如果您仍然遇到错误 PlatformException(sign_in_failed, com.google.android.gms.common.api.ApiException: 10: , null)
。您应该检查的一件事是您的 OAuth 2.0 Client IDs
成功生成客户端 ID 后,您的应用程序将按预期运行。
--- 注意---
但首先,请确保您已注册 SHA-1
、package id
email support
并已从 Firebase 控制台项目下载 google service json
。
答案 6 :(得分:3)
对于平台异常10,请尝试以下操作:
答案 7 :(得分:3)
您需要使用您的软件包配置Google Cloud Api项目。
https://developers.google.com/identity/sign-in/android/start-integrating#configure_a_project
确保使用相同的Firebase帐户登录
public class User
{
public int Id { get; set; }
[IdColumn(nameof(Client))]
public int ClientId { get; set; }
[ForeignKey(nameof(ClientId))]
public virtual Client Client { get; set; }
}
public class Client : User
{
// here are the specific client properties listed
}
public class File
{
public int Id { get; set; }
[IdColumn(nameof(Owner))]
public int OwnerId { get; set; }
[ForeignKey(nameof(OwnerId))]
public virtual User Owner { get; set; }
[IdColumn(nameof(Client))]
public int ClientId { get; set; }
[ForeignKey(nameof(ClientId))]
public virtual Client Client { get; set; }
}
public class IdColumnAttribute : ColumnAttribute
{
public const string IdPostFix = "_Id";
public IdColumnAttribute() : base() { }
public IdColumnAttribute(string name) : base(name + IdPostFix) { }
}
cd android
或./gradlew signingReport
gradlew signingReport
google-services.json
IOS:
flutter clean
答案 8 :(得分:2)
答案 9 :(得分:2)
在Firebase控制台中注册SHA1后,“清理干净”它就是每个人都缺少的东西!
答案 10 :(得分:1)
当我重新安装操作系统时,这也发生在我身上。
只需运行 ./gradlew signingReport
并将 SHA-1 和 SHA-256 复制到 Firebase 配置“添加指纹”
答案 11 :(得分:1)
确保SHA-1必须是仅在您的系统中生成的调试密钥,然后下载google-services.json文件并将其附加到您的项目中
答案 12 :(得分:1)
在我的情况下,这是一个愚蠢的错误,请确保您在firebase中的applicationId(如:'com.example.appname')与defaultConfig {}下的app / src / build.gradle文件中的applicationId完全匹配。没有拼写错误,没有大写字母,小写字母冲突。在我的情况下,一个字母是大写字母引起了所有问题。
答案 13 :(得分:1)
如果以前可以使用,但现在使用的是其他PC,则需要将该PC生成的新SHA-1 / SHA-256指纹添加到Firebase中的项目中。一个很好的分步示例:https://stackoverflow.com/a/56091158/5365164
答案 14 :(得分:0)
非常适合我:
将所有文件中的minSdkVersion
更改为21
(CTRL+SHIFT< /kbd>+R)
答案 15 :(得分: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 。而且有效。
答案 16 :(得分:0)
就我而言,没有任何答案可以解决问题。经过一番思考,我意识到一段时间前我已经更改了应用程序的程序包名称。如果是这种情况,您只需在Firebase项目中使用新的程序包名称创建另一个应用程序,然后再次下载google-services.json文件。
答案 17 :(得分:0)
但是,上面给出的答案是正确的,但是,如果您遇到问题,请不要忘记验证app / build.gradle的signingConfig {}部分。它不应包含任何不需要的密钥库文件引用,这可能会导致与google-services.json和密钥库不匹配。
答案 18 :(得分:0)
答案 19 :(得分:0)
遵循其他人建议的步骤
跑步
./gradlew clean
为我工作。
答案 20 :(得分:0)
我也有同样的问题。
- 我已经设置了“同意屏幕”。
- 添加了google_play_services.json
- 已启用Google登录
- 在flutter中添加了必需的插件
但是它不起作用,我得到了相同的API Exception-10,gsm错误
添加SHA1后,它开始工作
答案 21 :(得分:0)
在尝试使用 Google 登录时,手动更改手机上的日期也会导致平台异常。至少使用 flutter google-sign-in 库。
答案 22 :(得分:0)
我收到此错误: PlatformException(sign_in_failed,com.google.android.gms.common.api.ApiException: 7 :,null)也许解决方案对您有用。
我意识到我的调试设备(Android调试模式)未连接到互联网。 我认为身份验证失败,因此方法返回null或user等于null。
返回的变量必须在使用前检查。
答案 23 :(得分:0)
请确保您执行以下操作:
从Firebase控制台启用google登录
在设置android firebase应用程序时放置SHA-1
答案 24 :(得分:0)
这对我有所帮助(导入SHA1时遇到问题)
cd .android 我使用并复制了SHA1密钥,并粘贴到了Firebase,项目配置,Android应用程序,SHA证书中
keytool -list -v -keystore debug.keystore -alias androiddebugkey -storepass android -keypass android
我还用以下方法创建了一个密钥:
keytool -genkey -v -keystore debug.keystore -storepass android -alias androiddebugkeytwo -keypass android -keyalg RSA -keysize 2048 -validity 10000
并以此来获取一个SHA密钥:
keytool -list -v -keystore debug.keystore -alias androiddebugkeytwo -storepass android -keypass android
我复制并粘贴了我的firebase项目中的另一个密钥。
还下载了google-services.json并粘贴到flutter项目中的Android / app中。
这正常工作,我的pubspec.yml依赖:
http: ^0.12.0+2
cupertino_icons: ^0.1.2
firebase_auth: ^0.15.1
firebase_analytics: ^5.0.6
firebase_core: ^0.4.2+1
google_sign_in: ^4.0.14
我的代码:
Widget _signInButton() {
return OutlineButton(
splashColor: Colors.grey,
onPressed: () async {
await signInWithGoogle()
.then((FirebaseUser user) => print(user.displayName))
.catchError((e) => print(e));
},
);
}
import 'package:firebase_auth/firebase_auth.dart';
import 'package:google_sign_in/google_sign_in.dart';
final FirebaseAuth _auth = FirebaseAuth.instance;
final GoogleSignIn googleSignIn = new GoogleSignIn();
Future<FirebaseUser> signInWithGoogle() async {
final GoogleSignInAccount googleSignInAccount = await googleSignIn.signIn();
final GoogleSignInAuthentication googleSignInAuthentication =
await googleSignInAccount.authentication;
final AuthCredential credential = GoogleAuthProvider.getCredential(
accessToken: googleSignInAuthentication.accessToken,
idToken: googleSignInAuthentication.idToken,
);
final AuthResult authResult = await _auth.signInWithCredential(credential);
final FirebaseUser user = authResult.user;
print(user.displayName.toString());
assert(!user.isAnonymous);
assert(await user.getIdToken() != null);
final FirebaseUser currentUser = await _auth.currentUser();
assert(user.uid == currentUser.uid);
return user;
}
void signOutGoogle() async {
await googleSignIn.signOut();
print("User Sign Out");
}
我希望这项工作。
答案 25 :(得分:0)
这似乎很愚蠢,但这只是我现在的事情(过去有过使用Firebase的经验)。 我注意到我没有启用Google身份验证。请确保您执行了此操作,因为您可能仍会看到登录提示(向您显示手机的google用户,而未启用该功能)。
答案 26 :(得分:0)
这为我解决了。我在一个新项目中做了一个小的重构。我以为我使用的是旧的google-services.json
文件,但是使用的文件错误。在意识到这个简单错误之前,我尝试了其他两天。
答案 27 :(得分:0)
请确保您仍在开发中的Firebase控制台上使用的签名证书与app / build.gradle文件中的signingConfigs >>调试配置中使用的签名证书相同。不匹配会导致错误。
答案 28 :(得分:0)
我遇到了问题,花了5个小时才得以解决。我记得我读过某个地方的API异常10表示指纹有问题。因此,它必须是keystore或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。)以admin身份打开终端,并在此目录中生成调试密钥库。
$ 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中的配置
就是我的意思。希望对您有所帮助。
答案 29 :(得分:0)
构建一个appbundle(由Google Play和Flutter推荐)将导致此错误。构建apk将解决此问题。
请参阅问题58194425
答案 30 :(得分:0)
您应该为使用的每台PC生成SHA-1和SHA-256。并将它们全部添加到firebase项目设置中。
您应该在OAuth Consent标签中填写表格。
答案 31 :(得分:0)
确保您已添加
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 )。清单文件中的此applicatioonId或程序包名称应为 您在Firebase应用中的android软件包名称的名称。
答案 32 :(得分:0)
您可能会遇到此错误的一个原因是,如果您没有填写Google的OAuth同意书。这是对Firebase的新更改。
以下是您需要填写您的应用的同意书的步骤:
Your screen should now look like this example by step 6
Here is a highlighted example of how these regions should be filled out in step 7
这些步骤对我有用!虽然该链接可能仍然不存在,但我想引用此解决方案的来源here
答案 33 :(得分:0)
我尝试了以上所有操作,但没有任何效果。 我的错误是我的驱动器中有多个android studio版本文件夹,而我在firebase设置中输入了错误的SHA1键。
答案 34 :(得分:0)
在Firebase中注册应用程序时,我将applicationId更改为适合我的应用程序的名称。但是,这导致在我运行调试器时在手机上安装了第二个Flutter应用程序(当然,由于applicationId的更改)。因此,适合我的情况的方法是同时安装remove
和安装re-install
应用。
答案 35 :(得分:0)
答案 36 :(得分:0)
您可能需要执行其他步骤才能使google_sign_in工作:
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.**