라벨이 지도앱인 게시물 표시

[Android] 구글·네이버·카카오 지도 길찾기 연동 및 Android 11 패키지 가시성(Queries) 대응

관광 앱이나 위치 기반 서비스를 만지다 보면 장소 상세 화면에서 외부 지도 앱(구글지도, 네이버지도, 카카오맵)으로 길찾기를 연결해야 하는 경우가 필수적으로 생깁니다. 처음에는 단순하게 URI 스킴 하나 호출하면 끝날 줄 알았는데, 막상 여러 기기에서 테스트하고 운영하다 보면 예외 상황이 계속 터지더군요. 특정 지도 앱이 안 깔려 있어서 앱이 뻗거나, 서버에서 넘어온 좌표 데이터가 일시적으로 누락되어 엉뚱한 곳을 가리키는 등의 문제가 발생합니다. 매번 화면마다 코드를 복사해서 붙여넣기에는 관리도 안 되고 조만간 지도 앱 정책이 바뀌면 골치가 아파집니다. 그래서 아예 외부 앱 실행 기능을 공통 모듈로 분리해서 안전하게 처리하는 방식으로 구현했습니다. 나중에도 꺼내 쓰려고 블로그에 기록해 둡니다. 1. 내가 겪은 문제와 설계 기준 이래저래 앱을 배포하고 운영하면서 자주 놓치기 쉬운 예외 상황들은 대략 이렇습니다. 사용자 기기에 특정 지도 앱이 무조건 설치되어 있다고 가정하고 호출함 (미설치 시 크래시 위험) 좌표 정보(위경도)가 비어 있거나 잘못되었는데도 그대로 Intent를 던짐 앱이 없을 때 마켓(Play 스토어)으로 보내거나 웹 지도(브라우저)로 띄워주는 안전장치(Fallback)가 없음 Android 11(API 30) 이상에서 도입된 패키지 가시성(Package Visibility) 정책을 고려하지 않아 앱 감지가 안 됨 테스트 코드나 공개 저장소에 실제 운영 서버 URL이나 특정 관광지 좌표를 그대로 하드코딩함 결국 핵심은 단순히 "지도 앱을 여는 것"이 아니라, [좌표 검증 → 앱 설치 여부 확인 → 안전한 Intent 생성 → 실패 시 웹/마켓 Fallback 처리 → 사용자 안내]까지의 흐름을 하나의 파이프라인으로 묶어주는 것입니다. 지도 앱 연동 흐름도 단계 설명 실패 시 처리 좌표 검증 위도와 경도 값이 정상 범위에 있는지 확인 사용자에게 "위치 정보가 없다"고 안내 후 중단 지도 앱 선택 사용자가 원하는 지...