如何在Android应用程序中区分第一次谷歌登录和连续谷歌登录?

时间:2017-02-18 04:35:03

标签: android firebase firebase-realtime-database firebase-authentication

我正在构建一个用户必须首先注册的应用程序(谷歌或电子邮件)。首次用户将被引导至他/她将输入其个人详细信息的活动,并且返回用户将被引导至个人资料活动。我正在使用firebase身份验证和数据库。

如何在用户使用谷歌ID登录时检查用户是否已注册并指导他参与他的个人资料活动?现在,只要用户使用谷歌登录选项,他们就会被重定向到个人详细信息活动,即使他们之前已经注册过。

这是我使用Google登录

的主要活动
public class MainActivity extends AppCompatActivity implements View.OnClickListener,GoogleApiClient.OnConnectionFailedListener{
private Button mainRegister;
private TextView mainsignIn;
private FirebaseAuth mAuth;
private FirebaseAuth.AuthStateListener mAuthListener;
private String TAG="MAIN_ACTIVITY";
private static int RC_SIGN_IN=0;
private GoogleApiClient mGoogleApiClient;


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    mAuth = FirebaseAuth.getInstance();
    mainRegister=(Button)findViewById(R.id.mainregister);
    mainsignIn=(TextView)findViewById(R.id.mainSignIN);

   // googlebutton=(SignInButton)findViewById(R.id.mainGoogleSignin);


    //Listener
    mAuthListener=new FirebaseAuth.AuthStateListener() {
        @Override
        public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) {
            FirebaseUser user = firebaseAuth.getCurrentUser();
            if(user != null){
                Log.d("AUTH", "User logged in: " + user.getEmail());

            }else{
                Log.d("AUTH", "User Logged out");
                }
        }
    };

    //google signIN
    GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
            .requestIdToken(getString(R.string.default_web_client_id))
            .requestEmail()
            .build();

    mGoogleApiClient= new GoogleApiClient.Builder(this)
            .enableAutoManage(this,this)
            .addApi(Auth.GOOGLE_SIGN_IN_API,gso)
            .build();

    mainRegister.setOnClickListener(this);
    mainsignIn.setOnClickListener(this);
    findViewById(R.id.mainGoogleSignin).setOnClickListener(this);
}

//googleSignIn Method
private void signIn() {
    Intent signInIntent = Auth.GoogleSignInApi.getSignInIntent(mGoogleApiClient);
    startActivityForResult(signInIntent, RC_SIGN_IN);
}

@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 == RC_SIGN_IN) {
        GoogleSignInResult result = Auth.GoogleSignInApi.getSignInResultFromIntent(data);
        if (result.isSuccess()) {
            // Google Sign In was successful, authenticate with Firebase
            //uncomment this app crashes
            GoogleSignInAccount account = result.getSignInAccount();
            firebaseAuthWithGoogle(account);


       } else {
           // Google Sign In failed, update UI appropriately
            Log.d(TAG,"Google login Failed");
        }
   }
}



//use this if app dosent work
private void firebaseAuthWithGoogle(GoogleSignInAccount acct) {
    //Log.d(TAG, "firebaseAuthWithGoogle:" + acct.getId());

    AuthCredential credential = GoogleAuthProvider.getCredential(acct.getIdToken(), null);
    mAuth.signInWithCredential(credential)
            .addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
                @Override
                public void onComplete(@NonNull Task<AuthResult> task) {
                    Log.d("AUTH", "signInWithCredential:onComplete:" + task.isSuccessful());
                    finish();
                    startActivity(new Intent(getApplicationContext(),PersonalDetailsActivity.class));

                }
            });
}

@Override
public void onStart() {
    super.onStart();
   mAuth.addAuthStateListener(mAuthListener);
}
@Override
public void onStop() {
    super.onStop();
    if (mAuthListener != null) {
        mAuth.removeAuthStateListener(mAuthListener);
    }
}

@Override
public void onClick(View v) {
        if(v==findViewById(R.id.mainGoogleSignin)){
            signIn();
            //finish();
            //startActivity(new Intent(getApplicationContext(),ProfileActivity.class));
        }
        if(v==mainRegister){
            finish();
            startActivity(new Intent(getApplicationContext(),EmailRegisterActivity.class));
        }
        if(v==mainsignIn){
            finish();
            startActivity(new Intent(getApplicationContext(),SignInActivity.class));
        }

}

@Override
public void onConnectionFailed(@NonNull ConnectionResult connectionResult) {
    Log.d(TAG,"Connection Failed");
}

}

1 个答案:

答案 0 :(得分:0)

为什么不在本地数据库中保存Google登录令牌,每次用户打开应用程序时都会检查用户令牌(可能在您的启动画面中),如果它存在,则表示存在已经是现有用户对配置文件活动的意图。其他个人详细活动。