Merged
Conversation
- GameResult ViewModel 및 ViewController 추가 - 혼자메뉴결정 탭의 경우, 게임답변 제출 API의 response로 게임결과를 받아서 다음 화면의 띄움 - 함께메뉴결정 탭의 경우, 별도의 게임결과요청 API를 통해 게임결과를 받도록 함 (서버 메모리 최소화 목적) - 메뉴 데이터를 ViewModel의 배열 타입 프로퍼티에 저장했다가, 다음메뉴버튼을 탭하면 다음 index로 해당 배열에 접근
- 게임 제출을 했는지 확인할 수 있도록 UserDefualt에 Bool 타입으로 저장 - PIN Number 또한 UserDefault에 저장 - 게임 제출을 한 경우 바로 대기 화면으로 넘어갈 수 있도록 구현
- 재시작 버튼을 탭하면서 GameCoordinator를 ChildCoordinator에서 제거함 - CustomColor 타입을 UIColor 익스텐션으로 변경 - Shadow 효과를 적용하기 위해 UIView 익스텐션 추가 - GameCoordinatorDelegate 프로토콜을 Solo/TogetherCoordinatorDelegate로 구분하여 다운캐스팅하도록 개선
- 홈화면의 경우 이미지가 크게 들어가고 그라데이션이 적용되도록 구현 - 카드게임의 경우 검정 필터가 들어갈 수 있도록 구현 - Extension에 그라데이션 적용 메서드 추가
- NetworkConnectionManager 타입 추가 - GameAnswerFactory 타입 추가 - 게임결과대기 화면의 API 수정하여 사용자가 Host인지 여부를 받음 - Host가 아니면 결과확인버튼 isHidden 처리하고, Host가 결과확인버튼을 탭하여 게임이 Closed 되면 버튼이 보이도록 처리
- 네트워크 연경이 안된 경우 NetworkErrorViewController를 띄우도록 구현 - Firebase 연동하여 토큰 받음 - CoordinatorProtocol에 popCurrentPage 추가
- Asset 폴더 및 plist에 pretendard 폰트 추가
- GameCardView radius 증가시킴 - 네비게이션바 및 탭바 등에 커스텀 Font 적용 - 못먹는음식 Cell 디자인 변경 (체크박스 이미지 삭제)
- 온보딩 화면의 스킵버튼 및 화면 구성 수정 - 게임 시작 화면, 결과 대기 화면에 Lottie로 애니메이션 추가 - 결과 화면 화면 구성 수정
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
배경
작업 내용
결과확인하기버튼을 탭하면, 팀원들의 화면에서 hidden 처리되었던 버튼을 보이도록 변경하여 팀원들도 추천메뉴를 확인할 수 있도록 했습니다.게임다시시작하기버튼을 탭한 경우, 해당 사용자의 제출 데이터를 삭제하도록 했습니다.1. 최종메뉴 처리
개인/팀 게임답변을 서버에서 POST 형태로 제출하고, 게임결과로 3개 메뉴와 총 참여인원수를 받아서 나타냈습니다. 사용자의 의사결정을 돕기 위해
다음메뉴보기횟수를 3번으로 제한하였고,다음메뉴보기버튼을 탭하면 ViewModel로부터 다음 메뉴 정보를 받아와서 ViewController에서 메뉴이름과 해당 메뉴의 키워드를 수정하도록 했습니다.서버의 효율성을 높이기 위해 서버개발자와 협의하여 게임결과를 제출할 때 (
ResultSubmissionAPI, POST 메서드)함께메뉴결정 탭이라면 response로 nil을 받고,혼밥메뉴결정 탭이라면 게임결과를 받도록 구분했습니다. 이를 통해 혼밥메뉴결정은 별도의 게임결과 요청 API가 필요하지 않게 되었습니다.2. 결과대기 화면에서 앱을 종료한 경우 재접속하면 해당 화면을 자동으로 띄우도록 구현
결과대기 화면에서 앱을 종료한 경우
TogetherGameSubmittedChecker를 통해 답변제출 여부와 가장 최근의 PIN Number를UserDefault에 저장하도록 구현했습니다. 단순한 Bool타입과 Int타입인 만큼 UserDefault에 저장해도 문제가 없다고 판단했습니다.게임을 제출했을 때
isTogetherGameSubmitted를 true로 바꾸고,게임 시작하기버튼을 눌렀을 때 /게임 다시 시작버튼을 눌렀을 때,결과 확인버튼을 눌렀을 때에는 false로 바꾸도록 했습니다.앱을 종료 후 재실행했을 때에는
MainTabBarCoordinator에서isSubmitted를 확인 후 true면 가장 최근에 제출했던 대기 화면이 보여지도록 했습니다.3. Firebase를 통해 기기별 토큰을 받아 Host를 서버에서 알 수 있도록 구현
Group으로 게임을 생성할 때 사용자의 토큰을 통해 서버에서 게임을 만든
Host가 누구인지 알 수 있도록 해야 했습니다. 따라서 FireBase를 연동했고 그 중FirebaseMessaging을 사용했습니다. 토큰은 메모리에 올라가는 경우 앱이 종료될 때까지 메모리에서 해제되지 않도록 타입 프로퍼티로 선언했습니다.토큰은 아래 메서드를 통해 받았습니다.
PIN Number 생성하기 버튼을 탭한 사용자를 서버에서 Host로 인식하도록 처리했습니다.결과확인하기버튼이 보이도록 합니다.결과확인하기버튼을 누를 때까지 버튼을 Hidden 처리합니다.4. 네트워크 연결상태 확인
Network를 import하고,NetworkConnectionManager타입을 싱글톤으로 구현했습니다. 각 화면에서 네트워크 연결상태를 확인하고, 이상이 있는 경우 오류화면을 나타내어 사용자가 인터넷에 재접속하도록 안내했습니다. 오류 화면에서refresh버튼을 누르면, 네트워크 연결 상태에 따라 다시 오류 화면을 보여주거나, Data를 Fetch하여 정상 화면이 보이도록 했습니다.오류화면을 pop하면서 정상 화면을 보여주기 때문에
viewWillAppear를 사용해 화면이 다시 보이는 경우 데이터를 fetch해서 화면에 띄울 수 있도록 했습니다.5. Lottie를 통해 애니메이션을 추가
Lottie라이브러리를 Package에 추가하여 JSON 파일을 애니메이션으로 나타낼 수 있도록 했습니다. 게임시작준비 화면에서 Circle 애니메이션을 사용했고, 게임결과대기 화면에서 Loading 애니메이션을 활용하여 UX를 개선했습니다.애니메이션을 위한 JSON 파일은 Asset을 통해 관리하고 있습니다.
테스트 방법
리뷰 노트
스크린샷