Flutter Notification Permission

BYSON STUDIO·2023년 9월 18일
0

거의 모든 앱에 푸시가 들어가고, FCM을 사용한다

당연하게도 Push에 대한 권한 작업을 해줘야한는데

IOS
Android < SDK 33
Android >= SDK 33
보통 세 타입으로 구분 한다

/첫 설치시 권한사용자 AlertHas Permanently Denied권한 확인 / 획득
IOSX첫 한번만 OXFirebaseMessaging
ANDROID < 33OXXFirebaseMessaging
ANDROID >= 33X첫 두번만 OOPermission Handler

1. 권한 확인 / 획득

우선 IOS와 ANDROID < 33에는 Permanently Denied 권한이 없다.

즉 아래 두개를 통해 얻고, 요청 결과 받는 Permission을 그대로 쓰면 되고

  • FirebaseMessaging.instance.getNotificationSettings
  • FirebaseMessaging.instance.requestPermission

아래 두 경우에는

  • IOS : 첫 Alert에서 거절시
  • ANDROID < 33 : (첫 설치시 권한 있으므로) 앱 세팅가서 권한 해제 했다면
    항상 AuthorizationStatus.denied 일것이다

해서

상태호출
AuthorizationStatus.notDeterminedFirebaseMessaging.instance.requestPermission
AuthorizationStatus.deniedAppSettings.openAppSettings(type: AppSettingsType.notification)
AuthorizationStatus.authorizedAuthorized
AuthorizationStatus.provisionalAuthorized

로 사용 하면 된다.

하지만 ANDROID >= 33 에서는 조금 다르다. 이제 다른 Android
Permission들 처럼 Permanently Denied 를 처리 해줘야한다.

// AndroidManifest.xml
<uses-permission
	android:name="android.permission.POST_NOTIFICATIONS"
	android:minSdkVersion="33" />

// app level gradle
android {
	defaultConfig {
    	targetSdkVersion 33

앱 실행시 초기 상태 값 가져오기
IOS 나 ANDROID < 33 에서는 FirebaseMessaging.instance.getNotificationSettings로
가져오면 됐지만. 이제는 안된다. AuthorizationStatus에 Permanently Denied가 없기 때문에
권한 요청시 request를 할지 / AppSetting으로 이동해야 할지 모르기 때문이다...

하여 적절한 시점(보통 앱 초기화 끝 or 홈 화면 진입) 시에
(DeviceInfo - https://pub.dev/packages/device_info_plus)

if (Platform.isAndroid) {

	final int sdkInt = (await DeviceInfoPlugin().androidInfo).version.sdkInt;

	if (sdkInt >= 33) {

		Permission.notification.request()
	}
}

를 통해 초기 상태 값을 가져와야 한다. 당연히 request이기 때문에
이미 Permanently Denied가 아니라면, 허용 권한 알림 상자를
보여줄 것이다. 싫지만 다른 방법이 없다... 혹 아시는분 ?

권한 요청하기
마찬가지로 Permission.notification.request()를 통해 권한 요청도 해야한다.

0개의 댓글