[Flutter] Geolocator permission 정리

namtaehyun·2021년 12월 22일
0
post-thumbnail

패키지

https://pub.dev/packages/geolocator/versions/8.0.1
8.0.1 버전 기준으로 작성되었습니다.


Geolocator.checkPermission()

Geolocator Example과 같이 isLocationServiceEnabled() 함수를 우선 호출하여, 위치 서비스를 우선 체크후 checkPermission() 함수를 호출하면, 조금 더 권한 체크 로직이 깔끔합니다.

저의 경우에는 권한을 우선 체크하고, 위치 서비스 체크를 하는 방향으로 진행하다보니 아래 케이스 처럼 구분이 복잡해지는 문제가 발생했습니다.

💻 위치 서비스를 우선 체크하고 권한 체크하는 방향으로 변경했습니다..ㅎㅎ

return

PermissionPlatformDescription
deniedAndroid초기상태, 권한 거부, GPS 서비스 비활성화
deniediOS초기상태
deniedForeverAndroidx
deniedForeveriOS권한 거부, GPS 서비스 비활성화
whileInUseAndroid / iOS앱 사용중 허용
alwaysAndroid / iOS항상 허용(백그라운드 사용 가능)

Geolocator.requestPermission()

iOS

  • 권한 거부시 추가 권한 요청이 되지 않음.
  • GPS가 꺼져있을때 권한 요청이 되지 않음.

Android

  • 권한 거부하더라도 계속 요청이 됨.
  • GPS가 꺼져있어도 권한 요청이 됨.

return

PermissionPlatformDescription
deniedAndroid권한 거부
deniediOSx
deniedForeverAndroidx
deniedForeveriOS권한 거부
whileInUseAndroid / iOS앱 사용중 허용
alwaysAndroid / iOS항상 허용(백그라운드 사용 가능)

Geolocator 설정 페이지 호출

Geolocator.openAppSettings()

Android

  • 권한 설정 페이지로 이동합니다.
  • 해당 페이지에서 권한을 바로 수정 할 수 있습니다.

iOS

  • 개발하고있는 앱의 설정 페이지로 이동합니다.
  • 해당 페이지에서 권한을 바로 수정 할 수 있습니다.

Geolocator.openLocationSettings()

Android

  • 위치 서비스 활성화 페이지로 이동합니다.
  • 해당 페이지에서 위치 서비스를 바로 활성화 할 수 있습니다.

    Android 버전에 따라서 다르지만, Android 11은 시스템 팝업이 호출되어 바로 위치 서비스를 활성화 합니다.

iOS

  • 개발하고있는 앱의 설정 페이지로 이동합니다.
  • 해당 페이지에서 위치 서비스를 바로 활성화 할 수 없습니다.
  • iOS는 특정 설정 페이지로 이동하는게 불가능합니다.

    사용자가 위치 서비스를 활성화 할 수 있도록 안내가 필요합니다.

profile
Frontend Developer

0개의 댓글