1

I am able to Google Sign in using web version of my flutter app but can't Google sign in from android app. This is the error I'm getting:

 GraphicExtModuleLoader::CreateGraphicExtInstance false
D/Surface (29460): Surface::connect(this=0x753ab3e000,api=1)
D/Surface (29460): Surface::setBufferCount(this=0x753ab3e000,bufferCount=3)
D/Surface (29460): Surface::allocateBuffers(this=0x753ab3e000)
V/PhoneWindow(29460): DecorView setVisiblity: visibility = 0, Parent = android.view.ViewRootImpl@9837577, this = DecorView@bcd75e4[MainActivity]
V/PhoneWindow(29460): DecorView setVisiblity: visibility = 4, Parent = android.view.ViewRootImpl@9de9d56, this = DecorView@63bb4f5[SignInHubActivity]
D/Surface (29460): Surface::disconnect(this=0x753ab3e000,api=1)
D/View    (29460): [Warning] assignParent to null: this = DecorView@63bb4f5[SignInHubActivity]
E/flutter (29460): [ERROR:flutter/lib/ui/ui_dart_state.cc(186)] Unhandled Exception: PlatformException(sign_in_failed, com.google.android.gms.common.api.ApiException: 10: , null, null)

Refereing to this Flutter and google_sign_in plugin: PlatformException(sign_in_failed, com.google.android.gms.common.api.ApiException: 10: , null) answer on StackOverflow, I couldn't understand what this answer is trying to say... However, I do have provided my SHA1 key on firebase. Re-downloaded and replaced the google-services.json in my flutter app, but still can't sign in on Android. This is my GoogleSignIn code:

onPressed: () async {

                              await Firebase.initializeApp();

                              final FirebaseAuth _firebaseAuth =
                                  FirebaseAuth.instance;
                              final GoogleSignIn _googleSignIn =
                              GoogleSignIn();

                              Future<User> _signIn(BuildContext context) async {
                                debugPrint("1");
                                final GoogleSignInAccount googleUser =
                                await _googleSignIn.signIn();
                                debugPrint("2");
                                final GoogleSignInAuthentication googleAuth =
                                await googleUser.authentication;
                                debugPrint("a");
                                final AuthCredential credential =
                                GoogleAuthProvider.credential(
                                    idToken: googleAuth.idToken,
                                    accessToken: googleAuth.accessToken);

                                User userDetails = (await _firebaseAuth
                                    .signInWithCredential(credential))
                                    .user;
                                ProviderDetails providerInfo =
                                ProviderDetails(userDetails.uid);

                                List<ProviderDetails> providerData =
                                <ProviderDetails>[];
                                providerData.add(providerInfo);

                                UserDetails details = UserDetails(
                                    userDetails.uid,
                                    userDetails.displayName,
                                    userDetails.email,
                                    userDetails.photoURL,
                                    providerData);

                                if (details.userName.toString() != '') {
                                  debugPrint("Email ${details.userEmail}");

                                  globals.isLoggedIn = true;
                                  SharedPref prefs = SharedPref();
                                  String photoUrl = details.photoUrl.toString();
                                  prefs.save("photoUrl", photoUrl);

                                  prefs.save("username",
                                      details.userName.toString());
                                  prefs.save(
                                      "email", details.userEmail.toString());
                                  if (mounted) {
                                    setState(() {
                                      inProgress = false;
                                    });
                                  }
                                } else {
                                  globals.isLoggedIn = false;
                                  debugPrint(
                                      "Check your internet Connection");
                                }
                              }

                              if (mounted) {
                                setState(() {
                                  inProgress = true;
                                });
                              }
                              await _signIn(context);
                              debugPrint("LoggedIn");
                              Navigator.push(
                                context,
                                MaterialPageRoute(
                                    builder: (context) => Dashboard()),
                              );
                            }

Bilal Saeed
  • 2,092
  • 8
  • 31

2 Answers2

0

Actually I needed to add this line into my app level build.gradle file dependencies section.

 implementation 'com.google.android.gms:play-services-auth:19.0.0'

As well needed to link my project from this link too.

https://developers.google.com/identity/sign-in/android/start-integrating#configure_a_project

Might it help someone in future!

Bilal Saeed
  • 2,092
  • 8
  • 31
0

Problem is When you registered your app on google console and created clientId, you choose web platform, now you have to create another clientId with Android Platform. You can use same sha1 key.