안드로이드 푸시 개수 제한 해결방법

안드로이드 블로그

최근 회사에서 유지보수하는 프로젝트 중에 푸시 메시지가 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 해주기전에 실행해주면 된다.

끝...