GithubHelp home page GithubHelp logo

team1-android's Introduction

WafflyTime

프로젝트 소개

와브리타임은 에브리타임의 클론 서비스로, 학내 구성원들의 소통 플랫폼입니다. 원하는 주제로 게시판을 생성하여 게시글과 댓글, 좋아요로 의견을 주고받을 수 있으며, 일대일 쪽지 주고받기도 가능합니다.

만든 사람들

김민중(arkrangian) 심우진(wjshim2003) 서지희(seozzi) 송동엽(eastshine2741)
회원가입, 소셜로그인 게시판, 게시글, 댓글 메인페이지, 소셜로그인 마이페이지, 채팅

UI

제목 없음

1. 로그인 페이지

  • 앱을 켜면 가장 먼저 나타나는 화면입니다. 이미 등록된 회원 정보로 로그인하거나 회원가입, 소셜로그인을 할 수 있습니다.

2. 회원가입 페이지

  • 아이디, 비밀번호, 닉네임을 입력하여 회원가입을 진행할 수 있습니다. 회원가입 후 바로 학교 이메일 페이지로 이동할 수 있으며, 그러지 않을 경우 후에 마이페이지에서 이메일 인증을 할 수 있습니다.

3. 메인페이지

  • 기존 에타 메인페이지와 마찬가지로 학교 홈, 열람실 현황, 셔틀 버스, 학사 공지, 학사 일정, 도서관에 관한 정보를 바로 url로 접근할 수 있는 버튼을 만들었습니다. 학교 홈은 mysnu 메인페이지로, 열람실 현황 및 공지와 관련된 버튼들은 서울대학교 공식 페이지 내부의 관련 페이지로, 도서관 버튼은 중앙도서관 url로 연결됩니다.
  • best 게시판을 메인 홈 페이지에서 바로 볼 수 있습니다. 이 페이지는 전체 보드 게시판의 일부를 가져온 것으로, 가장 사용자가 많이 사용할 법한 게시판들로 구성해 두었습니다.
  • 와플 스튜디오의 조그마한 광고입니다.👀

4. 전체 게시판 페이지

  • 게시판들의 목록을 조회할 수 있습니다. 내가 쓴 글, 댓글 단 글 등을 조회할 수 있으며, 게시판들을 검색할 수 있습니다.

5. 개별 게시판 페이지

  • 게시판을 선택했을 때 나타나는 화면입니다. 해당 게시판의 게시글들을 이미지와 함께 미리볼 수 있습니다. 게시글을 작성 페이지로 이동할 수 있습니다.

6. 게시글 페이지

  • 게시글을 선택했을 때 나타나는 화면입니다. 게시글 제목, 내용, 이미지를 조회할 수 있습니다. 댓글, 대댓글을 작성할 수 있습니다.

7. 게시글 작성 페이지

  • 게시글을 작성할 수 있는 페이지입니다. 제목과 내용을 입력할 수 있고 이미지를 첨부할 수 있습니다. 익명 여부와 질문 여부를 선택할 수 있습니다.

8. 채팅 목록 페이지

  • 채팅 목록을 조회할 수 있는 페이지입니다. 웹소켓을 이용하여 자동으로 새로고침됩니다. 최근 대화가 있었던 순으로 정렬됩니다. 읽지 않은 메시지를 조회할 수 있습니다.

9. 채팅방 페이지

  • 채팅 메시지를 보내고 받을 수 있는 페이지입니다. 웹소켓을 이용하여 실시간으로 업데이트됩니다. 상단 앱 바의 메뉴 버튼을 통해 해당 채팅방을 차단/차단해제할 수 있습니다.

10. 마이페이지

  • 유저 및 앱 관련 설정을 할 수 있는 페이지입니다. 회원가입 시 학교인증을 하지 않았다면 이곳에서 진행할 수 있습니다. 비밀번호 변경, 닉네임 설정, 프로필 이미지 변경, 로그아웃을 할 수 있습니다. 다크모드를 설정할 수 있습니다.

기능 상세

커서기반 페이지네이션

  • 무한스크롤에서 유저가 새로운 정보를 누락없이 제공받을 수 있도록 프로젝트에 커서기반 페이지네이션을 적용시켰습니다.
  • 구현은 주로 Flow, MutableList로 했으나 paging 라이브러리를 사용하기도 하였습니다.(채팅목록)

소셜로그인(웹뷰 적용)

  • RestApi로 Authorization Code를 넘겨주기 위하여 프로젝트에 웹뷰를 추가하였습니다.
  • Android Sdk를 이용하여 서버쪽으로 Auth Token을 넘겨주는 방법도 있었지만 웹쪽이 이미 Rest Api를 이용하고 있었고 서버 로직이 완성되있는 상황이어서 RestApi를 사용하기로 했습니다.
  • Rest Api 응답이 Intent로 카카오톡을 호출하게끔 만들고 싶었지만 실패했습니다. (웹뷰에 크롬을 popup처럼 띄워서 해결할 수 있다고 듣긴 했습니다.)

AAC lifecycle 관리

  • 게시판 작업을 할 때 가장 어려웠던 점은 event에 따라 게시판이 의도된 동작을 하도록 만드는것이었습니다. 예를들어 유저가 글쓰기 layout에서 글쓰기 버튼을 눌렀다면, 게시물 목록으로 돌아오는 동시에 유저에게 새롭게 업데이트 된 게시물 목록이 보여야 합니다. 하지만 글쓰기 layout에서 취소를 눌렀다면 굳이 게시물 목록이 업데이트 될 필요가 없습니다. 이처럼 세밀한 동작로직을 구현하는 과정에서 많은 버그에 시달렸습니다.
  • 따라서 복잡성을 줄이기 위하여 ViewModel에서 Fragment로의 데이터 전달을 자동화 하였고 소통창구도 하나로 통일하였습니다.(일부 Fragment/ViewModel 에만 적용함)
  • 데이터 전달을 자동화하기 위해서 StateFlow, SharedFlow를 사용하였습니다.
  • 소통 창구를 통일시키기 위하여 StatusCode, ErrorCode, ErrorMessage, Data를 담는 DataClass를 만들고 이것만을 이용해 ViewModel에서 Fragment로의 데이터 전달이 이뤄지도록 했습니다.

Network Interceptor

  • Accesss Token refresh 작업을 자동화하기 위해 okHttp3의 Network Interceptor를 사용하였습니다.
  • 모든 response 패킷을 검사해 Token에 오류가 있다는 응답을 받은 경우, refresh를 진행한 뒤 다시 해당 request를 보내도록 구현했습니다.

Web Socket

  • okHttp3의 웹소켓 기능을 이용하였습니다.
  • okHttp3 클라이언트를 생성하고, client.newWebSocket()을 실행합니다. 이때 인자로 추상클래스 WebSocketListener를 구현한 object를 생성하여 인자로 넘겨줍니다.
  • WebSocketListener의 onOpen()에서 webSocket 객체를 받아 저장해 둡니다.
  • 메시지의 송신, 연결 종료는 받아둔 webSocket 객체의 send() 메서드를 이용합니다.
  • 메시지의 수신과 에러처리는 WebSocketListener의 onMessage()와 onFailure()를 이용합니다.

Preference

  • Androidx에서 지원하는 기능으로, 앱의 환경설정 화면을 별도의 레이아웃 지정 없이 빠르게 만들 수 있게 햬주며 key-value 쌍을 SharedPreference에 자동으로 저장할 수 있습니다.
  • 다른 화면들과 달리 별도의 activity로 실행됩니다.
  • 항목을 클릭하면 관련된 fragment로 이동하여 설정할 수 있습니다.

team1-android's People

Contributors

wjshim2003 avatar arkrangian avatar eastshine2741 avatar seozzi avatar yeonghyeonko avatar

Stargazers

 avatar  avatar ihyungsuk avatar

Watchers

Force, Mingyu avatar 양주현 avatar

team1-android's Issues

버그 및 개선 사항

  1. 다크모드 : 다크모드 적용시 일부 아이콘 및 게시판 제목의 색상 설정이 제대로 되자않아 잘 보이지 않거나, 자세히 봐야 보이는 등의 문제가 있습니다.

  2. 댓글 삭제 : 게시물에 댓글 삭제가 실시간으로 이루어지지 않습니다. 경험적으로 봤을 때 해당 댓글 삭제는 빠르게 이루어지지 않을 시 사용자는 정보가 변경되지 않을 줄 알고, 이미 삭제된 댓글을 삭제하려고 하는 경험이 있을 수 있습니다. 그러면 400에러를 통해 해당 메시지는 이미 삭제되었다고 나옵니다.

  3. 댓글 수정 : 댓글 수정이 실시간으로 이루어지지 않습니다. 200응답이 나오고 서버에는 반영이 되나 UI 갱신이 안됩니다. 댓글 입력 시 Edit Text가 초기화 되지 않아서 한번 댓글 수정 시 다시 새로운 댓글 입력을 할 수 없고 계속 수정만 이루어집니다. Edit text와 입력을 위한 벡터 아이콘(ic_baseline_edit_24)가 너무 하단에 있어서 불편한 점이 있어서 키보드의 엔터 버튼을 완료 버튼으로 바꾸거나 하단에서 뷰를 살짝 띄우는게 좋을 것 같습니다.

  4. 게시물 수정 : 게시물 수정 후 완료버튼 클릭 시 위로 스크롤 해서 새로고침 해야 수정 사항이 반영됩니다. 그리고 한번 수정 시 상단에 메뉴 버튼이 사라져서 새로고침, 게시물 수정, 게시물 삭제 기능을 사용할 수 없습니다. 나갔다 다시 들어와야합니다. 또한 게시물 수정을 통해서 해당 게시물로 이동 시 Edit text의 하단이 짤리는 현상이 있습니다. 이 때 사진 등록을 한번 수행하면 짤림 현상이 해결되어 Edit text가 전부 보이게 됩니다.

  5. 게시물 등록 : 게시물 등록, 수정 시 키보드가 UI를 가려서 사용자가 게시물에 글이 제대로 입력되었는지 보려면 뒤로가기를 눌러 키보드를 없애야 볼 수 있습니다. 해당 페이지 Layout을 Relative Layout으로 하면 좋을 것 같습니다. 또한 게시물의 제목과 내용의 텍스트 사이즈가 같아서 제목과 내용이 구별이 안가니 텍스트 사이즈에 차별을 두면 좋을 것 같습니다.

  6. 사진 등록 : 게시물에 사진 등록 후 완료버튼 클릭 시java.lang.NullPointerException 에러가 발생하며 게시물로 이동하지 않는 버그가 있습니다. 기다리면 navigate action 및 수정, 등록 사항이 반영이 될 때도 있습니다. 또한 게시물 수정 시에 자신이 등록했던 사진을 볼 수 없습니다. 수정 중 새로 등록하는 사진도 보이지 않습니다.

  7. 가끔 게시물 리스트 로딩 시 게시물들이 두배, 세배로 복사가 되는 현상이 있습니다. 경험적으로 한 게시물 탐색 후 뒤로가기 버튼을 누를 때마다 복사가 되는 것 같습니다.

  8. 추가적으로 토스트 메시지(게시물 로딩중, 댓글 로딩중, 게시물 로딩 완료, 댓글 로딩 완료) 등이 너무 많고 메시지가 나타났다가 사라지는 시간이 너무 길어서 신경쓰이고, 불편합니다....

  9. 비밀번호 변경 : 카카오로그인 시 로그아웃을 수행할 수 없어서(재로그인을 안해봐서) 기억이 희미하지만 아마 비밀번호를 따로 생성하지 않았던 것으로 기억을 합니다. 소셜 로그인 시 비밀번호 변경 버튼을 비활성화해야할 것 같습니다. 비밀번호가 없는데 비밀번호변경 시도시 비정상 종료가 됩니다.

여러 버그와 개선할 사항

소셜로그인

네이버, 구글, 깃허브 로그인이 안 됨.

카카오 로그인 시

닉네임 입력창에 엔터가 입력되어
텍스트 입력창이 커짐.
키보드가 내려가지 않고
엔터를 눌러도 입력이
종료되지 않아 회원가입 마무리가 어려움.

다크 모드시

글자색은 변경되는데
보드 배경색은 변경되지 않아
글자가 보이지 않는 버그가 남.

보드 및 게시물

댓글에 서로 다른 익명 유저가 댓글을 달았는데
익명 번호가 모두 같게 나옴

댓글 수정이 밖에 나갔다와야 적용됨.
댓글 삭제가 밖에 나갔다와야 적용됨.

모든 게시판 리스트 뷰에서
한 글을 선택해 디테일뷰에 다녀오면
리스트가 다시 추가되어
같은 항목이 2배로 늘어남.

가끔 게시물에서 상단바의 뒤로가기 버튼이
잘 작동되지 않음.
게시물 좋아요 취소 기능이 없음.
스크랩 여부를 게시물에서 확인할 수 없음.

검색

홈에서 검색 버튼을 누르면 로그인 창이 뜸.

보드의 리스트 디테일뷰에 들어가서
검색 버튼을 눌러도 검색결과가 제대로 표시 안됨.

쪽지

쪽지를 보낸 시간이 제대로 표시되지 않음

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.