앱의 targetSdkVersion을 26으로 올려야 해서 NotificationChannel에 대해서 알아보고 있다. 채널을 구현하면서 애매하던 것들을 정리해보았다. 기존에 Notification.Builder 혹은 NotificationCompat.Builder에서 하던 설정 중 Lights, Vibration, Sound는 채널로 옮겨졌다. 오레오에서는 무시되지만 하위 버전에서는 필요하기 때문에 코드는 지우면 안 된다.
- 최소 하나의 채널이 반드시 있어야 한다. Notification을 만들 때도 채널을 반드시 지정해야 한다.
- 채널의 설정은 사용자가 변경할 수 있다. 귀찮은 채널만 중요도를 떨어뜨리거나 안 나오게 할 수 있다. 앱은 사용자가 변경한 것을 되돌릴 수 없다. getNotificationChannel로 블럭 되었는지 알 수는 있다. 다른 채널을 만들면 노티는 가능하지만 사용자는 싫어할 듯.
- 한 번 만들어진 채널은 이름과 설명을 제외하고 수정할 수 없다. 이름과 설명은 생성하는 API로 다시 만들면 변경된다. Locale에 맞는 이름 변경은 ACTION_LOCALE_CHANGED을 리시브해서 다시 생성한다.
- 채널을 삭제할 수는 있지만 동일한 채널 아이디로 다시 만든다고 해서 설정이 바뀌는 것은 아니다.(생각해 보면 당연해 보인다. 사용자가 설정을 변경했는데 앱이 그것을 무시할 수 있는 꼼수가 되기 때문)
- 삭제된 채널은 채널 설정 페이지에 히스토리가 남는다. (채널 관리를 잘 못 하면 지저분해진다.)
- NotificationManager.IMPORTANCE_DEFAULT는 우선순위 High인 채널을 생성한다. High는 사운드가 나온다. 기본 채널은 사운드가 없어야 해서 OS 버그인 줄 알았다. NotificationManager.IMPORTANCE_HIGH가 있어서 오해했다.
- 채널은 앱이 시작할 때 모든 채널을 한 번에 생성하는 것이 좋겠다. 설정하러 갔더니 채널이 하나도 없는데 첫 노티가 뜰 때 만들어진다면 자연스럽지 않다.
createDefaultNotificationChannel의 BaseApplication onCreate에서 호출해 주고, NotificationCompat.Builder를 NotificationChannelUtils.Builder로 수정해 주면 일단 오류없이 동작은 한다.
참고 URL
https://developer.android.com/training/notify-user/channels
https://blog.danlew.net/2017/09/06/working-with-android-notification-channels/
https://bonoogi.herokuapp.com/android-oreo-notification-channel-badge/
---- 추가
기본 채널에서는 setShowBadge(false)로 설정하는 것이 좋겠다. 런처에 따라서 뱃지를 자동으로 노출하는 경우가 있다. 원래는 setNumber()를 통해서만 노출해야 하는데
channel.setShowBadge(false);