안드로이드 푸시 개수 제한 해결방법
최근 회사에서 유지보수하는 프로젝트 중에 푸시 메시지가 24개 이후에 안온다는 버그가 접수됐다.
나는 무슨 말도 안되는 소리를 하나 싶었지만.... 정말로 안됐다;;
그래서 이리저리 구글링을 해보았는데 안드로이드에서는 푸시알림을 24개까지만 받을 수 있게끔 되어있었다.
아이폰은 모든 푸시 알림을 누적해서 다 받아서 확인할 수 있었다.....
그래서 어떻게해야하나 이리저리 찾아보다가 도움이되는 블로그를 발견했다.
https://medium.com/mindorks/the-notification-limit-per-app-in-android-94af69a6862c
위 링크 글을 보고서 푸시 개수제한 버그를 고쳤다.
완전한 해결책은 아니였고 25개째 부터 가장 오래된 알림을 지우는 방식으로 수정하였다.
안드로이드에서 알림의 개수는 제조사가 정하는거라 개발자가 어떻게 할 수가 없었다.
그럼 코드를 살펴보자.
fun checkAndScheduleNotifications(notificationManager: NotificationManager) {
//안드로이드 알림 24개까지밖에 안옴.
//그 이상 오면 오래된거 하나 지워버리자
val currentNotifications = notificationManager.activeNotifications.toList() //1
when (val countOfNotification = currentNotifications.size) {
in 0..23 -> Log.d(TAG, "노티피케이션 23개 이하, size: $countOfNotification")
else -> {
Log.d(TAG, "노티피케이션 23개 초과, size: $countOfNotification")
Collections.sort(currentNotifications, compareNotificationByPostTime) //2
if(currentNotifications.isNotEmpty()) {
notificationManager.cancel(currentNotifications[5].id) //3
}
}
}
}
private val compareNotificationByPostTime = Comparator<StatusBarNotification> { o1, o2 ->
return@Comparator (o1.postTime).compareTo(o2.postTime)
}
checkAndScheduleNotifications는 알림의 개수에 따라 알림을 관리하는 함수이다.
현재 내가 테스트하는 S10에서는 알림을 24개까지 받을 수 있지만 그냥 안전빵으로 23개를 커트라인으로 잡았다.
23개까지는 그냥 평소처럼 받고 24개부터는 가장 오래된 푸시알림을 하나 지우고 새로운 알림을 보여준다.
1 => 현재 시스템에 저장된 앱 알림을 리스트로 반환한다.
2 => 알림들을 시간순서로 나열한다.
3 => 오래된 알림을 하나 지운다.
✋ 여기서 특이사항이 있었다.
처음에 코드를 작성할 때 당연히 currentNotifications[0] 을 지우면서 작업을 했는데 문제가 발생했다.
currentNotifications[4]부터 이상한 tag와 id로 notification이 생기더니 도통 지워지지가 않았다.
그래서 아무리 머리를 써봐도 해결책이 안보여서 그냥 currentNotifications[5]를 지우기로했다.
----------
위의 코드를 notification을 만들어서 notify 해주기전에 실행해주면 된다.
끝...