[flutter] 플러터 geolocator와 Firebase를 이용한 실시간 위치 공유 애플리케이션 개발

개요

지금은 모바일 앱 개발에서 위치 정보를 사용하는 애플리케이션은 매우 일반화되었습니다. 이 튜토리얼에서는 플러터 프레임워크의 geolocator 패키지와 Firebase를 사용하여 실시간 위치 공유 애플리케이션을 개발하는 방법에 대해 알아보겠습니다.

필요한 패키지 가져오기

먼저, 플러터 프로젝트에 geolocator 패키지와 firebase_core, firebase_database 패키지를 추가해야 합니다. 이를 위해 pubspec.yaml 파일을 열고 다음과 같이 의존성을 추가합니다:

dependencies:
  flutter:
    sdk: flutter

  geolocator: ^7.0.3
  firebase_core: ^1.4.0
  firebase_database: ^7.1.0

의존성을 추가한 후에는 flutter pub get 명령어를 사용하여 패키지를 다운로드합니다.

위치 권한 설정

앱에서 위치 정보를 사용하기 위해서는 앱에서 위치 권한을 요청해야 합니다. 먼저, AndroidManifest.xml 파일에 다음 권한을 추가해야 합니다:

<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>

또한, Info.plist 파일에 다음 키와 값도 추가해야 합니다:

<key>NSLocationWhenInUseUsageDescription</key>
<string>앱 사용 중에만 위치 정보를 사용합니다.</string>

위치 정보 가져오기

geolocator 패키지를 사용하여 현재 위치를 가져오려면 다음 코드를 사용할 수 있습니다:

import 'package:geolocator/geolocator.dart';

Position? currentPosition; // 위치 정보 객체

void getCurrentLocation() async {
  try {
    currentPosition = await Geolocator.getCurrentPosition(
      desiredAccuracy: LocationAccuracy.high,
    );
    print(currentPosition);
  } catch (e) {
    print(e);
  }
}

이 코드는 getCurrentPosition 메서드를 사용하여 현재 위치를 가져옵니다. desiredAccuracy 매개변수를 사용하여 위치 정보의 정확도를 설정할 수 있습니다.

위치 정보가 성공적으로 가져와진 후에는 currentPosition 변수에 위치 정보가 저장됩니다. 이제 위치 정보를 Firebase로 전송하여 실시간 위치 공유를 구현할 수 있습니다.

Firebase 설정

Firebase 콘솔에서 프로젝트를 설정하고, 앱을 추가한 후에는 google-services.json 파일을 프로젝트에 추가해야 합니다. 이 파일은 Firebase에서 제공하며, 안드로이드 앱을 위한 Firebase 구성 정보를 포함하고 있습니다.

위치 정보 Firebase에 저장하기

Firebase에 위치 정보를 저장하려면 Firebase의 데이터베이스 서비스를 사용해야 합니다. 먼저, Firebase 데이터베이스를 초기화하고 위치 정보를 저장하는 함수를 작성해보겠습니다:

import 'package:firebase_core/firebase_core.dart';
import 'package:firebase_database/firebase_database.dart';

void saveLocationToFirebase() {
  final databaseRef = FirebaseDatabase.instance.reference().child('locations');
  final location = <String, dynamic>{
    'latitude': currentPosition?.latitude,
    'longitude': currentPosition?.longitude,
  };
  try {
    databaseRef.push().set(location);
    print('Location saved to Firebase!');
  } catch (e) {
    print(e);
  }
}

이 코드는 Firebase 데이터베이스에 locations라는 이름의 노드를 만들고, 위치 정보를 저장합니다. push() 메서드를 사용하여 고유한 키를 생성하고, set() 메서드를 사용하여 위치 정보를 저장합니다.

위치 정보 실시간 공유하기

위치 정보를 실시간으로 공유하기 위해서는 Firebase의 실시간 데이터베이스 서비스를 사용해야 합니다. 이를 위해 데이터베이스 옵저버를 등록하여 데이터베이스에서 위치 정보가 변경될 때마다 알림을 받는 코드를 작성해보겠습니다:

databaseRef.onChildChanged.listen((event) {
  final location = event.snapshot.value;
  final latitude = location['latitude'];
  final longitude = location['longitude'];
  // 위치 정보 업데이트 로직 추가
});

위 코드는 onChildChanged 이벤트를 수신하고, 변경된 위치 정보를 가져옵니다. 이후 위치 정보 업데이트 로직을 구현하여 실시간으로 위치 정보를 공유할 수 있습니다.

결론

이 튜토리얼에서는 플러터의 geolocator 패키지와 Firebase를 사용하여 실시간 위치 공유 애플리케이션을 개발하는 방법을 알아보았습니다. 위치 정보를 가져오고 Firebase에 저장하며, 실시간으로 위치 정보를 공유하는 간단한 앱을 개발할 수 있습니다.

더 자세한 내용은 다음 참고 자료를 확인하십시오.

참고 자료