일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- 라면레시피추천
- 안드로이드 리스트뷰와 광고
- kotlin
- android kotlin
- firebase RemoteConfig
- 앱 광고 설정
- android 광고달기
- 애드몹 설정
- android 영단어 기능 만들기
- android notification
- 테러우편물
- 우편물재난문자
- 정국라면
- android 수익
- android 앱업데이트 없이 변경하기
- RecyclerView in Admob
- 안드로이드 뒤집히는 뷰
- Android
- 안드로이드 광고
- 정국라면레시피
- 안드로이드
- android 터치시 뒤집히는 뷰
- android remoteconfig
- 불그리레시피
- 앱에 광고달기
- 국제우편물
- Android AdMob
- 앱에 광고 수익
- android 뒤집히는 카드뷰
- FlipView
- Today
- Total
TAE
[android/Kotlin] PendingIntent 푸시메시지 클릭 - 푸시 메시지 구현 본문
notification 클릭 시 데이터를 넘기는 방법인 pendingIntent에 대해 알아보겠습니다.
pendingIntent는 대표적으로
Notification (푸시 알림)으로 Intent 작업 수행 시
바탕화면 (런쳐) 위젯에서 Intent 작업 수행 시
AlarmManager를 통해 지정된 시간에 Intent 작업 수행 시
사용됩니다.
자세한 내용은 디벨롭 사이트에서 확인이 가능합니다.
https://developer.android.com/reference/android/app/PendingIntent
노티피케이션(푸시) 클릭 시 앞 포스팅에서 enum으로 지정해 놓은 어떤 타입이 클릭되었는지 알 수 있는 앱을 만들어 보겠습니다.
아래 포스팅에서 코드를 추가하였습니다.
https://tg-world.tistory.com/13
코드
MyFirebaseMessagingService.kt
val intent = Intent(this, MainActivity::class.java).apply {
putExtra("notificationType","${type.title} 푸시 클")
addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP)
}
val pendingIntent = PendingIntent.getActivity(this, type.notificationId, intent, FLAG_UPDATE_CURRENT)
val notificationBuilder = NotificationCompat.Builder(this, CHANNEL_ID)
.setSmallIcon(R.mipmap.ic_launcher)
.setContentTitle(title)
.setContentText(notificationMessage)
.setPriority(NotificationCompat.PRIORITY_HIGH)
.setAutoCancel(true)
.setContentIntent(pendingIntent)
PendingIntent.getActivity로 넘겨줄 파라미터는
1. Context정보
2. requestCode -> PendingIntent를 구분하기 위한 고유 코드
3. 실행할 Intent
4. FLAG 값
- FLAG_CANCEL_CURRENT → 이전에 생성한 PendingIntent 취소 후 새로 생성
- FLAG_NO_CREATE → 이미 생성된 PendingIntent 가 있다면 재사용 (없으면 Null 리턴)
- FLAG_ONE_SHOT → 해당 PendingIntent를 일회성으로 사용
- FLAG_UPDATE_CURRENT → 이미 생성된 PendingIntent 가 있다면, Extra Data 만 업데이트
MainActivity.kt
override fun onNewIntent(intent: Intent?) {
super.onNewIntent(intent)
setIntent(intent) // 새로운 인텐트로 갱신
notificaitonResult(true)
}
private fun notificaitonResult(isNewIntent: Boolean = false) {
binding.screenResultTV.text = (intent.getStringExtra("notificationType") ?: "아이콘 클릭") +
if (isNewIntent) {
"으로 갱신 되었습니다."
} else {
"으로 실행 되었습니다"
}
}
onNewIntent를 오버라이드 해줍니다.
해당 화면이 이미 스택이 있을 경우 onCreate를 호출하는 것이 아닌 onNewIntent를 호출합니다.
setIntent로 새로운 인텐트로 갱신될 수 있게 해 줍니다.
onNewIntent가 호출될 때 notificationResult를 ture로 넘겨주고,
onCreate일 경우는 false로 넘겨줍니다.
isNewIntent값으로 갱신되었는지, 처음실행되었는지 구분하며,
notificatioinResult 메서드를 만들어 결과 Textview에 아이콘을 클릭했는지, 푸시로 클릭했는지 여부를 판단하며
notificationType이 있을 경우는 푸시 클릭해서 들어온 것으로, 앞서 putExtra로 넘겨준 title값을 표시하여 줍니다.