November 20, 2019

FirebaseUI 인증

// 멤버로 아래 객체를 선언

private List<AuthUI.IdpConfig> providers;
private FirebaseAuth firebaseAuth;
private FirebaseAuth.AuthStateListener authStateListener;

// onCreate에서...

@Overrideprotected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 원 소스에서는 이미 로그인 된 상태인지 파악해서 로그인 되었다면
ButterKnife.bind(MainActivity.this)해주었다
// 여기서는 일단 로그인부터 처리하자
ButterKnife.bind(MainActivity.this);
providers = Arrays.asList(
new AuthUI.IdpConfig.PhoneBuilder().build()
, new AuthUI.IdpConfig.GoogleBuilder().build() );
firebaseAuth = FirebaseAuth.getInstance();
authStateListener = new FirebaseAuth.AuthStateListener() {
@Override
public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth1) {
FirebaseUser user = firebaseAuth1.getCurrentUser();
if(user != null) {
checkUserFromFirebase(user);
}
}
};
}

위 onAuthStateChanged 함수는 앱이 이전에 로그인을 한 상태로 그냥 앱을 종료한 경우 여전히 로그인을 살아 있게되며 그럴때 재실행하면 이 함수에서는 로그인 상태로 인식해서 접속한 user를 획득하게 된다.

private void checkUserFromFirebase(FirebaseUser user) {

    FirebaseInstanceId.getInstance()
            .getInstanceId()
            .addOnCompleteListener(new OnCompleteListener<InstanceIdResult>() {
                @Override
                public void onComplete(@NonNull Task<InstanceIdResult> task) {
                    if(task.isSuccessful()) {
                        Common.updateToken(getBaseContext(), task.getResult().getToken());
                        Log.d("HairThereToken", task.getResult().getToken());
                        Intent intent = new Intent(MainActivity.this, HomeActivity.class);
                        intent.putExtra(Common.IS_LOGIN, true);
                        startActivity(intent);
                        finish();
                    }
                }
            })
            .addOnFailureListener(new OnFailureListener() {
                @Override
                public void onFailure(@NonNull Exception e) {
                    Toast.makeText(MainActivity.this, e.getMessage(), Toast.LENGTH_SHORT).show();
                    Intent intent = new Intent(MainActivity.this, HomeActivity.class);
                    intent.putExtra(Common.IS_LOGIN, true);
                    startActivity(intent);
                    finish();
                }
            });
}
DocumentReference currentUser = userRef.document("+821029890009");
                    currentUser.get()
                            .addOnCompleteListener(new OnCompleteListener<DocumentSnapshot>() {
                                @Override
                                public void onComplete(@NonNull Task<DocumentSnapshot> task) {
                                    if(task.isSuccessful()) {
                                        DocumentSnapshot userSnapShot = task.getResult();
                                        if(!userSnapShot.exists()) {
                                            showUpdateDialog("+821029890009");
                                        }
                                        if(dialog.isShowing())
                                            dialog.dismiss();
                                    }
                                }
                            });