[swift] Swift와 Firebase를 이용한 앱의 실시간 위치 추적 기능 구현하기

지금은 모바일 앱에서 사용자의 위치를 실시간으로 추적하여 다른 사용자와 위치 정보를 공유하는 기능이 많이 사용되고 있습니다. 이번 블로그 포스트에서는 Swift와 Firebase를 이용하여 앱의 실시간 위치 추적 기능을 구현하는 방법을 소개하겠습니다.

Firebase 설정

Firebase를 사용하여 실시간 위치 추적 기능을 구현하기 위해서는 Firebase 프로젝트를 생성하고 앱에 Firebase를 설정해야 합니다. Firebase 프로젝트를 생성한 후 GoogleService-Info.plist 파일을 다운로드하여 앱 프로젝트에 추가합니다. 이 파일은 Firebase와의 연결에 필요한 인증 정보를 포함하고 있습니다.

위치 추적 기능 구현하기

  1. 필요한 CocoaPods 라이브러리를 설치합니다. Podfile에 다음 라인을 추가하고 pod install 명령어를 실행합니다.
pod 'Firebase'
pod 'Firebase/Database'
pod 'Firebase/Auth'
  1. AppDelegate.swift 파일에서 Firebase를 초기화합니다. didFinishLaunchingWithOptions 메서드에 다음 코드를 추가합니다.
import Firebase

FirebaseApp.configure()
  1. 위치 추적을 위한 사용자 정보를 Firebase에 저장하기 위해 User 모델 구조체를 만듭니다. 다음과 같이 User.swift 파일을 생성합니다.
struct User {
    let uid: String
    let name: String
    let latitude: Double
    let longitude: Double
    
    init(uid: String, name: String, latitude: Double, longitude: Double) {
        self.uid = uid
        self.name = name
        self.latitude = latitude
        self.longitude = longitude
    }
}
  1. 위치 정보를 업데이트하는 함수를 구현합니다. LocationManager.swift 파일을 생성하고 다음 코드를 추가합니다.
import CoreLocation

class LocationManager: NSObject, CLLocationManagerDelegate {
    static let shared = LocationManager()
    
    private var locationManager = CLLocationManager()
    
    private override init() {
        super.init()
        configureLocationManager()
    }
    
    private func configureLocationManager() {
        locationManager.delegate = self
        locationManager.desiredAccuracy = kCLLocationAccuracyBest
    }
    
    func startUpdatingLocation() {
        locationManager.startUpdatingLocation()
    }
    
    func stopUpdatingLocation() {
        locationManager.stopUpdatingLocation()
    }
    
    func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
        if let location = locations.first {
            let latitude = location.coordinate.latitude
            let longitude = location.coordinate.longitude
            // Firebase에 위치 정보 업데이트를 위한 코드 추가
        }
    }
}
  1. 위치 업데이트를 위해 ViewController에서 LocationManager를 사용합니다. ViewController.swift 파일을 열고 다음 코드를 추가합니다.
import UIKit

class ViewController: UIViewController {
    override func viewDidLoad() {
        super.viewDidLoad()
        LocationManager.shared.startUpdatingLocation()
    }
  
    override func viewWillDisappear(_ animated: Bool) {
        super.viewWillDisappear(animated)
        LocationManager.shared.stopUpdatingLocation()
    }
}

위 코드에서는 ViewController가 화면에 나타나면 위치 정보 업데이트를 시작하고, 화면에서 사라지면 위치 추적을 중단합니다.

Firebase에 위치 정보 업데이트하기

위치 정보를 Firebase에 업데이트하기 위해서는 Firebase Realtime Database를 사용합니다. 위치 정보를 업데이트하려는 User 객체를 Firebase에 저장하고 업데이트하는 코드를 추가합니다.

import Firebase

func updateLocation(latitude: Double, longitude: Double) {
    guard let currentUserID = Auth.auth().currentUser?.uid else { return }
    
    let userRef = Database.database().reference().child("users").child(currentUserID)
    
    let updates: [String: Any] = [
        "latitude": latitude,
        "longitude": longitude
    ]
    
    userRef.updateChildValues(updates)
}

위 코드에서는 현재 로그인한 사용자의 UID를 가져와 users라는 Firebase 데이터베이스의 하위 노드에 위치 정보를 업데이트합니다.

마무리

이제 위 코드들을 사용하여 앱에 실시간 위치 추적 기능을 구현할 수 있습니다. Firebase를 사용하는 경우, 데이터 싱크 및 실시간 업데이트 등 Firebase의 다양한 기능을 활용하여 위치 정보 공유 기능을 보다 쉽고 빠르게 구현할 수 있으며, Firebase의 Realtime Database는 대용량의 데이터 처리에도 뛰어난 성능을 제공합니다.

Firebase 및 Swift의 더 많은 기능을 확인하려면 Firebase 문서Swift 문서를 참조하세요.