메타버스 서비스에 Android 개발자가 할 일이 있나요?
발표 내용
• ZEPETO를 개발하는 모바일 개발자가 받는 오해
• ZEPETO Android 구성
• SAA와 Jetpack Navigation Component
• 우리가 업무하는 방식
• 오픈소스 Antonio
모바일 개발자가 할 일이
많지 않지 않아?
ZEPETO를 개발하는
모바일 개발자가 받는 오해
Navigation Graph 사용
Fragment 간의 목적지를 코드가 아닌 Tool
에서 간단히 생성하고 편집
Fragment 간의 경로를 쉽게 파악할 수 있는
장점
Deeplink를 손쉽게 구현할 수 있고, 화면과
매칭가능
Animation 전환에도 용이
구글 Guide에서는..
Navigation Graph 사용
계속 불어나는 Graph를 보면서,,
코드 없이 Tool을 통한 Action의 연결 쉽지 않다.
Direction이 너무 많아져서 Flow 관계가 전혀 눈에 들어오지 않는다.
UI 상에서 찾기란 거의 불가능
Unity나 외부 스킴을 통해 일부 화면으로 바로 이동하는 것이 필요하다.
navArg 생성을 위해선 빌드가 필요했다.(Android Studio 특정버전 이하)
Navigation Graph 사용
현재 사용하는 방식
Navigation Graph의 기능을 사용하지 않고, Activity 정의하는 Manifest와 같이 정의하
는 용도로만 사용
Action, Global Action 사용X
Animation 정의X
Argument 정의는 포함하기
Navigation Graph 사용
현재 사용하는 방식
Fragment간 이동은 NavController에서 바로 Destination Id를 통해 이동하는
navigate() 사용
데이터는 Bundle로 포함
전환 애니메이션이 필요한 경우, navOptions 추가
Dialog 남는 이슈
일반 Activity 구조의 경우, 화면 전환시 해당
Activity와 함께 Dialog가 함께 종료
Single Activity의 Dialog는 내부 Fragment 전
환시에도 유지
Zepeto에서의 Scheme 처리
Navigation Component에서의
명시/암시적 deeplink 수행
앱이 종료된 상태에서 Scheme을 받아 스
플레시화면에서 인증과정을 거치고,
Scheme에 정의된 페이지로 랜딩
특정 화면에서는 스킴처리가 무시되어야 함
Scheme에 따라 복수개의 Fragment를
스텍에 쌓는 구성 필요
Scheme 실행 전 유저상태 체크 필요 (제
재 사용자 등)
Navigation Deeplink
사용불가
앱이 종료된 상태에서 Scheme을 받아 스플레이에서
인증과정을 거치고, Scheme에 정의된 페이지로 랜딩
-> 스킴 해석 이후 lazy하게 navigation 진행
특정 화면에서는 스킴처리가 무시되어야 함
-> 스킴 해석단계에서 현재의 화면 파악
Scheme에 따라 여러개의 Fragment를 스텍에 쌓
는 구성 필요
-> 스킴 해석후 여러번의 navigate 호출
Scheme 실행 전 유저상태 체크 필요 (제재 사용자 등)
-> 스킴 해석단계에서 유저 상태 체크 필요
Global Service 에피소드
• Hwawei, Xiaomi, Vivo, Oppo, Realme, ZTE, Coolpad, Amazon, ChromeBook
• Google Play Service를 사용하지 못하는 나라에 서비스 하는 방법
• 공신폰의 비밀 (Samsung J2 Pro)
• 급한 기기는 용산에서 퀵서비스로
View State 추가 처리
커스텀뷰 구현시 onSaveInstanceState, onRestoreInstanceState 고려 해서 작업
뷰모델을 통한 뷰 상태 유지