Flutter : background 위치 기록 라이브러리 알아보기 (flutter : Compare libraries recording locations in the background)

koeyhoyh·2022년 7월 29일
4

App_Flutter

목록 보기
14/19

2022-08-03 기준으로 최신화되었습니다.


결론background_locator2background_locationcarp_background_locationflutter_background_geolocation
Android작동은 O 시간보장X작동 X작동 X작동 O (유료)
iOS작동 O작동 X작동 X작동 O (유료)

pub.dev 에서 'background location'이라고 검색만 해도 수십 개의 패키지가 나온다. 하지만, 업데이트가 되지 않아 현재는 지원이 되지 않거나, 각 운영체제의 정책이 바뀌어 사용할 수 없는 것이 많을 것이라고 생각했다.

그리고 해당 패키지가 어느 운영체제에서 정상적으로 잘 작동하는지 등에 관한 자료도 찾기 힘들었다.

그래서, 가장 업데이트가 먼저 된 패키지부터 사용해보기 시작했다.


background_locator_2

https://pub.dev/packages/background_locator_2

원래 사람들이 사용하던 background_locator의 버전 2가 나와서 찾아보고 사용해보았다.

테스트는 background_locator2의 예제 파일을 받아 하루동안 백그라운드로 동작이 계속해서 잘 되는지 확인했다.

Android는 5초마다 현재 위치가 기록되는데 이상하게도 새벽 시간에는 백그라운드에서 꺼지지 않은 상태임에도 불구하고 주기가 불규칙해졌다.

3시 5분→ 3시 15분→ 3시 48분 등등…

7시부터는 다시 정상적으로 5초마다 기록을 계속했다.

(오랫동안 휴대폰을 만지지 않아서 자동으로 절전과 관련된 기능이 켜진 것이 아닐까 생각중)

Android에서는 나름 괜찮은 동작을 보여주었지만 iOS에서는 조금 달랐다.

백그라운드에서도 계속해서 동작을 멈추지 않는 상태라고 나왔지만 위치는 기록하지 않았다. (?)

(status : is running) 상태이지만 위치가 기록되어 화면에 나타나지는 않는 상태였다.

iOS에서는 잘 동작하지 않는 모습을 보여준다.


background_location package

example을 실행하기도 전에 수정해야 할 것들이 있었다.

app/build.gradle 파일에서 complileSdkVersion도 31 이상으로 올려줘야 했고,
android/build.gradle 파일에서도 ext.kotlin_version = '1.7.10' (latest version)으로 바꾸어주었다.

하지만 내부 코드의 문제로 실행되지 않는 것 같았다.
(에러를 어떻게 해결해야 할 지 모르겠다.)
iOS에서는 실행되었는데, Location Service를 시작해도 현재 위치를 받아오지 못했다. (Get Current Location => 무응답)


carp_background_location

설치 과정을 똑같이 따라하고, 실행했더니 iOS에서는 실행되었다.

그러나, 현재 위치는 받아오지 못했다.

Android에서는 아예 실행되지 않았다.

처음에는 이 에러를 해결하려고 해당 파일에 있는 type을 바꿔주고 override 키워드를 없애주다가, '나는 이 라이브러리를 고쳐서 쓰려는 것이 아니라 잘 동작하는 라이브러리를 찾으려는 것이다.' 라는 본래 목적을 다시 한 번 떠올리고

공식 github 페이지에 있는 예제를 그대로 실행시켜주었다.


예전 예제라서 그런지
update를 따라가지 못해서 떠 "높은 버전으로 옮겨줘라" 라는 에러 메시지가 나온다.


flutter_background_geolocation

Android는 유료, iOS는 무료로 제공되고 있는 패키지이다.
여러 곳을 찾아봐도, 작동이 꽤 잘 된다는 평이 많다.

debug 상태로 빌드한다면 테스트해볼 수 있다.
release로 빌드하면 사용할 수 없다.

Android만 라이센스가 필요하다고 적혀있어서 iOS에서 직접 테스트를 해봤더니, release 모드에서는 사용할 수 없었다.

결국 사용하려면 구매가 필요하다. 가격은


모든 테스트를 할 때는 위치 정보 접근 허용을 '항상'으로 해주었으며, iOS에서는 추가적으로 백그라운드 앱 새로 고침을 '활성화' 상태로 해주었다.

라이브러리에 관한 결론

결론background_locator2background_locationcarp_background_locationflutter_background_geolocation
Android작동은 O 보장은 X작동 X작동 X작동 O (유료)
iOS작동 테스트중.작동 X작동 X작동 O

그 외, Android 한정으로
WorkManager + (location or geolocator)
AlarmManager + background_locator2 + geolocator

등의, 여러 가지 라이브러를 같이 사용해 구현하는 방법도 있다.


나는 개인적으로 Android, iOS 둘 다 background_locator2 라이브러리를 사용하는 것을 추천한다.

가장 작동이 매끄럽게 잘 되는 라이브러리이면서, 무료로 사용할 수 있는 거의 유일한 라이브러리 같다.

그러나, Android는 Doze, App standby 모드가 있다.

Doze: 기기를 장시간 사용하지 않으면 백그라운드 Cpu와 네트워크 활동을 지연시킨다.

App standby: 최근에 앱을 사용하지 않았다면 백그라운드 활동 지연시킨다.

위와 같은 이유로 잘 때나, 핸드폰을 몇 시간동안 사용하지 않으면 절전모드가 아니더라도 백그라운드에서 위치 측정이 잘 안될 수 있으므로, 다른 방안도 추가적으로 모색하는 것을 추천하겠다.

profile
내가 만들어낸 것들로 세계에 많은 가치를 창출해내고 싶어요.

0개의 댓글