iOS(Swif,Firebase) -로그인,ID중복확인,회원가입<Coordinator>-[MVVM Design pattern](4)

JSLee·2021년 11월 22일
0

안녕하세요 오늘은 Coordinator 뷰 전환 과 Firebase를 통한 로그인,아이디중복확인,회원가입 까지 해보려고 합니다.


firebase 종류입니다!
store = 테이블형식의 데이터베이스입니다.
realtime = 실시간으로 데이터를 저장하고 유저들끼리 동기화하는 데이터베이스입니다
storage = 주로 image파일을 저장하는 창고입니다.

저는 firebase 가 가지고있는 데이터베이스들에 대해서
이렇게 생각해요 ㅎㅎ

저는 store 를 사용했습니다 . 그래서 스토어 위주로! 설명하겠습니다


회원가입 페이지 입니다.
phoneNumber 쪽은 알맞는 번호를 작성하고 버튼을 탭하게 되면 인증번호확인 텍스필드가 생성됩니다.이부분은 자세히 한번더 포스팅하도록 할께요
일단 저는
모든 필드와 버튼이 Rx로 바인드 되어있어서 제가 걸어놓은 조건이 성립되지 않으면
버튼의 alpha 와 Enabled 가 비활성화 상태입니다
활성화가 된후 회원가입을 실행하게되면!

버튼에 action이 실행되고 저는 viewModel로 정보들을 넘겨줍니다!
그리고 음..이건 제가 alert으로 받는데요 사실 Bool 값을 받고 VC에서 처리하는것도
괜찮지만 ViewController는 왠만하면 코드를 많이 적고싶지 않아서,,ㅎㅎ
그럼 정보를 받은 ViewModel 에서는

받은 데이터로 회원가입을 진행 하게됩니다 ! 그리고 보듯이 alert을 반환해주고
action 으로는 coordinator를 통해서 로그인페이지로 뷰를 전환해 줄꺼에요!.
아그리고 데이터를 저장하는 부분에서
document("users/(id)")
이 부분은!

이렇게 스토어에 테이블을 구성하는 거라고 생각하시면 됩니다!
왼쪽부터~ 패쓰->도큐멘트->필드
입니다 ! 저렇게 컬렉션과도큐멘트 가운데 '/' 를 넣고 레퍼런스를 잡으시면 좀더 간편하죵?

이렇게 collection으로 잡으셔도 됩니다!
자이렇게 되면 저장은 끝난거구요

id중복확인은
솔직히 이건 제가 쓰는 방법이라 다른 방법도 많을꺼고 더좋은 방법도 많을껀데
저는 user들을 저장할때 id를 document로 저장합니다
그이유는 한번에 끝낼수 있어요!

이건 아이디중복확인 버튼의 액션입니다.
이번엔 viewModel로 데이터를 넘겨주는 함수를 컴플리션함수로 받을꺼에요 타입은 Bool
그렇게 되면 넘어오는 데이터를 가지고 트루면~ 펄스면~ 만 정해줌 되는것이궁
값에 따라서 필드에 UI적 요소로 user에게 보여주면 되겠슴돠 ㅎㅎ
사실 alert을 쓰는게 가장 좋을꺼 같지만... 귀찮기두 하궁..회원가입은 그냥빠르게넘어가는게 좋을꺼 같아서용 ㅎㅎ
필드에 있는 어시티브라벨을 바꿔주는거로 끝내려구용 아그리고 저 디스패치큐는 일단 UI를 바꾸니깐 쓰긴했는데 굳이 안써도 될꺼같기도 하네용..ㅎㅎ 일단 그냥써봤어요 ㅎㅎ

자그럼 토스받은 viewModel에서는

오잉 또 컴플리션인 함수가 있네유 ㅎㅎ
사실 firebase 관련한것은! 모두모두 firebaseService클래스에서 해결하려고 합니다!

맨위 shared로 모두모두 공유하면서~ 함수들을 사용할수있습니다

자! 이 함수가 중복확인 함수입니다 제가 아까 아이디를 document로 저장했잖아요
그렇기때문에 컬렉션패스만 알려주고! 전달받은 id를 넣었는데!
값이 나오는지를 보면 되는겁니다!
그래서 값이 나오면? 아이디가 있는것이겠죠!? 그러니깐 guard let 밑에서 completion을 false로 줍니다 왜냐하면
제가 원하는건 아이디가 있는지 없는지니깐! 아이디가 있으면 진행할수가 없겠죠 그러니깐 false로 주는거에요!
근데 아이디가 없다!!에러다!! 하면 컴플리션을 트루로! 보내주는겁니다 ㅎㅎ
좀멍청한 생각인가요.. 다른분들은 어떻게 하시는지 궁금하네요..ㅠㅠ

그럼 전달받은 컴플리션으로 UI를 바꿔주면서 user에게 보여줍니다!ㅎㅎ
그럼 이제 로그인을 한번 볼까요


방식은 비슷합니다~ 데이터 뷰모델 함수로 넘겨주고

뷰모델은 다시 firebaseService로 보내주고~

이건! 제가 아까 ID를 document로 저장했으니깐요!
일단 document를 싹~가져옵니다!
그리고 for문으로 돌아가면서 저런식으로 받아온 이메일과 패스워드랑 비교를 하는겁니다!
그러다 맞는 데이터가 1개라도 있다? 그러면! 로그인 성공인것이죠!
user는 한번 데이터를 입력하고 버튼을 눌른것이니깐요
그럼 컴플리션으로 유저아이디를 보내주공!
그걸받고 아까 coordinator를 실행시킵니다!
이제 뷰전환이 있어야해용

로그인 coordinator입니다 일단 로그인페이지에서 시작이 된것이니깐 logincoordinator에서
전환될 뷰의 coordinator를 생성합니다!
그리고 메모리에서~ 날라가지않게 프로토콜 변수인 coordinator배열에 저장해줍니다!
그리고 생성된 전환될뷰의 coordinator의 함수를 실행시켜요
그럼 이제 여기서 뷰가 전환되는것이겠죠

전환될 뷰의 coordinator에요 아까 생성때 init으로 네비게이션으로 뷰 전환이 될것인데요
유저아이디도 같이 넣어주었지요
그럼 start함수를 보시면 일단 viewcontroller를 생성!
그후 viewModel를 생성한뒤에
아까 받은 유저아이디를 뷰모델에 넣어줍니다!
그리고 coordinator 연결! 뷰모델에 넣는 데이터들을 먼저 넣어주고 coordinator연결이 되어야 뷰가 제대로 작동되요!!저도 먼저 userID넣었는데 아무것도 ..나오지않는..상황이었거든여 ㅎ
그리고~ 마지막으로 ViewController에 뷰모델 연결을 해주고!
네비게이션으로 VC를 넘겨줍니다!

뷰모델과 뷰컨트롤러 입니다!
그럼 ~~이런식으로

profile
iOS/Android/FE/BE

0개의 댓글