안녕하세요.
첫 포스팅 입니다.
첫 포스팅으로는 제가 유용하게 사용하고 있는 Firebase Auth에 대해서 포스팅 해보려 합니다.
일단 Firebase는 Google구글 에서 서비스하는 기능으로
가장 큰 퍼포먼스로는 서버의 구현없이 서버의 기능을 사용할 수 있는 것입니다.
그 기능으로는
계정관리(Authentication), 메세징서비스(Cloud Messaging FCM), 실시간 데이터베이스(Realtime Database),
호스팅(Hosting), 앱 분석을 위한(Analytics)등 여러가지 기능을 제공합니다.
자세한 내용은
https://firebase.google.com/docs/
저는 이 많은 기능중에 Firebase Authentication이라는 계정관리 기능을 사용하였습니다.
그 이유는 먼저 계정에 대해서는 보안에 대한 걱정을 많이 하게되는데 이부분은 저도 확실치는 않으나 구글에서 그 데이터를 가지고 있기 때문에
해킹이나 문제가 되는 많은 외부 요인들로 부터 좀 안전하지 않을까 싶어서 사용을 하였고,
다른 서비스의 로그인 API까지 쉽게 사용이 가능해서 사용하였습니다. (Google, Facebook, Twitter, GitHub(?))
이번 포스팅에서는 다른 서비스에 대한 로그인 API까진 다뤄보지 않을 것이고
이메일 + 비밀번호 형태인 일반적으로 사용이 가능한 로그인 기능을 만들어 보려고 합니다.
(여기서 더 자세한 정보들과 강좌를 볼 수 있습니다.)
https://firebase.google.com/docs/auth/
먼저,
https://console.firebase.google.com/
에서 자신의 프로젝트를 등록합니다.
이 부분은 한글로 되있어서 쉽게 따라할 수 있습니다.
먼저 자신의 앱 프로젝트 build.gradle(Module:app)에
dependencies { .. compile 'com.google.firebase:firebase-auth:9.6.1' }
로그인이나 회원가입하는 부분에 아래와 같은 형식으로 파이어베이스 계정에 대한 정보를 가지고 있는 객체를 가져옵니다.
private FirebaseAuth mAuth; // ... mAuth = FirebaseAuth.getInstance();
먼저 회원가입을 해봅시다.
mAuth.createUserWithEmailAndPassword(email,password) .addOnCompleteListener(new OnCompleteListener<AuthResult>() { @Override public void onComplete(@NonNull Task<AuthResult> task) { if(task.isSuccessful()){ Log.d(TAG,”Sign Up Success”); }else{ Log.d(TAG,”Sign Up Fail”); //보통 이메일이 이미 존재하거나, 이메일 형식이아니거나, 비밀번호가 6자리 이상이 아닐 때 발생 } } );
mAuth.signInWithEmailAndPassword(email,password) .addOnCompleteListener(new OnCompleteListener<AuthResult>() { @Override public void onComplete(@NonNull Task<AuthResult> task) { if(task.isSuccess()){ Log.d(TAG,"Sign In Success"); } else { Log.d(TAG,"Sign In Fail"); } } } );
비슷한 방법으로 로그인도 진행이 가능합니다.
이렇게 회원가입을 하거나 로그인을 진행하게 되면 mAuth에는 회원의 정보가 들어가게 됩니다.
또는 로그아웃을 통해서 mAuth의 회원정보가 비거나 하는 상태가 변경이 될때마다 실행되는 이벤트에 대해 알아보겠습니다.
이 이벤트를 통해서 만약 로그인 화면에서 mAuth에 회원정보가 있다면 로그인을 하지 않고 메인으로 이동을 시키고
만약 정보가 없다면 회원가입을 시키는 등의 처리를 할 수 있습니다.
private FirebaseAuth.AuthStateListener mAuthListener; // ... @Override protected void onCreate(Bundle savedInstanceState) { // ... mAuthListener = new FirebaseAuth.AuthStateListener() { @Override public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) { FirebaseUser user = firebaseAuth.getCurrentUser(); if (user != null) { // User is signed in Log.d(TAG, "onAuthStateChanged:signed_in:" + user.getUid()); } else { // User is signed out Log.d(TAG, "onAuthStateChanged:signed_out"); } // ... } }; // ... } @Override public void onStart() { super.onStart(); mAuth.addAuthStateListener(mAuthListener); } @Override public void onStop() { super.onStop(); if (mAuthListener != null) { mAuth.removeAuthStateListener(mAuthListener); } }
startActivity(new Intent(getApplicationContext(), MainActivity.class); finish();