시나리오
1. 로그인 화면이 뜬다.
2. 로그인 화면에는 로그인을 할 수 있는 칸과 회원가입을 할 수 있는 버튼으로 구성됨.
3. 회원가입 버튼을 누른다.
4. 회원가입 정보를 입력한다.
5. 앱에 계정을 등록한다.
* 회원가입 *
- 파이어베이스 접근 권한 갖기
FirebaseAuth firebaseAuth = firebaseAuth = FirebaseAuth.getInstance();
- 가입 버튼 --> 신규 계정 등록
firebaseAuth.createUserWithEmailAndPassword(email, pwd).addOnCompleteListener(RegisterActivity.this, new
OnCompleteListener<AuthResult>()

등록이 완료되면 파이어베이스 Authentication에 등록이 된다.
- HashMap<Object,String> hashMap
해쉬맵은 그냥 테이블 개념과 똑같다. 회원 정보 데이터를 다른 곳에서도 쓰려면 이것을 데이터베이스에 저장 시켜야
한다. 이때 해쉬맵을 이용하여 테이블 형식으로 한번에 집어넣으면 편리하다.
HashMap<Object,String> hashMap = new HashMap<>();
hashMap.put("uid",uid);
hashMap.put("email",email);
hashMap.put("name",name);
- HashMap 데이터베이스에 저장하기
FirebaseDatabase database = FirebaseDatabase.getInstance(); //데이터 베이스에 접근 권한 갖기
DatabaseReference reference = database.getReference("Users"); //데이터 베이스 Users라는 인스턴스 갖기
reference.child(uid).setValue(hashMap); //그 자식에 HashMap 집어넣기
XML에 기능
- <com.google.android.material.textfield.TextInputLayout>
EditText에 입력된 텍스트를 기반으로 View가 유동적으로 반응하기 위해서 고안된 레이아웃이다. 이 태그는 AndroidX
버전에 맞춘 태그이다.
- app:passwordToggleEnabled="true"
비밀번호의 보안성을 위해 토글 설정을 할 수 있다.
* 로그인 *
로그인은 회원가입보다 상대적으로 간단하다.
회원가입을 만들고 나면 로그인은 훨씬 쉽다. 만약 Authentication에 등록만 되어있다면 다음 한줄이면 로그인에 성공
할 수 있다.
- firebaseAuth.signInWithEmailAndPassword(email,pwd)
.addOnCompleteListener(MainActivity.this, new OnCompleteListener<AuthResult>()
파이어베이스에 접근해 로그인 할 수 있다.
/*화면*/


/*RegisterActivitiy*/
public class RegisterActivity extends AppCompatActivity {
private static final String TAG = "RegisterActivity";
EditText mEmailText, mPasswordText, mPasswordcheckText, mName;
Button mregisterBtn;
private FirebaseAuth firebaseAuth;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_register);
//액션 바 등록하기
ActionBar actionBar = getSupportActionBar();
actionBar.setTitle("Create Account");
actionBar.setDisplayHomeAsUpEnabled(true); //뒤로가기버튼
actionBar.setDisplayShowHomeEnabled(true); //홈 아이콘
//파이어베이스 접근 설정
// user = firebaseAuth.getCurrentUser();
firebaseAuth = FirebaseAuth.getInstance();
//firebaseDatabase = FirebaseDatabase.getInstance().getReference();
mEmailText = findViewById(R.id.emailEt);
mPasswordText = findViewById(R.id.passwordEdt);
mPasswordcheckText = findViewById(R.id.passwordcheckEdt);
mregisterBtn = findViewById(R.id.register2_btn);
mName = findViewById(R.id.nameEt);
//파이어베이스 user 로 접글
//가입버튼 클릭리스너 --> firebase에 데이터를 저장한다.
mregisterBtn.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v) {
//가입 정보 가져오기
final String email = mEmailText.getText().toString().trim();
String pwd = mPasswordText.getText().toString().trim();
String pwdcheck = mPasswordcheckText.getText().toString().trim();
if(pwd.equals(pwdcheck)) {
Log.d(TAG, "등록 버튼 " + email + " , " + pwd);
final ProgressDialog mDialog = new ProgressDialog(RegisterActivity.this);
mDialog.setMessage("가입중입니다...");
mDialog.show();
//파이어베이스에 신규계정 등록하기
firebaseAuth.createUserWithEmailAndPassword(email, pwd).addOnCompleteListener(RegisterActivity.this, new OnCompleteListener<AuthResult>() {
@Override
public void onComplete(@NonNull Task<AuthResult> task) {
//가입 성공시
if (task.isSuccessful()) {
mDialog.dismiss();
FirebaseUser user = firebaseAuth.getCurrentUser();
String email = user.getEmail();
String uid = user.getUid();
String name = mName.getText().toString().trim();
//해쉬맵 테이블을 파이어베이스 데이터베이스에 저장
HashMap<Object,String> hashMap = new HashMap<>();
hashMap.put("uid",uid);
hashMap.put("email",email);
hashMap.put("name",name);
FirebaseDatabase database = FirebaseDatabase.getInstance();
DatabaseReference reference = database.getReference("Users");
reference.child(uid).setValue(hashMap);
//가입이 이루어져을시 가입 화면을 빠져나감.
Intent intent = new Intent(RegisterActivity.this, MainActivity.class);
startActivity(intent);
finish();
Toast.makeText(RegisterActivity.this, "회원가입에 성공하셨습니다.", Toast.LENGTH_SHORT).show();
} else {
mDialog.dismiss();
Toast.makeText(RegisterActivity.this, "이미 존재하는 아이디 입니다.", Toast.LENGTH_SHORT).show();
return; //해당 메소드 진행을 멈추고 빠져나감.
}
}
});
//비밀번호 오류시
}else{
Toast.makeText(RegisterActivity.this, "비밀번호가 틀렸습니다. 다시 입력해 주세요.", Toast.LENGTH_SHORT).show();
return;
}
}
});
}
public boolean onSupportNavigateUp(){
onBackPressed();; // 뒤로가기 버튼이 눌렸을시
return super.onSupportNavigateUp(); // 뒤로가기 버튼
}
}
/*LoginActivitiy*/
public class MainActivity extends AppCompatActivity {
Button mLoginBtn;
TextView mResigettxt;
EditText mEmailText, mPasswordText;
private FirebaseAuth firebaseAuth;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
firebaseAuth = FirebaseAuth.getInstance();
//버튼 등록하기
mResigettxt = findViewById(R.id.register_t2);
mLoginBtn = findViewById(R.id.login_btn);
mEmailText = findViewById(R.id.emailEt);
mPasswordText = findViewById(R.id.passwordEdt);
//가입 버튼이 눌리면
mResigettxt.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v) {
//intent함수를 통해 register액티비티 함수를 호출한다.
startActivity(new Intent(MainActivity.this,RegisterActivity.class));
}
});
//로그인 버튼이 눌리면
mLoginBtn.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v) {
String email = mEmailText.getText().toString().trim();
String pwd = mPasswordText.getText().toString().trim();
firebaseAuth.signInWithEmailAndPassword(email,pwd)
.addOnCompleteListener(MainActivity.this, new OnCompleteListener<AuthResult>() {
@Override
public void onComplete(@NonNull Task<AuthResult> task) {
if(task.isSuccessful()){
Intent intent = new Intent(MainActivity.this, BottomNaviActivity.class);
startActivity(intent);
}else{
Toast.makeText(MainActivity.this,"로그인 오류",Toast.LENGTH_SHORT).show();
}
}
});
}
});
}
}
'ANDROID' 카테고리의 다른 글
대세인 MVVM 에 대해서 (0) | 2020.06.20 |
---|---|
파이어베이스 & recyclerview 사용 방법 (0) | 2020.01.21 |
[Android] 만보기 만들기 (2) | 2020.01.08 |