Client App scenario
1. Firebase를 이용하여 회원가입과 로그인화면을 구현한다.
2. 로그인에 성공할 경우 저장된 카페 목록이 나타난다.
3. 각 카페별 다른 스탬프 개수를 가진다.
4. 스탬프 적립을 원할 경우 스탬프 적립 버튼을 통해 Qr코드를 생성한다.
5. Master App의 Qr scan기능을 활용하여 Client의 스탬프를 적립한다.
6. 변경된 스탬프의 개수를 Firebase에 수정한다.
7. Client App화면에 변경된 스탬프의 개수가 출력된다.
시작 화면
Function:
- 3초간 splash 이미지가 실행된 후 메인 화면으로 넘어간다.
public class Splashscreen extends Activity implements Animation.AnimationListener {
private static int SPLASH_TIME_OUT = 3000;
private ImageView mImgViewLogo;
private Animation anim;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_splashscreen);
mImgViewLogo = findViewById(R.id.imgViewSplashLogo);
anim = AnimationUtils.loadAnimation(getApplicationContext(), R.anim.fade_in);
anim.setAnimationListener(this);
mImgViewLogo.startAnimation(anim);
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
startActivity(new Intent(Splashscreen.this, MainActivity.class));
finish();
}
}, SPLASH_TIME_OUT);
}
@Override
public void onAnimationStart(Animation animation) {
}
@Override
public void onAnimationEnd(Animation animation) {
}
@Override
public void onAnimationRepeat(Animation animation) {
}
}
로그인 화면
Function:
- 이메일과 비밀번호 항목에 입력한 값이 Firebase Auth에 저장되어 있는 값과 같을 경우 로그인성공
- 로그인 실패시 오류 메시지 출력
- 계정 만들기 클릭시 회원가입 화면으로 전환
public class MainActivity extends AppCompatActivity {
Button login_button;
TextView alert_message;
TextView make_account;
EditText Edit_email;
EditText Edit_pw;
FirebaseAuth mAuth;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final Animation alertMessageAnim = AnimationUtils.loadAnimation(getApplicationContext(), R.anim.alert_message_animation);
mAuth = FirebaseAuth.getInstance();
Edit_email = (EditText) findViewById(R.id.input_email);
Edit_pw = (EditText) findViewById(R.id.input_pw);
login_button = (Button) findViewById(R.id.login_button);
login_button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String email = Edit_email.getText().toString().trim();
String pw = Edit_pw.getText().toString().trim();
final String TAG = "Login_Activity";
if ((email != null && !email.isEmpty()) && (pw != null && !pw.isEmpty())) {
mAuth.signInWithEmailAndPassword(email, pw).addOnCompleteListener(MainActivity.this, new OnCompleteListener<AuthResult>() {
@Override
public void onComplete(@NonNull Task<AuthResult> task) {
if (task.isSuccessful()) {
FirebaseUser user = mAuth.getCurrentUser();
Toast.makeText(MainActivity.this, "로그인에 성공하였습니다.",
Toast.LENGTH_SHORT).show();
Intent intent = new Intent(MainActivity.this, RecyclerActivity.class); // class 변경하기
startActivity(intent);
}
else {
alert_message = (TextView) findViewById(R.id.alert_message);
alert_message.startAnimation(alertMessageAnim);
}}});
}}});
make_account = (TextView) findViewById(R.id.make_account);
make_account.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(MainActivity.this, AccountActivity.class);
startActivity(intent);
}});
}}
회원가입 화면
Function:
- 각 항목에 올바른 데이터를 입력 후 회원가입 버튼 클릭시 Firebase Auth에 데이터 저장
- 이메일 형식이 아니거나 두 비밀번호가 다를경우 회원가입 실패 메시지 출력
- 이용약관 클릭시 해당 문서 출력(구현 x)
public class AccountActivity extends AppCompatActivity {
Button sign_button;
EditText name_input;
EditText email_input;
EditText pw_input;
EditText pw_reinput;
FirebaseAuth mAuth;
FirebaseDatabase database;
ImageView setImage;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_account);
name_input = (EditText) findViewById(R.id.sign_up_name);
email_input = (EditText) findViewById(R.id.sign_up_email);
pw_input = (EditText) findViewById(R.id.sign_up_pw);
pw_reinput = (EditText) findViewById(R.id.pw_rewrite);
setImage = (ImageView) findViewById(R.id.setImage);
mAuth = FirebaseAuth.getInstance();
database = FirebaseDatabase.getInstance();
pw_reinput.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
if(pw_input.getText().toString().equals(pw_reinput.getText().toString())) {
setImage.setImageResource(R.drawable.correct);
}
else {
setImage.setImageResource(R.drawable.error);
}
}
@Override
public void afterTextChanged(Editable s) {
}
});
sign_button = (Button) findViewById(R.id.sign_button);
sign_button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
final String email = email_input.getText().toString().trim();
String pw = pw_input.getText().toString().trim();
final String name = name_input.getText().toString().trim();
if(!android.util.Patterns.EMAIL_ADDRESS.matcher(email).matches()){
Toast.makeText(AccountActivity.this,"이메일 형식이 아닙니다",Toast.LENGTH_SHORT).show();
}
if ((email != null && !email.isEmpty()) && (pw != null && !pw.isEmpty())) {
mAuth.createUserWithEmailAndPassword(email, pw)
.addOnCompleteListener(AccountActivity.this, new OnCompleteListener<AuthResult>() {
@Override
public void onComplete(@NonNull Task<AuthResult> task) {
UserModel userModel = new UserModel();
CafeModel cafeModel = new CafeModel();
if (task.isSuccessful()) {
userModel.userName = name;
userModel.userEmail = email;
String uid = task.getResult().getUser().getUid();
database.getReference().child("users").child(uid).setValue(userModel);
database.getReference().child("users").child(uid).child("cafeName").child("Ediya").child("Stamp").child("number").setValue(0);
database.getReference().child("users").child(uid).child("cafeName").child("Angel in us").child("Stamp").child("number").setValue(0);
database.getReference().child("users").child(uid).child("cafeName").child("Blue bottle").child("Stamp").child("number").setValue(0);
database.getReference().child("users").child(uid).child("cafeName").child("Hollys").child("Stamp").child("number").setValue(0);
database.getReference().child("users").child(uid).child("cafeName").child("Starbucks").child("Stamp").child("number").setValue(0);
database.getReference().child("users").child(uid).child("cafeName").child("TomNToms").child("Stamp").child("number").setValue(0);
database.getReference().child("users").child(uid).child("cafeName").child("빽다방").child("Stamp").child("number").setValue(0);
Toast.makeText(getApplicationContext(), "회원가입이 완료되었습니다.", Toast.LENGTH_SHORT).show();
Intent intent = new Intent(AccountActivity.this, MainActivity.class);
startActivity(intent);
} else {
Toast.makeText(getApplicationContext(), "회원가입이 실패하였습니다.", Toast.LENGTH_SHORT).show();
}}});
}}});
}}
* 회원가입 완료 후 Firebase의 Authentication 화면
* Firebase의 Database
'Project > Android' 카테고리의 다른 글
CouKey(통합 쿠폰 관리 시스템)[Client App]_카페목록 및 쿠폰적립 (0) | 2020.06.02 |
---|---|
CouKey(통합 쿠폰 관리 시스템)[0] (0) | 2020.05.09 |