PlatformException (PlatformException(sign_in_failed, com.google.android.gms.common.api.ApiException: 12500: , null))

Mir*_*cea 12 dart google-signin flutter googlesigninaccount googlesigninapi

将要崩溃的行:

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

我试过什么:

  1. 我用这个命令生成了我的 SH1 密钥 keytool -list -v \ -alias androiddebugkey -keystore ~/.android/debug.keystore
  2. 将 SH1 加密添加到 console.firebase.google.com
  3. 重新下载 google-service.json
  4. 复制debug.keystore.androidMyProject/android
  5. 在调试和发布中运行
  6. 添加到android/build.gradle这些行中:

    • 类路径 'com.android.tools.build:gradle:3.2.1'
    • 类路径 'com.google.gms:google-services:4.2.0'
  7. 添加到android/app/build.gradle这一行:

    • 依赖下的实现 'com.google.firebase:firebase-core:16.0.9'
    • 应用插件:文件末尾的“com.google.gms.google-services”
  8. release-signing.properties在我的项目文件夹下创建一个文件,其中包含这些行。
    • storeFile=debug.keystore
    • keyAlias=androiddebugkey
    • 商店密码=安卓
    • 密钥密码=安卓

另外,我已经在所有 StackOverflow问题中搜索了我能找到的这个问题,但没有一个对我有用。

我的 pubspec.yaml:

firebase_core: ^0.4.0+1
firebase_analytics: ^3.0.1

cloud_firestore: ^0.11.0+2

firebase_auth: ^0.11.1
google_sign_in: ^4.0.1+3

rxdart: ^0.22.0
Run Code Online (Sandbox Code Playgroud)

认证类:

class AuthService {
  final GoogleSignIn _googleSignIn = GoogleSignIn();
  final FirebaseAuth _auth = FirebaseAuth.instance;
  final Firestore _db = Firestore.instance;

  Observable<FirebaseUser> user;
  Observable<Map<String, dynamic>> profile;
  PublishSubject loading = PublishSubject();

  AuthService() {
    user = Observable(_auth.onAuthStateChanged);
    profile = user.switchMap((FirebaseUser user) {
      if (user != null) {
        return _db
            .collection('user')
            .document(user.uid)
            .snapshots()
            .map((snap) => snap.data);
      } else {
        return Observable.just({});
      }
    });
  }

  Future<FirebaseUser> googleSignIn() async {
    loading.add(true);
    GoogleSignInAccount googleUser = await _googleSignIn.signIn();
    GoogleSignInAuthentication googleAuth = await googleUser.authentication;
    // FirebaseUser user = await _auth.signInWithGoogle(
        // accessToken: googleAuth.accessToken, idToken: googleAuth.idToken);
    final AuthCredential credential = GoogleAuthProvider.getCredential(
      accessToken: googleAuth.accessToken,
      idToken: googleAuth.idToken,
    );
    FirebaseUser user = await _auth.signInWithCredential(credential);
    updateUserData(user);
    print("Sign in" + user.displayName);

    loading.add(false);

    return user;
  }
}
Run Code Online (Sandbox Code Playgroud)

主要类:

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
  // This widget is the root of your application.
  AuthService authService = AuthService();

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blueGrey,
      ),
      home: Scaffold(
        body: Center(
          child: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            children: <Widget>[
              MaterialButton(
                child: Text("Log in with Google"),
                color: Colors.blueGrey,
                textColor: Colors.deepOrange,
                onPressed: () => authService.googleSignIn(),
              ),
              MaterialButton(
                child: Text("LogOut"),
                color: Colors.redAccent,
                textColor: Colors.purple,
                onPressed: () => authService.signOut(),
              ),
            ],
          ),
        ),
      ),
    );
  }
}
Run Code Online (Sandbox Code Playgroud)

现在,如果你们中的任何人能指出我正确的方向,我将不胜感激。

以下是我已经尝试过的一些 stackoverflow 链接:

  1. Flutter 应用发布后,Google 登录不起作用
  2. Flutter 和 google_sign_in 插件:PlatformException(sign_in_failed, com.google.android.gms.common.api.ApiException: 10: , null)
  3. Google 登录错误 12500

我对他们中的任何一个都没有运气,请让我知道您的想法以及我该如何解决。

Mig*_*Mac 25

OP @Mircea 特别提到了错误 12500。这就是我克服该错误的方法:

最近几天我一直在遇到同样的问题。我重构了我的代码数十次,添加了断点,重置了 SHA-1、SHA-256,并做了我能找到的几乎所有其他基于“代码”的解决方案。我不断遇到错误:

E/flutter (11935): [ERROR:flutter/lib/ui/ui_dart_state.cc(148)] Unhandled Exception: PlatformException(sign_in_failed, com.google.android.gms.common.api.ApiException: 12500: , null)

我失去了理智,所以我决定从新的角度开始,再慢慢地通过解决方案。我注意到一个隐藏在帖子深处的晦涩帖子,其中提到了有关拥有支持电子邮件的内容。直到我添加了一封所说的支持电子邮件,事情才“神奇地”开始工作。我在下面附上了我项目的 Firebase 设置的屏幕截图。

在此处输入图片说明

  • 这不适合我 (3认同)
  • 谢谢伙计,我已经尝试了其他所有方法,但这确实解决了我的问题, (2认同)

Xer*_*ero 9

您需要完成“ Oauth 同意屏幕

我去了这个页面 ( https://console.developers.google.com/apis/credentials ) 不要忘记在列表中选择你的项目(左上角)。然后进入“Oauth 同意屏幕”

我填写了应用程序徽标和应用程序主页链接和应用程序隐私政策链接(与 project.firebaseapp.com)并保存。

在此处输入图片说明

现在它工作了,我可以登录了。

这必须在文档中解释。人们会发疯的,不要因为缺乏这种文档而尝试慌张。


Aks*_*pra 7

就我而言,问题是由于模拟器不兼容造成的。模拟器没有playstore。

我创建了一个新的 AVD,其中有 Playstore。然后就成功了!

使用 Playstore 创建新模拟器的参考

另外,验证您是否已在 firebase 控制台上添加 SHA1 密钥。


Jay*_*gra 6

就我而言,我尚未启用 Google 登录方法。

在此处输入图片说明


flu*_*oid 1

我也尝试了几乎所有可以从互联网上搜索到的答案。所以我决定尝试ios端,但它仍然给我错误“403受限客户端”。然后我确定这是服务器端问题。最后我发现忘记设置支持e- Google Developers Console > API 和服务 > 证书 > 用户同意屏幕链接中的邮件地址,此选项也在您的 Firebase 项目设置中。设置完毕后,一切都应该可以工作。希望这会对您有所帮助。


归档时间:

查看次数:

14693 次

最近记录:

5 年,2 月 前