1

Я создаю приложение, где пользователь должен сначала зарегистрироваться (Google или E-mail). Первые пользователи будут направлены на деятельность, в которой он/она будет вводить свои личные данные, а возвращающиеся пользователи будут направлены на активность профиля. Для этого я использую firebase authentication и Database.Как отличить первый вход в Google и последовательный вход в Google для Android?

Как проверить, зарегистрирован ли пользователь и направить его в свою активность, когда он входит в систему, используя свой идентификатор Google? Прямо сейчас, когда пользователь использует параметр входа в систему google, они всегда перенаправляются на активность персональных данных, даже если они зарегистрировались ранее.

Это моя основная деятельность с Google Sign-In

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"); 
} 

}

+0

Пожалуйста, добавьте соответствующие фрагменты кода к вашему вопросу. – RamithDR

+0

http://stackoverflow.com/a/35286125/2949612 – pRaNaY

+0

Почему это обозначалось как дубликат? Дубликат использует SharedPreferences, который не имеет никакого отношения к вопросу пользователя. – Michael

ответ

0

Почему вы не сохраните подписи в фишку Google в локальной базе данных, и каждый раз, когда пользователь открывает приложение сделайте проверку для токена пользователя (возможно, в вашем всплеске), и если он присутствует, это означает, что уже существующий пользователь делает намерение активности профиля. Еще одна активность персональных данных.

 Смежные вопросы

  • Нет связанных вопросов^_^