트레이에서의 알림 생명주기
기기에 표시된 모든 OneSignal 알림은 SDK가 추적합니다. 다음에 일어나는 일이 알림이 다시 나타날 수 있는지를 결정합니다:클릭 및 해제 동작
알림을 클릭하면 앱(또는 알림의 실행 URL)이 열리고, 알림이 트레이에서 제거되며, 알림 페이로드와 클릭된 액션 버튼 ID와 함께addClickListener() 콜백이 실행됩니다. 클릭된 알림이 그룹에 속한 경우 SDK가 그룹 요약을 업데이트하거나 제거합니다. 클릭된 알림은 절대 복원되지 않습니다.
알림을 해제하면(밀어서 제거하거나 트레이에서 모두 지우기를 탭) 해제됨으로 표시되고 배지 수와 그룹 요약이 업데이트됩니다. 해제된 알림은 절대 복원되지 않습니다. SDK는 해제 리스너를 제공하지 않으며, 해제는 내부적으로 추적됩니다.
앱이 포그라운드에 있는 동안 표시되는 알림은 먼저 포그라운드 생명주기 리스너를 통과하며, 여기서 표시를 방지할 수 있습니다.
복원된 알림 (Android)
Android는 사용자 조작 없이 알림을 강제로 제거할 수 있습니다: 기기 재부팅, 앱 업데이트, 강제 종료 시(일부 기기의 공격적인 배터리 관리자 포함). Android SDK는 다음 앱 콜드 스타트 시 영향을 받은 알림을 자동으로 다시 표시(복원)하므로, 사용자가 보지 못했거나 해제하지 않은 전달된 메시지가 손실되지 않습니다. 복원된 알림은 낮은 중요도의 Restored 카테고리에서 조용히 다시 나타납니다. 클릭되거나 해제되지 않았고, TTL 이내이며, 최근 7일 이내에 수신된 알림만 최대 49개까지 복원됩니다. 전체 자격 규칙 및 제어 방법은 복원된 알림 (Android)에 있습니다. 복원을 줄이려면 전송 시 더 짧은ttl을 사용하거나 아래의 SDK 메서드로 소비된 알림을 지우세요. iOS에는 복원 동작이 없습니다.
배지 동작
iOS에서 배지는 알림 페이로드(ios_badgeType 및 ios_badgeCount)로 설정되며, 서비스 확장이 개수를 정확하게 업데이트할 수 있도록 App Group이 필요합니다. 기본적으로 SDK는 앱이 열릴 때 배지를 지웁니다.
Android에서 앱 아이콘 배지는 트레이에 있는 활성 OneSignal 알림 수를 반영하며 알림 카테고리를 통해 관리됩니다. SDK는 알림이 표시, 해제, 클릭 또는 지워질 때 자동으로 개수를 업데이트하고, clearAllNotifications()를 호출하면 0으로 재설정합니다.
설정, 플랫폼별 옵션 및 문제 해결은 배지에서 다룹니다.
프로그래밍 방식으로 알림 지우기
앱 생명주기 이벤트가 아니라 앱에서 알림의 콘텐츠가 소비되었을 때 알림을 지우세요. 일반적인 패턴:- 콘텐츠 소비 동기화: 사용자가 알림이 가리키는 화면(받은 편지함, 메시지 센터 또는 활동 피드)을 열어 알림이 더 이상 필요 없게 된 경우. 모두 지우거나, 일부 콘텐츠만 소비되었다면 대상 지정 메서드를 사용하세요.
- 로그아웃: 이전 사용자의 알림이 다음 사용자에게 표시되지 않도록 모든 것을 지웁니다.
collapse_id를 사용하여 알림을 쌓는 대신 교체하거나, 더 짧은 TTL을 사용하여 전달되지 않은 알림을 만료시키세요.
clearAllNotifications()
트레이에서 앱의 알림을 제거하고 배지 수를 0으로 재설정합니다. Android에서는 OneSignal이 생성한 알림만 제거하고 해제됨으로 표시하여 복원되지 않도록 합니다. iOS에서는 로컬 알림과 다른 제공업체의 푸시를 포함하여 앱의 전달된 모든 알림을 제거합니다. 전체 메서드 참조를 참조하세요.
복원된 알림을 방지하기 위해 앱 실행 시 지우는 경우, 크로스 플랫폼 앱에서는 호출을 Android로 제한하세요. iOS에서는 로컬 알림과 다른 제공업체의 푸시도 제거합니다.
removeNotification() 및 removeGroupedNotifications() (Android)
Android 알림 ID로 단일 알림을 제거하거나, 그룹 키로 그룹의 모든 알림을 제거합니다. 제거된 알림은 해제됨으로 표시되며 복원되지 않습니다. 여러 대화 중 하나만 확인한 경우처럼 트레이 콘텐츠의 일부만 소비되었을 때 사용하세요. 메서드 참조를 참조하세요.
일정 시간 후 알림 자동 해제
일정 시간이 지난 후 표시된 알림을 제거하는 전송 시점 매개변수는 없습니다. 가능한 방법은 플랫폼마다 다릅니다:- Android 8.0(API 26) 이상: 알림 서비스 확장에서
setTimeoutAfter()를 사용하여 타임아웃을 설정하세요. 타임아웃이 경과하면 Android가 알림 창에서 알림을 제거합니다. API 26 미만 기기에서는 호출이 무시되고 사용자가 상호 작용할 때까지 알림이 유지됩니다. - iOS: 지원되지 않습니다. iOS에는 전달된 알림을 자동으로 만료시키는 방법이 없습니다. 가장 가까운 옵션은
collapse_id를 통해 더 새로운 알림으로 교체하거나, 이후 푸시가 도착했을 때 Apple의removeDeliveredNotifications(withIdentifiers:)로 Notification Service Extension에서 제거하는 것입니다.
additionalData에 시간을 담아 전송하고 서비스 확장에서 이벤트로부터 읽으세요.
setTimeoutAfter()로 제거된 알림은 시스템에 의해 해제되므로 OneSignal SDK가 복원하지 않습니다. 이를 ttl과 혼동하지 마세요. ttl은 전달되지 않은 메시지가 오프라인 기기를 기다리는 시간을 제어하며, 표시된 알림을 제거하지 않습니다.서비스 확장으로 알림 커스터마이즈
서비스 확장은 알림이 표시되기 전에 실행되어 모양을 수정하거나, 백그라운드 데이터를 수신하거나, 표시를 완전히 방지할 수 있습니다:- Android에서는
INotificationServiceExtension을 구현하고setExtender()를 사용하여NotificationCompat옵션을 변경하거나,event.preventDefault()를 호출하여 표시를 억제하세요. - iOS에서는 리치 미디어, 배지 증가 및 확인된 전달을 위해
UNNotificationServiceExtension(설정 중 생성된OneSignalNotificationServiceExtension)을 사용하세요.
FAQ
Android에서 앱을 열 때 오래된 알림이 다시 나타나는 이유는 무엇인가요?
Android SDK는 기기 재부팅, 앱 업데이트 또는 강제 종료 후처럼 트레이에서 강제로 제거된 알림을 복원합니다. 사용자가 해제하거나 클릭한 알림은 복원되지 않습니다. 자격 규칙 및 제어 방법은 복원된 알림 (Android)을 참조하세요.TTL이 만료되면 트레이에서 알림이 제거되나요?
아니요. TTL은 전달되지 않은 메시지가 오프라인 기기를 기다리는 시간을 제어하며, Android에서는 복원 가능한 알림의 범위도 제한합니다. 이미 트레이에 표시된 알림은 절대 제거하지 않습니다. 표시된 알림을 제거하려면 지우기 메서드를 사용하세요. Android에서 일정 시간 후 제거하려면 일정 시간 후 알림 자동 해제를 참조하세요.트레이를 지우지 않고 배지만 지울 수 있나요?
iOS에서는 가능합니다: 배지는 앱이 열릴 때 자동으로 지워지며(비활성화하지 않는 한) 트레이 내용은 그대로 유지됩니다. Android에서는 배지가 트레이의 활성 알림을 반영하므로 이와 독립적으로 설정할 수 없습니다. 배지를 참조하세요.사용자가 알림을 해제할 때를 위한 리스너가 있나요?
아니요. SDK는 해제된 알림이 복원되지 않도록 해제를 내부적으로 추적하지만 해제 이벤트를 노출하지 않습니다. 클릭 리스너는 클릭만 다룹니다.Mobile SDK 참조
알림 메서드 및 리스너에 대한 전체 참조입니다.
OSNotification payload
페이로드 필드 및 복원된 알림 규칙입니다.
모바일 서비스 확장
표시 전에 알림을 가로채고 커스터마이즈합니다.