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

时间:2019-05-17 14:19:20

标签: dart flutter google-signin googlesigninapi googlesigninaccount

要崩溃的行:

GoogleSignInAccount googleUser = await _googleSignIn.signIn();

我尝试过什么:

  1. 我已经使用此命令keytool -list -v \ -alias androiddebugkey -keystore ~/.android/debug.keystore
  2. 生成了SH1密钥
  3. 将SH1加密添加到console.firebase.google.com
  4. 重新下载google-service.json
  5. debug.keystore.android复制到MyProject/android
  6. 在调试中运行并释放
  7. 将这些行添加到android/build.gradle

    • 类路径'com.android.tools.build:gradle:3.2.1'
    • 类路径'com.google.gms:google-services:4.2.0'
  8. 将以下行添加到android/app/build.gradle中:

    • 依赖项
    • 下实施'com.google.firebase:firebase-core:16.0.9'
    • 在文件末尾应用插件:“ com.google.gms.google-services”
  9. 在我的项目文件夹下创建一个名为release-signing.properties的文件,其中包含这些行。
    • storeFile = debug.keystore
    • keyAlias = androiddebugkey
    • storePassword = android
    • keyPassword = android

此外,我已经搜索了我可以找到的 ALL 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

验证类别:

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;
  }
}

主类:

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(),
              ),
            ],
          ),
        ),
      ),
    );
  }
}

现在,如果您能向我指出正确的方向,我将非常感激。

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

  1. Google sign in doesn't work after release of flutter app
  2. Flutter and google_sign_in plugin: PlatformException(sign_in_failed, com.google.android.gms.common.api.ApiException: 10: , null)
  3. Google Sign In error 12500

我都没有运气,请告诉我您的想法以及如何解决。

8 个答案:

答案 0 :(得分:1)

我也尝试了几乎所有可以从Internet搜索的答案。因此,我决定尝试ios端,它仍然给我错误“ 403受限制的客户端”。然后,我确定是服务器端问题。最后,我发现忘记了设置在Google Developers Console> API和服务>证书>用户同意屏幕link中提供支持的电子邮件地址,并且在Firebase项目设置中也可以使用此选项。设置完成后,一切都会正常。希望对您有所帮助。

答案 1 :(得分:1)

按照文档中提到的所有步骤操作后,即使我遇到了同样的问题。对我有用的一件事是在Firebase控制台的设置页面中添加支持电子邮件

答案 2 :(得分:1)

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设置下方附上了屏幕截图。

enter image description here

答案 3 :(得分:1)

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

enter image description here

答案 4 :(得分:0)

我遇到了同样的问题,为我解决了这个问题的是在SHA-1上另外添加了SHA-256指纹

如此处所述-> Flutter and google_sign_in plugin: PlatformException(sign_in_failed, com.google.android.gms.common.api.ApiException: 10: , null)

希望对您也有用!

答案 5 :(得分:0)

您需要完成“ Oauth同意屏幕

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

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

enter image description here

现在可以使用了,我可以登录。

这必须在文档中进行解释。人们会发疯,并且不要因缺乏此类文档而动fl。

答案 6 :(得分:0)

当我改用android studio时,使用Visual Studio遇到了相同的问题。我猜是因为我已经用android studio登录到firebase了,如果我可以使用VS做同样的事情,我会徘徊,哦,希望这对某人有帮助

答案 7 :(得分:0)

我遇到了同样的问题,我通过使用Keytool添加调试/发布SHA1和SHA256证书指纹来解决了这个问题

发布

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

调试

keytool -list -v -alias androiddebugkey -keystore %USERPROFILE%\.android\debug.keystore

此处有更多详细信息:https://developers.google.com/android/guides/client-auth