flutter 앱에서 앱으로 이동시키기, 구글맵 이동? 그거 어떻게해?
앱에서 어떻게 두 서비스를 연동하고, 좌표를 안전하게 Google Maps에 전달할 수 있을까?
Dec 11, 2024
우리가 사용하는 지도 서비스는 Leaflet으로 결정했지만, 네비게이션은 Google Maps를 사용하기로 한 상황이었다. 그렇다면 앱에서 어떻게 두 서비스를 연동하고, 좌표를 안전하게 Google Maps에 전달할 수 있을까? 이 문제를 해결하기 위해 많은 고민을 했고, 최종적으로 안전하고 효율적인 방법을 구현했다.
import 'package:flutter/material.dart'; import 'package:geolocator/geolocator.dart'; import 'package:url_launcher/url_launcher.dart';
나는 좌표를 가져오는
geolocator
와 URL을 실행하는 url_launcher
를 사용하여 구현했다. 첫 번째로, geolocator
를 활용해 현재 위치 좌표를 가져오고, 이를 url_launcher
를 통해 적절한 URL에 전달하여 Google 지도를 안전하게 열어주는 방식을 적용했다.이 과정에서 가장 중요했던 점은 현재 위치 정보를 정확히 가져오는 것과 Google 지도 URL을 올바르게 구성하여 안정적으로 실행하는 것이었다. 이를 통해 Google Maps 앱이 설치되어 있으면 앱을 열고, 그렇지 않은 경우 브라우저를 통해 Google Maps를 실행하도록 구현했다.
이러한 접근은 플랫폼 간의 호환성을 유지하면서도 사용자 경험(UX)을 고려한 효율적인 해결책이었다.
Position position = await Geolocator.getCurrentPosition(); double currentLat = position.latitude; double currentLng = position.longitude;
현재 위치 가져오기
Geolocator
를 사용하여 현재 위치의 위도와 경도를 가져온다.
- 위치 정보는 네비게이션 출발지(
saddr
또는origin
)로 사용됩니다.
final googleMapsAppUrl = "comgooglemaps://?saddr=$currentLat,$currentLng&daddr=$destLat,$destLng"; final googleMapsWebUrl = "https://www.google.com/maps/dir/?api=1&origin=$currentLat,$currentLng&destination=$destLat,$destLng";
Google Maps URL 구성
- 앱 URL (
comgooglemaps://
): - Google Maps 앱이 설치된 경우 사용.
saddr
: 출발지 좌표,daddr
: 도착지 좌표.
- 웹 URL (
https://www.google.com/maps
): - 앱이 설치되지 않은 경우 브라우저에서 Google Maps를 열도록 설정하여 사용자 경험을 극대화 시켰습니다.
if (await canLaunch(googleMapsAppUrl)) { await launch(googleMapsAppUrl); } else if (await canLaunch(googleMapsWebUrl)) { await launch(googleMapsWebUrl); } else { ScaffoldMessenger.of(context).showSnackBar( const SnackBar(content: Text("지도 앱을 열 수 없습니다.")), ); }
canLaunch
:- URL이 실행 가능한지 확인하여 적합한 옵션 선택할 수 있는데 우리는 구글맵으로 고정했다.
- 앱 URL이 실행 가능하면 Google Maps 앱을 실행한다.
- SnackBar:
- 두 URL 모두 실행할 수 없는 경우 사용자에게 알림 메시지 표시.
} catch (e) { print("Error fetching current location: $e"); ScaffoldMessenger.of(context).showSnackBar( const SnackBar(content: Text("위치 정보를 불러올 수 없습니다.")), ); }
오류 처리
- 위치 정보 가져오기에 실패하거나 URL 실행 중 오류가 발생한 경우 SnackBar로 사용자에게 알림
- 예외 발생 시 디버깅을 위해 에러 로그 출력해준다.
이렇게 하여 구글맵으로 이동하는 화면을 정상적으로 만들었고 해당하는 과정에서 네비게이션이 실행되는 것 까지 완료하였다!
Share article