[swift] Mapbox를 활용한 실시간 위치 기반 친구 추천 및 소개 서비스 개발 방법

서론

현대 사회에서는 소셜 네트워크에 가입하여 많은 친구들과 연결되어 있는 것이 일반적입니다. 그러나 우리는 실제로 친한 친구들과 자주 만나지 않기 때문에 혼자 혹은 제한된 인원과 함께 시간을 보내는 경우가 많습니다. 따라서 실시간 위치 기반 친구 추천 및 소개 서비스는 이러한 문제를 해결할 수 있는 좋은 방법입니다. 이러한 서비스는 사용자의 현재 위치를 기반으로 주변에 있는 친구들을 추천해주고, 새로운 사람들과의 소셜 활동을 도와줍니다.

개발 준비

이번 예제에서는 Mapbox를 사용하여 실시간 위치 정보를 관리하고, 사용자들 간에 위치 정보를 공유합니다. 따라서 아래의 개발 준비 사항을 확인해주세요.

  1. Mapbox 계정 생성 및 API 키 발급: Mapbox 사이트로 가서 계정을 생성하고, API 키를 발급받아야 합니다. 이 키는 애플리케이션에서 Mapbox API를 호출하는 데 사용됩니다.
  2. Xcode 설치: 이번 예제에서는 Swift 언어를 사용하므로 Xcode를 설치해야 합니다. Xcode는 iOS 애플리케이션 개발을 위한 통합 개발 환경입니다.

애플리케이션 개발

이제 애플리케이션을 개발하기 위해 다음 단계를 따라 진행합니다.

1. Mapbox SDK 설치

먼저, Xcode 프로젝트에 Mapbox SDK를 추가해야 합니다. 이를 위해 CocoaPods를 사용하겠습니다. 터미널을 열고 프로젝트 디렉토리로 이동한 후, 다음 명령어를 실행합니다.

$ pod init

프로젝트 디렉토리에 Podfile이 생성되었으니, 편집기로 열어 다음과 같이 수정합니다.

platform :ios, '13.0'

target 'YourApp' do
  use_frameworks!
  pod 'MapboxMaps'
end

저장 후 터미널에서 다음 명령어를 실행하여 Mapbox SDK를 설치합니다.

$ pod install

2. Mapbox API 키 설정

Xcode 프로젝트를 열고 Info.plist 파일을 찾습니다. 이 파일을 열어 아래의 코드를 추가합니다.

<key>MGLMapboxAccessToken</key>
  <string>YOUR_MAPBOX_API_KEY</string>

YOUR_MAPBOX_API_KEY 부분에는 앞서 발급받은 Mapbox API 키를 넣어주세요.

3. 사용자 위치 추적하기

애플리케이션에서 사용자의 위치를 추적하기 위해 CLLocationManager 클래스를 사용합니다. 먼저, CLLocationManager 인스턴스를 생성하고 delegate를 설정합니다.

import CoreLocation

class ViewController: UIViewController, CLLocationManagerDelegate {

    let locationManager = CLLocationManager()

    override func viewDidLoad() {
        super.viewDidLoad()

        locationManager.delegate = self
        locationManager.requestWhenInUseAuthorization()
        locationManager.startUpdatingLocation()
    }

    // 사용자 위치 업데이트 시 호출되는 메서드
    func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
        guard let location = locations.last else { return }

        // 위치를 사용하여 서버에 사용자 정보 업데이트 요청 등을 수행
        updateLocationToServer(location)
    }

    // 사용자 위치 업데이트 실패 시 호출되는 메서드
    func locationManager(_ manager: CLLocationManager, didFailWithError error: Error) {
        print("Location update failed with error: \(error.localizedDescription)")
    }

    func updateLocationToServer(_ location: CLLocation) {
        // 서버에 위치 정보 업데이트 요청 코드 작성
    }

}

위 코드에서 updateLocationToServer 메서드는 사용자의 위치 변경 시 서버에 위치 정보를 업데이트하는 요청을 보낼 수 있도록 합니다.

4. 주변 친구 추천하기

Mapbox SDK를 사용하여 사용자 주변에 있는 친구들을 추천해봅시다. 먼저, MapView를 생성하고 현재 사용자의 위치를 중심으로 보여줍니다.

import MapboxMaps

class MapViewController: UIViewController {

    var mapView: MapView!

    override func viewDidLoad() {
        super.viewDidLoad()

        let mapConfig = MapInitOptions(cameraOptions: CameraOptions(center: CLLocationCoordinate2D(latitude: 37.5665, longitude: 126.9780), zoom: 13))
        mapView = MapView(frame: view.bounds, mapInitOptions: mapConfig)
        view.addSubview(mapView)
    }

}

위 코드에서 CameraOptions의 center 속성 값을 현재 사용자의 위치로 설정합니다. 이를 위해 사용자의 위치를 추적하는 CLLocationManager를 사용하여 현재 위치를 가져올 수 있습니다.

추가로, 친구들의 위치 정보를 서버에서 가져와서 MapView 상에 표시할 수 있습니다.

5. 친구 소개 기능 추가하기

위치 기반 친구 소개 서비스에는 사용자 이벤트를 처리하고, 서버에서 친구 정보를 가져오는 기능도 필요합니다. 한 예로, 사용자가 특정 친구를 선택할 때 해당 친구의 프로필과 연락처 정보를 표시하는 기능을 구현해봅시다.

class FriendDetailViewController: UIViewController {

    var selectedFriend: Friend?

    @IBOutlet weak var nameLabel: UILabel!
    @IBOutlet weak var profileImageView: UIImageView!
    @IBOutlet weak var contactButton: UIButton!

    override func viewDidLoad() {
        super.viewDidLoad()

        nameLabel.text = selectedFriend?.name
        profileImageView.image = selectedFriend?.profileImage
    }

    @IBAction func contactButtonTapped(_ sender: UIButton) {
        guard let phoneNumber = selectedFriend?.phoneNumber else { return }

        // 연락처 앱 열기 등의 동작 코드 작성
        openContactsApp(phoneNumber)
    }

    func openContactsApp(_ phoneNumber: String) {
        // 연락처 앱을 여는 코드 작성
    }

}

위 코드에서 Friend는 친구의 정보를 담는 데이터 모델로, 선택된 친구의 프로필과 연락처 정보를 표시하는 FriendDetailViewController를 구현합니다. 연락처 앱을 여는 등의 동작은 openContactsApp 메서드에서 처리할 수 있습니다.

마무리

이렇게 Mapbox를 활용하여 실시간 위치 기반 친구 추천 및 소개 서비스를 개발하는 방법을 알아보았습니다. 이를 통해 혼자 시간을 보내는 것을 줄이고 새로운 사람들과 소셜 활동을 즐길 수 있는 서비스를 개발할 수 있습니다. 추가로, 사용자 개인정보 보호 및 보안 등에도 신경써야 합니다.

참고 자료