React Native/공통

iOS 실시간 위치 정보 가져오기 - 확장판

잉여개발자 2024. 12. 21. 13:08
반응형

사용자의 위치 정보를 계속 가지고오는 작업을 진행했었다. 

이번에는 사용자의 위치 정보를 일정 거리 이상 이동했을 때 가지고 오는 방법을 알아보려고 한다. 

실시간으로 계속 가지고 온다면 위치 확인 성능은 좋겠지만 배터리 사용량은 증가할테니깐 상황에 맞는 필터를 건다면 

성능도 잡고, 기능도 구현하는 좋은 방향이 되지 않을까?? 

 

본 글은 앞선 위치 정보 가지고 오기 글을 기준으로 작성했기 때문에 전체적인 코드는 나오지 않습니다.

만약 해당 기능이 필요하다면 글을 먼저 확인 후 여길 다시 찾아주세요! 

 

distanceFilter

locationManager 에서 사용할 수 있는 옵션 중 하나이다. 사용하면 설정해준 거리만큼 이동해야지 다시 호출된다. 

- (instancetype)init {
  self = [super init];
  if (self) {
    self.locationManager = [[CLLocationManager alloc] init];
    self.locationManager.delegate = self;
    
    // iOS 14 이상에서는 정확도 권한을 요청할 수 있습니다.
    if (@available(iOS 14.0, *)) {
      self.locationManager.desiredAccuracy = kCLLocationAccuracyBest;
    }
      
    // 위치 서비스 권한 요청
    [self.locationManager requestWhenInUseAuthorization];
    [self.locationManager requestAlwaysAuthorization];
    
    self.locationManager.desiredAccuracy = kCLLocationAccuracyBest;
    self.locationManager.distanceFilter = 10; // 10m 이동할 때마다 업데이트 
    
    // 백그라운드에서도 위치 업데이트를 받을 수 있도록 설정 (iOS 9 이상)
    if ([self.locationManager respondsToSelector:@selector(setAllowsBackgroundLocationUpdates:)]) {
      self.locationManager.allowsBackgroundLocationUpdates = YES;
    }
    
    self.locationManager.pausesLocationUpdatesAutomatically = NO;

    // showsBackgroundLocationIndicator 설정 (iOS 11 이상)
    if (@available(iOS 11.0, *)) {
      self.locationManager.showsBackgroundLocationIndicator = YES;
    }
  }
  return self;
}

설정 하는 것도 아주 간단하다. 

초기화 할 때 추가해주면 된다. 설정해두면 startUpdatingLocation 함수가 설정해둔 거리 이후에 호출된다. 

 

self.locationManager.distanceFilter = 10;

단위는 m 단위로 10을 넣어주면 10m의 거리를 이동한 뒤에 동작한다는 뜻이다. 

비교적 높은 정확도가 필요하다면 값을 낮게 주면 자주 호출되면서 GPS 정보를 많이 호출할 수 있을 것이며, 크게하면 

호출되는 횟수는 줄어들겠지만 배터리 소모량은 비교적 적어질 것이다. 

 

중간에서 밸런스를 잘 맞추는게 중요하다.

 

startMonitoringSignificantLocationChanges

앞서 알아본 distanceFilter는 내가 원하는 거리를 설정해서 해당 거리를 이동했을 때 호출된다면 

이번에 사용할 것은 시스템에서 설정된 거리만큼 이동해야지 호출시키는 방법이다. 

RCT_EXPORT_METHOD(startMonitoringSignificantLocationChanges) {
  [self.locationManager startMonitoringSignificantLocationChanges];
}

RCT_EXPORT_METHOD(stopMonitoringSignificantLocationChanges) {
  [self.locationManager stopMonitoringSignificantLocationChanges];
}

사용 방법은 간단하다. 

실행하는 함수와 종료하는 함수를 추가로 설정해줘야 하지만 따로 거리를 설정할 필요는 없다. 

 

두가지 중 원하는 방법으로 즐거운 개발을 하세요~!

혹은 더 좋은 방법이 있다면 알려주시면 더 감사하구요!

반응형