두 버전을 혼자 개발하면서 Android 앱의 동작과 출시 일정을 iOS 앱에 맞췄습니다.
앱은 Kotlin으로 짰고, AndroidX Views · Hilt · Coroutines를 썼습니다. 여기에 한국의 결제·뱅킹 앱 생태계와 매끄럽게 맞물리도록 Android 11 수준의 딥링크 정책을 갖췄습니다. 네이티브 앱은 쇼핑몰 화면을 Certilife와 똑같은 설정의 웹뷰에 띄웁니다.
한국형 쇼핑몰 앱의 어려운 부분은 결제를 둘러싼 모든 것입니다. Android 11부터 앱은 자기가 호출할 외부 앱을 미리 선언해야 해서, 이 앱은 한국의 결제 · 뱅킹 앱들을 향한 명시적인 허용 목록을 품고 출시됩니다. 쇼핑몰이 결제 인텐트를 쏘면 앱이 그것을 해석해, 설치돼 있으면 해당 앱을 띄우고 없으면 스토어 설치 화면으로 넘깁니다 — 한국 결제 대행사들이 기대하는 "설치하고 결제" 흐름을, 웹 층은 눈치채지 못하게 네이티브가 처리합니다.
토큰 전달과 전화 걸기 인터페이스는 iOS와 같은 규칙을 따르고, 웹뷰가 서버에 자기를 알리는 방식도 같으며, 화면 가장자리까지 채우는 인셋 처리조차 iOS의 safe-area 동작을 기준 삼아 짰습니다. 쇼핑몰에서 사진을 올리면 카메라와 갤러리를 고르는 네이티브 선택창이 열리고, Android의 범위 제한 파일 API를 거쳐 웹의 파일 입력을 정책에 맞는 방식으로 받쳐 줍니다. 그리고 디버그 빌드에만 있는 스위치 하나로, 재빌드 없이 서버 환경을 오갑니다.
