Google Sign In with Helper class
suggest changeAdd below to your build.gradle
out of android
tag:
// Apply plug-in to app. apply plugin: 'com.google.gms.google-services'
Add below helper class to your util package:
/** * Created by Andy */ public class GoogleSignInHelper implements GoogleApiClient.OnConnectionFailedListener, GoogleApiClient.ConnectionCallbacks { private static final String TAG = GoogleSignInHelper.class.getSimpleName(); private static GoogleSignInHelper googleSignInHelper; private AppCompatActivity mActivity; private GoogleApiClient mGoogleApiClient; public static final int RC_SIGN_IN = 9001; private boolean isLoggingOut = false; public static GoogleSignInHelper newInstance(AppCompatActivity mActivity) { if (googleSignInHelper == null) { googleSignInHelper = new GoogleSignInHelper(mActivity, fireBaseAuthHelper); } return googleSignInHelper; } public GoogleSignInHelper(AppCompatActivity mActivity) { this.mActivity = mActivity; initGoogleSignIn(); } private void initGoogleSignIn() { // [START config_sign_in] // Configure Google Sign In GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN) .requestIdToken(mActivity.getString(R.string.default_web_client_id)) .requestEmail() .build(); // [END config_sign_in] mGoogleApiClient = new GoogleApiClient.Builder(mActivity) .enableAutoManage(mActivity /* FragmentActivity */, this /* OnConnectionFailedListener */) .addApi(Auth.GOOGLE_SIGN_IN_API, gso) .addConnectionCallbacks(this) .build(); } @Override public void onConnectionFailed(@NonNull ConnectionResult connectionResult) { // An unresolvable error has occurred and Google APIs (including Sign-In) will not // be available. Log.d(TAG, "onConnectionFailed:" + connectionResult); Toast.makeText(mActivity, "Google Play Services error.", Toast.LENGTH_SHORT).show(); } public void getGoogleAccountDetails(GoogleSignInResult result) { // Google Sign In was successful, authenticate with FireBase GoogleSignInAccount account = result.getSignInAccount(); // You are now logged into Google } public void signOut() { if (mGoogleApiClient.isConnected()) { // Google sign out Auth.GoogleSignInApi.signOut(mGoogleApiClient).setResultCallback( new ResultCallback<Status>() { @Override public void onResult(@NonNull Status status) { isLoggingOut = false; } }); } else { isLoggingOut = true; } } public GoogleApiClient getGoogleClient() { return mGoogleApiClient; } @Override public void onConnected(@Nullable Bundle bundle) { Log.w(TAG, "onConnected"); if (isLoggingOut) { signOut(); } } @Override public void onConnectionSuspended(int i) { Log.w(TAG, "onConnectionSuspended"); } }
Add below code to your OnActivityResult
in Activity file:
// [START onactivityresult] @Override public void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); // Result returned from launching the Intent from GoogleSignInApi.getSignInIntent(...); if (requestCode == GoogleSignInHelper.RC_SIGN_IN) { GoogleSignInResult result = Auth.GoogleSignInApi.getSignInResultFromIntent(data); if (result.isSuccess()) { googleSignInHelper.getGoogleAccountDetails(result); } else { // Google Sign In failed, update UI appropriately // [START_EXCLUDE] Log.d(TAG, "signInWith Google failed"); // [END_EXCLUDE] } } } // [END onactivityresult] // [START signin] public void signIn() { Intent signInIntent = Auth.GoogleSignInApi.getSignInIntent(googleSignInHelper.getGoogleClient()); startActivityForResult(signInIntent, GoogleSignInHelper.RC_SIGN_IN); } // [END signin]
Found a mistake? Have a question or improvement idea?
Let me know.
Table Of Contents