1
我正在构建一个应用程序,用户必须先注册(谷歌或电子邮件)。第一次用户将被引导到他/她将输入他们的个人详细信息的活动,并且将返回的用户引导到配置文件活动。我正在使用Firebase身份验证和数据库。如何区分第一次谷歌登录和连续谷歌登录在Android应用程序?
如何检查用户是否已使用他的谷歌ID登录并将他引导至他的个人档案活动?现在,只要用户使用谷歌登录选项,即使他们之前已经注册,他们也总是被重定向到个人信息活动。
这是我与谷歌的主要活动登录的
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");
}
}
请将相关的代码片段添加到您的问题。 – RamithDR
http://stackoverflow.com/a/35286125/2949612 – pRaNaY
为什么这被标记为重复?重复使用的是与用户问题无关的SharedPreferences。 – Michael