Development record of developer who study hard everyday.

레이블이 notification개수제한인 게시물을 표시합니다. 모든 게시물 표시
레이블이 notification개수제한인 게시물을 표시합니다. 모든 게시물 표시
, , , , , ,

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

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

안드로이드 블로그

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

끝...


Share:
Read More