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

Mircea picture Mircea · May 17, 2019 · Viewed 13.4k times · Source

The line where is going to crash:

GoogleSignInAccount googleUser = await _googleSignIn.signIn();

What have I tried:

  1. I've generated my SH1 key with this command keytool -list -v \ -alias androiddebugkey -keystore ~/.android/debug.keystore
  2. Adding SH1 encryption into console.firebase.google.com
  3. Re-downloading the google-service.json
  4. Copying the debug.keystore from .android to MyProject/android
  5. Run in debug and release
  6. Adding into android/build.gradle those lines:

    • classpath 'com.android.tools.build:gradle:3.2.1'
    • classpath 'com.google.gms:google-services:4.2.0'
  7. Adding into android/app/build.gradle this lines:

    • implementation 'com.google.firebase:firebase-core:16.0.9' under dependencies
    • apply plugin: 'com.google.gms.google-services' on the end of the file.
  8. Creating a file named release-signing.properties under my project folder with those lines in it.
    • storeFile=debug.keystore
    • keyAlias=androiddebugkey
    • storePassword=android
    • keyPassword=android

Also, I've searched in ALL StackOverflow question that I could found for this question, and none of them was useful for me.

My 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

Auth class:

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

Main class:

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

Now if any of you could point me in the right direction I would be very grateful.

Here are some stackoverflow links that I've tried already:

  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

I didn't have luck with any of them, please let me know what do you think and how can I fix it.

Answer

MiggityMac picture MiggityMac · May 29, 2019

The OP, @Mircea, specifically mentioned error 12500. This is how I overcame that error:

I have spent the last few days running into the same problem. I refactored my code dozens of times, added break points, reset the SHA-1, SHA-256 and did just about every other 'code' based solution I could find. I was constantly running into the error:

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)

I was losing my mind so I decided to start with fresh eyes and move slowly through solutions one more time. I noticed an obscure post nestled deep in a thread that mentioned something about having a support email. It was not until I added a said support email that things "magically" started working. I've attached a screenshot below of the Firebase settings for my project.

enter image description here