https://dzone.com/articles/notification-channels-in-android-oreo


Android 개발자는 API 26을 타겟팅하는 경우 앱이 사용자에게 알림을 보내는 것을 중지한다는 점을 알고 있어야합니다. 알림 채널을 구현하여이를 피하십시오.


최근 뉴스에서 Google은 2018 년 말까지 모든 앱이 SDK 26 (Android Oreo)를 대상으로 앱의 보안 및 성능 향상을 위해 시행하도록 할 것입니다. 이 발표에 대한 자세한 내용은 여기를 참조하십시오 .

이제는 API 26을 타겟팅하는 것이 매우 쉽지만 build.gradle 파일의 targetSdkVersion 값을 변경하여 앱이 정상적으로 작동한다는 보장은 없습니다.

이 게시물은 Android Oreo에 도입 된 새로운 기능 중 하나와 API 26을 타겟팅하는 것이 앱 및 알림 채널 (또는 카테고리)에 미치는 영향을 구체적으로 보여줍니다.

TL, DR

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) 


특별한

알림 채널과 관련하여 몇 가지 추가 의견 및 질문이 있습니다. 그들 중 일부는

  • 알림 채널을 설정하는 가장 좋은시기는 언제입니까? 앱 시작시? 사용자 프로필은 언제 준비됩니까?알림을 표시하기 직전입니까? Dan Lew는 이것에 대해 약간의 생각을 가지고 있습니다 .
  • 실제로 사용자에게 알림을 표시해야하는 경우 어떻게해야합니까? -이 게시물에이 내용이 포함되어 있습니다. 알림 설정에 대한 최종 결정은 채널이 만들어지고 알림이 채널에 게시되면 사용자가 결정할 수 있습니다. 사용자가 앱을 완전히 즐길 수 없도록 설정을 수정 한 경우 해산 할 수있는 카드 나 그와 유사한 것을 사용하여 눈에 잘 띄지 않게 설정할 수 있습니다. 개인적으로 경고 또는 앱의 전체 분석을 사용하여 조언하지 않습니다.
  • 중고 O 장치는 어떻습니까? API 레벨 26 이하의 기기를 지원하는 경우이 기능을 구현할 때 많은 종류의 린트 경고가 표시됩니다. NotificationManagerCompat 는 (아직) 채널을 생성, 업데이트 및 삭제하는 메소드를 포함하지 않습니다. 이는 API 레벨 26 이상에서 이러한 사항을 처리하기 위해 NotificationManager 가 필요할 수도 있음을 나타냅니다. 또한 이와 관련하여 NotificationCompat.Builder 는 알림이 게시 될 채널 ID 설정에 대한 지원을 이미 추가 했으므로 NotificationCompat.Builder 를 사용하여 NotificationCompat.Builder 을 빌드 할 수 있습니다 (이전 버전과의 호환성을 위해)

더 읽을 거리

알림 채널에 대한 추가 정보는 다음 자료를 참조하십시오.

개요

결론적으로 안드로이드의 새로운 알림 채널은 사용자에 대한 향상된 경험을 제공합니다. 이는 알림을보다 효과적으로 제어 할 수있게 해 주며 개발자가 Google 알리미를보다 잘 사용하도록 도와줍니다. 하루가 끝나면 윈 - 윈 상황이됩니다.

마지막으로 2018 년 8 월에 새로운 앱을, 11 월에 앱을 업데이트하면 Android O (API 레벨 26) 이상을 타겟팅해야합니다. 따라서 앱에 알림을 표시하는 경우 알림 채널을 구현해야합니다.

좀 더 많은 코드를보고 싶다면 GitHub에서 사용할 수있는 이러한 구현 중 일부가 포함 된 데모 프로젝트가 있습니다 . 여기 에서 확인 하십시오 .

이 게시물을 검토하는 데 도움을 주신 Moyin 에게 감사드립니다.

이 게시물을 읽어 주셔서 감사합니다. 의견, 제안, 수정 등을 자유롭게 주시겠습니까? 또한 유용한 게시물을 찾으면 공유하고 댓글을 남겨주세요.