0

I am using Google to sign in to my app- so new as well existing user can login in using Gmail( by existing I mean those who have logged in before using google signin). Google uses the same method to Login as well as Sign up- I want to know when my user Sign up and when he logged in. Basically I have an activity that runs only when the present user isn't in my database i.e he's using Google sign in for the first time. Hence next time onwards when he google signs in he shouldn't see that activity!

 GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
                .requestIdToken(getString(R.string.default_web_client_id))
                .requestEmail()
                .build();
        //Then we will get the GoogleSignInClient object from GoogleSignIn class
        mGoogleSignInClient = GoogleSignIn.getClient(this, gso);
        //Now we will attach a click listener to the sign_in_button
        //and inside onClick() method we are calling the signIn() method that will open
        //google sign in intent
        findViewById(R.id.button2).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                signIn();
            }
        });
    }

    @Override
    protected void onStart() {
        super.onStart();

        //if the user is already signed in
        //we will close this activity
        //and take the user to profile activity
        if (mAuth.getCurrentUser() != null) {
            finish();
            startActivity(new Intent(this, main_activity2.class));
        }
    }


    @Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);

        //if the requestCode is the Google Sign In code that we defined at starting
        if (requestCode == RC_SIGN_IN) {

            //Getting the GoogleSignIn Task
            Task <GoogleSignInAccount> task = GoogleSignIn.getSignedInAccountFromIntent(data);
            try {
                //Google Sign In was successful, authenticate with Firebase
                GoogleSignInAccount account = task.getResult(ApiException.class);

                //authenticating with firebase
                firebaseAuthWithGoogle(account);
            } catch (ApiException e) {
                Toast.makeText(MainActivity.this, e.getMessage(), Toast.LENGTH_SHORT).show();
            }
        }
    }

    private void firebaseAuthWithGoogle(GoogleSignInAccount acct) {
        Log.e("Error", "firebaseAuthWithGoogle:" + acct.getId());
        //getting the auth credential
        AuthCredential credential = GoogleAuthProvider.getCredential(acct.getIdToken(), null);

        //Now using firebase we are signing in the user here
        mAuth.signInWithCredential(credential)
                .addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
                    @Override
                    public void onComplete(@NonNull Task<AuthResult> task) {
                        if (task.isSuccessful()) {
                            Log.e("Error", "signInWithCredential:success");
                            FirebaseUser user = mAuth.getCurrentUser();
                            updateUI(user);
                            Toast.makeText(MainActivity.this, "User Signed In", Toast.LENGTH_SHORT).show();
                        } else {
                            // If sign in fails, display a message to the user.
                            Log.e("Error", "signInWithCredential:failure", task.getException());
                            Toast.makeText(MainActivity.this, "Authentication failed.",
                                    Toast.LENGTH_SHORT).show();
                        }

                        // ...
                    }
                });
    }
    public void  updateUI(FirebaseUser account){
        if(account != null){
            Log.e("Login Success","Came in Update UI");
            startActivity(new Intent(MainActivity.this, main_activity2.class));
            overridePendingTransition(android.R.anim.fade_in,android.R.anim.fade_out);
        }

    }

    //this method is called on click
    private void signIn() {
        //getting the google signin intent
        Intent signInIntent = mGoogleSignInClient.getSignInIntent();

        //starting the activity for result
        startActivityForResult(signInIntent, RC_SIGN_IN);
    }

This code currently takes every login to one activity now how do I differentiate between First time users and existing ones. I am using Google Firebase for authentication and database!

Doug Stevenson
  • 297,357
  • 32
  • 422
  • 441
newbie100
  • 3
  • 1
  • 6
  • Ok, when using google login, you can use [this](https://developers.google.com/identity/sign-in/android/sign-in#check_for_an_existing_signed-in_user) to check for a existing signed-in user. – Lalit Fauzdar Apr 14 '20 at 07:25
  • No this thing, checks that the current user of google that u are using if that signed in to the database whenever I open the app. I want to implement a check at google Login itself that tells me if the person is has been to the app before or if its his first time! – newbie100 Apr 14 '20 at 08:09
  • @LalitFauzdar Like before `mAuth.signInWithCredential(credential)` I want to differentiate that the credentials its using is for an existing user or a new one – newbie100 Apr 14 '20 at 08:18

0 Answers0