본문 바로가기
🖥 Programming/📱 Android (Kotlin)

[Android][kotlin] TaskStackBuilder getPendingIntent 최신 intent만 작동하는 버그 해결방법

by MinChan-Youn 2022. 4. 27.

안녕하세요~ 챠니입니다! :)

 

오늘은 FCM에서 푸시알림을 수신받았을때 TaskStackBuilder getPendingIntent에서 각 intent를 지정했지만 실제 push를 클릭했을 때 해당 intent가 아닌 최신 intent에 대한 내용만 작동하는 현상에 대해서 알아보겠습니다.

 

 

아래코드 예시를 하나 보겠습니다.

 TaskStackBuilder stackBuilder = TaskStackBuilder.create(this);
  stackBuilder.addParentStack(MainActivity.class);
  stackBuilder.addNextIntent(resultIntent);
  PendingIntent resultPendingIntent = stackBuilder.getPendingIntent(0, PendingIntent.FLAG_UPDATE_CURRENT);

 

 

문제점 1 (동일한 RequestCode)

보통 푸시알림 클릭에 대한 pendingIntent를 다음과 같이 설정합니다.

하지만 푸시가 여러개 쌓이게 되면 문제가 생기게 됩니다.

 

stackBuilder.getPendingIntent에서 RequestCode가 0으로 고정이 되어있기때문에 혹시 intent에 다른 값을 넣어도 개별적으로 쌓이지 않고 덮어씌워지기 때문에 문제가 됩니다.

 

이런 상황에서는 RequstCode를 각각 지정해야 intent값들이 제대로 전달이 됩니다.

 

문제점 2 (Flag 설정)

PendingIntent에 대한 Flag설정값들을 알고 있어야 합니다.

flag는 아래 내용처럼 설정할 수 있습니다.

 

  • FLAG_UPDATE_CURRENT : Pending인텐트가 이미 존재할 경우, Extra Data를 모두 대체
  • FLAG_CANCEL_CURRENT : Pending인텐트가 이미 존재할 경우, 기존 Pending인텐트를 cancel하고 다시 생성
  • FLAG_IMMUTABLE : 이름에서 알 수 있듯이, 기존 PendingIntent 는 변경되지 않구요, 새로 데이터를 추가한 PendingIntent를 보내도 무시함
  • FLAG_NO_CREATE: Pending인텐트가 기존에 존재하지 않으면, Null을 return
  • FLAG_ONE_SHOT : 이름이 아주 직관적인데요, 한번만 사용할 수 있는 PendingIntent란 뜻 임

많이 사용하는 flag들은 있지만 푸시알림에 대한 처리를 어떻게할 것인지에 따라서 사용되는 flag는 달라지게 됩니다.

예를들어 PendingIntent에 대한 각각의 처리가 필요할 경우 "FLAG_UP용ㅎDATE_CURRENT"를 사용할 순 없겠죠?

이런경우는 "FLAG_ONE_SHOT"을 사용할 수 있습니다.

 

 

 

 

 

질문 또는 궁굼한 부분은 댓글을 남겨주세요! 친절하게 답변드리겠습니다!

응원의 댓글은 저에게 큰 힘이 된답니다! :)

즐거운 하루되세요!

 

깃허브 보러 놀러오세요 👇 (맞팔환영)

https://github.com/younminchan

 

younminchan - Overview

안드로이드 2년차 개발자 •⚽️/🎤/🥁/🖥/🏃‍♂️/🚴‍♂️/🤟 TechBlog⬇️ minchanyoun.tistory.com - younminchan

github.com