https://dzone.com/articles/notification-channels-in-android-oreo
최근 뉴스에서 Google은 2018 년 말까지 모든 앱이 SDK 26 (Android Oreo)를 대상으로 앱의 보안 및 성능 향상을 위해 시행하도록 할 것입니다. 이 발표에 대한 자세한 내용은 여기를 참조하십시오 .
이제는 API 26을 타겟팅하는 것이 매우 쉽지만 build.gradle
파일의 targetSdkVersion
값을 변경하여 앱이 정상적으로 작동한다는 보장은 없습니다.
이 게시물은 Android Oreo에 도입 된 새로운 기능 중 하나와 API 26을 타겟팅하는 것이 앱 및 알림 채널 (또는 카테고리)에 미치는 영향을 구체적으로 보여줍니다.
API 26을 타겟팅하고 알림 채널을 구현하지 않으면 앱이 사용자에게 알림을 보내지 않습니다.
Android O에서 알림 채널은 소셜 네트워킹 앱을 만드는 중이거나 채널의 "활동"- 좋아요 또는 내 댓글, "메시지"등의 알림이 될 수있는 그룹 또는 알림 카테고리와 다소 비슷합니다. 사실, 앱의 설정에서 사용자는 아래 스크린 샷과 같이 채널을 '카테고리'로 간주합니다.
알림 채널이 도입 됨으로써 사용자는 알림을 받고 싶은 내용을 세밀하게 제어 할 수 있습니다. 특정 채널에 대한 알림을 해제하고 특정 알림 카테 고 리에 대한 선호도 및 중요도를 지정하고 DND (무시하지 않음)를 무시할지 여부를 결정할 수 있습니다.
이러한 알림 채널은 런타임에 생성되므로 사용자의 요구 사항에 맞게 동적으로 변경할 수 있습니다. 예를 들어, 사용자가 그룹 채팅에 가입 한 경우, 예를 들어 특정 그룹과 일치하는 채널을 만들 수 있으며 그룹을 떠날 때 알림 채널을 제거 할 수 있습니다.
그러면 어떻게 알림 채널을 추가 할 수 있습니까? 가장 단순한 레벨에서는 고유 한 이름과 ID 및 중요도를 가진 채널을 만들어야합니다. 이름과 ID의 고유성은 앱 패키지에만 적용됩니다. 그런 다음 알림 관리자는 지정한 설정으로 채널을 만듭니다. 일반적으로 생성 코드는 다음과 같습니다.
val privateMessagesChannel = NotificationChannel( PRIVATE_MESSAGES_CHANNEL_ID, context.getString(R.string.pm_channel_name), NotificationManager.IMPORTANCE_DEFAULT) notificationManager.createNotificationChannel(privateMessagesChannel)
채널 그룹을 만들 수도 있습니다. 이는 여러 계정 또는 프로필이있는 시나리오에서 유용하므로 계정 / 프로필별로 알림 채널을 그룹화 할 수 있습니다.
생성 한 채널에 대한 추가 사용자 화를 지정할 수 있습니다. 예를 들어, 아래와 같이 채널의 조명 색상, 진동 패턴 등을 지정할 수 있습니다.
with(privateMessagesChannel) { lightColor = Color.RED enableVibration(true) vibrationPattern = longArrayOf(100, 200, 300, 400) }
이제 채널을 만들었으므로 다음 단계는 알림을 표시하고 새 알림을 만들 때마다 실제로 채널을 지정하는 것입니다. 알림 채널을 지정하면 다음과 같습니다.
val notification = NotificationCompat.Builder(context) .setSmallIcon(R.drawable.ic_notification_small) .setContentTitle(context.getString(R.string.notif_pm_title)) .setContentText(message) /** * further notification customizations */ .setChannelId(PRIVATE_MESSAGES_CHANNEL_ID) .build() notificationManager.notify(PM_NOTIFICATION_ID, notification)
위의 코드에서 채널을 설정하는 부분은 .setChannelId()
입니다. 이 줄이 없으면 Android O 이상을 타겟팅하는 경우 알림이 사용자에게 표시되지 않습니다.
알림 채널을 만든 후에는 제어 권한을 사용자에게 남겨 둡니다. 원하는 채널에 대해 알림을 끄고 우선 순위, 조명 및 진동 설정 등을 변경할 수 있습니다. 그러나 프로그래밍 방식으로 현재 채널 설정을 읽을 수 있습니다. 사용자에게 알림 채널의 상태를 표시 할 수 있도록이 설정이 필요할 수 있습니다. 예를 들어 사용자가 특정 그룹 채팅에 대한 알림을 사용 중지 한 경우 그룹 세부 정보 옆 또는 사용자가 볼 수있는 어딘가에 '음소거'아이콘이 표시 될 수 있습니다.
어떤 식 으로든 방해하지 않는 것이 중요하거나 사용자가 채널 설정을 제어 할 수있는 권한을 사용자에게 부여하는 목적을 상쇄하기 때문에 사용자가 앱에서 정상적인 활동을하지 못하게하는 것이 중요합니다.
알림 채널 세부 정보를 읽으려면 알림 채널에 대한 참조를 얻고 원하는 설정을 쿼리해야합니다.
val pmNotificationChannel = notificationManager.getNotificationChannel(PRIVATE_MESSAGES_CHANNEL_ID) val channelIsBlocked = pmNotificationChannel.importance == NotificationManager.IMPORTANCE_NONE if (channelIsBlocked) { // do something unintrusive to make user aware that they blocked the notification // you should also provide a way to make them go to the channel settings }
위의 코드 블록은 채널에 대한 중요도 설정을 확인하는 방법을 보여줍니다. 조명, 진동 및 기타 설정에 대해 유사한 작업을 수행 할 수 있습니다.
포괄적 인 경험을 제공하려면 사용자가 알림을 업데이트 할 수있는 알림 설정에 액세스하는 것을 돕는 것이 좋습니다. 설정 메뉴의 어딘가에 배치 할 수 있습니다. 알림 설정에 사용할 수있는 의도가 있으며 코드 작성은 다음과 같습니다.
val notificationSettingsIntent = Intent(Settings.ACTION_APP_NOTIFICATION_SETTINGS) notificationSettingsIntent.putExtra(Settings.EXTRA_APP_PACKAGE, packageName) startActivity(notificationSettingsIntent)
따라서 사용자가 채널이 생성 된 이전 대화의 구독을 취소했다고 가정 해 봅시다. 채널을 삭제해야합니다. 삭제는 아주 간단합니다. 이렇게하려면 다음과 같이해야합니다.
notificationManager.deleteNotificationChannel(PRIVATE_MESSAGES_CHANNEL_ID)
알림 채널과 관련하여 몇 가지 추가 의견 및 질문이 있습니다. 그들 중 일부는
NotificationManagerCompat
는 (아직) 채널을 생성, 업데이트 및 삭제하는 메소드를 포함하지 않습니다. 이는 API 레벨 26 이상에서 이러한 사항을 처리하기 위해 NotificationManager
가 필요할 수도 있음을 나타냅니다. 또한 이와 관련하여 NotificationCompat.Builder
는 알림이 게시 될 채널 ID 설정에 대한 지원을 이미 추가 했으므로 NotificationCompat.Builder
를 사용하여 NotificationCompat.Builder
을 빌드 할 수 있습니다 (이전 버전과의 호환성을 위해)알림 채널에 대한 추가 정보는 다음 자료를 참조하십시오.
결론적으로 안드로이드의 새로운 알림 채널은 사용자에 대한 향상된 경험을 제공합니다. 이는 알림을보다 효과적으로 제어 할 수있게 해 주며 개발자가 Google 알리미를보다 잘 사용하도록 도와줍니다. 하루가 끝나면 윈 - 윈 상황이됩니다.
마지막으로 2018 년 8 월에 새로운 앱을, 11 월에 앱을 업데이트하면 Android O (API 레벨 26) 이상을 타겟팅해야합니다. 따라서 앱에 알림을 표시하는 경우 알림 채널을 구현해야합니다.
좀 더 많은 코드를보고 싶다면 GitHub에서 사용할 수있는 이러한 구현 중 일부가 포함 된 데모 프로젝트가 있습니다 . 여기 에서 확인 하십시오 .
이 게시물을 검토하는 데 도움을 주신 Moyin 에게 감사드립니다.
이 게시물을 읽어 주셔서 감사합니다. 의견, 제안, 수정 등을 자유롭게 주시겠습니까? 또한 유용한 게시물을 찾으면 공유하고 댓글을 남겨주세요.