[020] 플러터 (Flutter) Tip - 안드로이드에서 USE_EXACT_ALARM 권한을 SCHEDULE_EXACT_ALARM으로 대체하는 방법

2025. 6. 11. 14:16모바일어플개발/Flutter Tips

반응형

안녕하세요 totally 개발자입니다.

 

최근 업데이트가 계속 됨에 따라 USE_EXACT_ALARM은 앱의 주요 기능이 아닌 이상, 구글 플레이스토어에서 대부분 심사 거절되는 경우가 많습니다. 보통 앱에서 알람을 위해 flutter_local_notification 패키지와 함께 USE_EXACT_ALARM 권한을 지정하는 경우가 있습니다. 

 

보통 권한 확인을 위해 AndroidManifest.xml 파일에

<uses-permission android:name="android.permission.USE_EXACT_ALARM" /> 이렇게 작성하셨을 것입니다.

앱의 주요 기능이 아닌 경우 보통 플레이스토어 앱 심사에서는 해당 권한을 허용해주지 않는 것으로 보입니다. SCHEDULE_EXACT_ALARM를 사용하라고 나오는데 만약 USE_EXACT_ALARM를 제거하고 바로

<uses-permission android:name="android.permission.SCHEDULE_EXACT_ALARM" />만 사용하면 알람 지정시 오류가 발생합니다. (zonedSchedule 같은 메소드) 그래서 아래 설명에도 안드로이드에는 Additional setup이 필요하다고 명시되어 있습니다. 

 

 

위 메소드를 사용하기 위해 USE_EXACT_ALARM를 사용하지 않고 SCHEDULE_EXACT_ALARM 권한만으로 사용하고자 한다면, zonedSchedule 메소드 앞에 안드로이드 환경에서는 requestExactAlarmPermission 메소드를 호출해서 해당 권한을 별도로 받아야 합니다. 

 

예를 들어 아래처럼 만드시면 됩니다.

 

final bool? isExactPermissionAllowed = await FlutterLocalNotificationsPlugin().resolvePlatformSpecificImplementation<AndroidFlutterLocalNotificationPlugin>()?.requestExactAlarmsPermission(); 

 

if (isExactPermissionAllowed == true) { 

   // 원하는 메소드 호출...

}

 

만약 위 메소드로 해결이 되지 않으시는 경우에는 아래 코드로 시도해보실 수 있습니다.

PermissionStatus status = await Permission.scheduleExactAlarm.status;

 

if (!status.isGranted) {

   // 권한 요청

   await Permission.scheduleExactAlarm.request();

}

 

만약 debug 모드에서는 잘 되는데 release 모드에서 되지 않는 경우라면 PlatformException(error, TypeToken must be created with a type argument: new TypeToken<...>() {}; When using code shrinkers (ProGuard, R8, ...) 이런 메시지가 오류로 출력되는 이슈는 proguard-rules가 없거나 코드 내용에 문제가 있어 발생되는 부분으로 android > app 폴더에 proguard-rules.pro 파일을 생성합니다. 다른 분께서 이미 포스팅한 내용이 있어 아래 내용을 참고하시면 될 것 같습니다. https://velog.io/@developer_noah/Flutter-%EB%B0%B0%ED%8F%AC%EC%9A%A9-APK-%EB%B9%8C%EB%93%9C 

 

위와 같이 설정하면 해당 부분의 로직이 실행되면 설정 페이지로 자동으로 이동되어 권한을 허용 여부를 사용자가 지정하도록 되어 있고, 허용하고 돌아오면 그 다음 메소드가 호출되는 방식입니다. 이렇게 해서 테스트해보시면 잘 되는 것은 확인해볼 수 있습니다.

반응형