dev/flutter

권한

wlrn566 2023. 1. 25. 15:08

permission_handler 라이브러리 추가

 

 

permission_handler | Flutter Package

Permission plugin for Flutter. This plugin provides a cross-platform (iOS, Android) API to request and check permissions.

pub.dev

IOS

1. Podfile 에 해당 코드 추가하기

post_install ~ 코드가 존재한다면 지우고 추가하기
 
필요한 권한만 주석 해제
post_install do |installer|
  installer.pods_project.targets.each do |target|
    flutter_additional_ios_build_settings(target)
    target.build_configurations.each do |config|
      config.build_settings['IPHONEOS_DEPLOYMENT_TARGET'] = '11.0'
      config.build_settings['GCC_PREPROCESSOR_DEFINITIONS'] ||= [
        '$(inherited)',
        
        ## dart: PermissionGroup.calendar
        # 'PERMISSION_EVENTS=1',

        ## dart: PermissionGroup.reminders
        # 'PERMISSION_REMINDERS=1',

        ## dart: PermissionGroup.contacts
        # 'PERMISSION_CONTACTS=1',

        ## dart: PermissionGroup.camera
        # 'PERMISSION_CAMERA=1',

        ## dart: PermissionGroup.microphone
        # 'PERMISSION_MICROPHONE=1',

        ## dart: PermissionGroup.speech
        # 'PERMISSION_SPEECH_RECOGNIZER=1',

        ## dart: PermissionGroup.photos
        # 'PERMISSION_PHOTOS=1',

        ## dart: [PermissionGroup.location, PermissionGroup.locationAlways, PermissionGroup.locationWhenInUse]
        'PERMISSION_LOCATION=1'

        ## dart: PermissionGroup.notification
        # 'PERMISSION_NOTIFICATIONS=1',

        ## dart: PermissionGroup.mediaLibrary
        # 'PERMISSION_MEDIA_LIBRARY=1',

        ## dart: PermissionGroup.sensors
        # 'PERMISSION_SENSORS=1',   

        ## dart: PermissionGroup.bluetooth
        # 'PERMISSION_BLUETOOTH=1',

        ## dart: PermissionGroup.appTrackingTransparency
        # 'PERMISSION_APP_TRACKING_TRANSPARENCY=1',

        ## dart: PermissionGroup.criticalAlerts
        # 'PERMISSION_CRITICAL_ALERTS=1'
      ]
    end 
    # End of the permission_handler configuration
  end
end

배포 대상 버전 설정 필요하다고 하는 문구

이러한 오류가 뜬다면 위 코드에 아래 코드 추가해주기

config.build_settings['IPHONEOS_DEPLOYMENT_TARGET'] = '11.0'

 

2. Info.plist 파일에 필요 권한문구 넣어주기

<key>NSLocationWhenInUseUsageDescription</key>
<string>This app needs access to location when open.</string>
<key>NSLocationAlwaysAndWhenInUseUsageDescription</key>
<string>This app needs access to location when open.</string>

 

안드로이드

1. gradle.properties 에서 AndroidX 설정 체크

android.useAndroidX=true
android.enableJetifier=true

 

 

2. AndroidManifest 파일에 permission 추가

 

 <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
 <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />

 

권한 내용에 대한 목록 및 설명

 

Manifest.permission  |  Android Developers

 

developer.android.com

 

3. android > app > build.gradle - compileSdkVersion 설정

android {
    compileSdkVersion 33 # 필요한 버전 명시
   	...
}

 

flutter 코드 내에서 권한 체크 실행

Future<bool> permission() async {
  var requestStatus = await Permission.location.request(); // 권한 요청
  var status = await Permission.location.status; // 권한 상태

  log("requestStatus ${requestStatus.name}");
  log("status ${status.name}");

  if (status.isGranted) {
    log("isGranted");
    return true;

  } else if (status.isLimited) {
    log("isLimited");
    return true;

  } else if (requestStatus.isPermanentlyDenied || status.isPermanentlyDenied) {
    log("isPermanentlyDenied");
    openAppSettings();
    return false;

  } else if (status.isRestricted) {
    log("isRestricted");
    openAppSettings();
    return false;

  } else if (status.isDenied) {
    // 권한 요청 거절
    log("isDenied");
    return false;
    
  } else {
    return false;
  }
}