Problem

안드로이드에서 서버와 앱에서 별도로 푸시 알림을 제어할 수도 있지만, OS 설정을 통해서 푸시 수신여부를 확인할 수도 있다. OS에서 푸시 설정을 꺼놓은 경우 푸시를 수신할 수 있는 방법이 없으므로 사용자에게 어떤 상태인지 안내해줄 필요가 있다. OS에서 푸시 설정 상태를 확인하는 방법을 정리하여 공유한다.

Solution

아래처럼 OS에서 푸시 설정이 활성화 상태를 확인할 수 있다.

NotificationManagerCompat.from(context).areNotificationsEnabled()

만약 푸시 사용이 비활성화 되어있다면 설정으로 이동하는 기능도 추가할 수 있다. OS 버전별로 이동해야 하는 화면의 차이가 있다.

val intent = Intent()
when {
    Build.VERSION.SDK_INT >= Build.VERSION_CODES.O -> {
        intent.action = Settings.ACTION_APP_NOTIFICATION_SETTINGS
        intent.putExtra(Settings.EXTRA_APP_PACKAGE, activity?.packageName)
    }

    Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP -> {
        intent.action = "android.settings.APP_NOTIFICATION_SETTINGS"
        intent.putExtra("app_package", activity?.packageName)
        intent.putExtra("app_uid", activity?.applicationInfo?.uid)
    }

    else -> {
        intent.action = Settings.ACTION_APPLICATION_DETAILS_SETTINGS
        intent.addCategory(Intent.CATEGORY_DEFAULT)
        intent.data = Uri.parse("package:" + activity?.packageName)
    }
}

activity?.startActivity(intent)