-
안드로이드 13에서 push 알림 안되는 이슈 해결프로그래밍/ 안드로이드어플만들기 2023. 9. 3. 00:17728x90반응형
어플 타겟 SDK를 안드로이드 13으로 변경하고 fcm push 알림이 안되서 해결하는 과정을 기록한다.
안드로이드 13 (API Level 33) 부터는 알림이 기본적으로 off가 되어있다고 한다.
실제로 일정 알림 시간이 되고 앱에서는 아무런 일도 일어나지 않았다.
마니페스트 파일에서 알림 관련 권한을 추가하고, 권한이 설정안되어 있을 경우 권한을 요청하도록 코드를 수정하였다.
<!-- push notification --> <uses-permission android:name="android.permission.POST_NOTIFICATIONS"/>
if (checkSelfPermission(Manifest.permission.INTERNET) != PackageManager.PERMISSION_GRANTED || checkSelfPermission(Manifest.permission.ACCESS_NETWORK_STATE) != PackageManager.PERMISSION_GRANTED || checkSelfPermission(Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED || checkSelfPermission(Manifest.permission.POST_NOTIFICATIONS) != PackageManager.PERMISSION_GRANTED ) { String[] permission_list = new String[0]; permission_list = new String[]{Manifest.permission.INTERNET, Manifest.permission.CAMERA, Manifest.permission.ACCESS_NETWORK_STATE, Manifest.permission.POST_NOTIFICATIONS }; ActivityCompat.requestPermissions(this, permission_list, 1); }
이제 알림 시간이 되면 반응은 있는데, 대신 앱이 아래와 같은 오류를 내면서 죽어버렸다.
java.lang.IllegalArgumentException: : Targeting S+ (version 31 and above) requires that one of FLAG_IMMUTABLE or FLAG_MUTABLE be specified when creating a PendingIntent. e.g. if it needs to be used with inline replies or bubbles. at android.app.PendingIntent.checkFlags(PendingIntent.java:408) at android.app.PendingIntent.getActivityAsUser(PendingIntent.java:491) at android.app.PendingIntent.getActivity(PendingIntent.java:477) at android.app.PendingIntent.getActivity(PendingIntent.java:441) at com.butlerdiary.butlerdiary.MyFirebaseService.onMessageReceived(MyFirebaseService.java:84) at com.google.firebase.messaging.FirebaseMessagingService.dispatchMessage(com.google.firebase:firebase-messaging@@20.2.3:85) at com.google.firebase.messaging.FirebaseMessagingService.passMessageIntentToSdk(com.google.firebase:firebase-messaging@@20.2.3:55) at com.google.firebase.messaging.FirebaseMessagingService.handleMessageIntent(com.google.firebase:firebase-messaging@@20.2.3:34) at com.google.firebase.messaging.FirebaseMessagingService.handleIntent(com.google.firebase:firebase-messaging@@20.2.3:23) at com.google.firebase.messaging.EnhancedIntentService.lambda$processIntent$0$EnhancedIntentService(com.google.firebase:firebase-messaging@@20.2.3:43) at com.google.firebase.messaging.EnhancedIntentService$$Lambda$0.run(Unknown Source:6) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1137) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:637) at com.google.android.gms.common.util.concurrent.zza.run(Unknown Source:6) at java.lang.Thread.run(Thread.java:1012)
API 레벨 31부터 (안드로이드 13 포함) PendingIntent를 생성할때 FLAG_IMMUTABLE 또는 FLAG_MUTABLE을 명시해줘야한다고 한다.
혹시 몰라서 관련 패키지도 업데이트를 하고 FirebaseMessagingService를 상속받는 클래스에서 PendingIntent.FLAG_UPDATE_CURRENT-> PendingIntent.FLAG_IMMUTABLE 로 변경하니
이제 정상적으로 푸시 알림을 받을 수 있었다.
// 기존 패키지 implementation 'androidx.work:work-runtime:2.7.1' // 변경 패키지 implementation 'androidx.work:work-runtime:2.8.1'
코드 수정
// 기존 코드 //PendingIntent pendingIntent = PendingIntent.getActivity(getApplicationContext(), 101, intent, PendingIntent.FLAG_UPDATE_CURRENT); // 수정 코드 PendingIntent pendingIntent = PendingIntent.getActivity(getApplicationContext(), 101, intent, PendingIntent.FLAG_IMMUTABLE);
이제 더이상 수정할 일이 없기를...!
참고
https://stackoverflow.com/questions/75383552/notification-not-being-shown-in-android-13
728x90반응형'프로그래밍 > 안드로이드어플만들기' 카테고리의 다른 글