OSNotification 클래스를 통해 OneSignal에서 전송된 푸시 알림의 데이터에 액세스할 수 있습니다.
Android Notification Service Extension
사용자에게 표시되기 전에 알림을 처리할 수 있습니다. 일반적인 사용 사례는 다음과 같습니다:- 알림 표시 여부와 관계없이 백그라운드에서 데이터 수신
- 사용자 지정 강조 색상, 진동 패턴 또는 기타
NotificationCompat옵션과 같은 클라이언트 측 앱 로직에 따라 특정 알림 설정 재정의
1단계: Service Extension용 클래스 생성
INotificationServiceExtension을 확장하는 클래스를 만들고 onNotificationReceived 메서드를 구현합니다.
onNotificationReceived 메서드 매개변수는 INotificationReceivedEvent 유형의 event입니다.
@Keep 어노테이션은 ProGuard/R8이 축소 과정에서 INotificationServiceExtension을 구현하는 클래스의 이름을 변경하거나 제거하지 못하도록 방지합니다.2단계: 알림 사용자 지정
다음은 위의 템플릿 Notification Service Extension 클래스에서 구현할 수 있는 일반적인 예시입니다.- 알림 표시 방지
- 사용자 지정 필드 추가
- 알림 색상 및 아이콘 변경
event.preventDefault()를 호출하면 알림이 자동으로 표시되지 않으며, 수동으로 표시하거나 완전히 표시하지 않도록 결정할 수 있습니다.3단계: AndroidManifest.xml에 Service Extension 추가
AndroidManifest.xml 파일의 application 태그 내에 클래스 이름과 값을 meta-data로 추가합니다. “unused” 경고는 무시하세요.
XML
com.onesignal.example.NotificationServiceExtension을 클래스의 정규화된 이름으로 교체하세요.
iOS Notification Service Extension
UNNotificationServiceExtension을 사용하면 푸시 알림이 사용자에게 표시되기 전에 콘텐츠를 수정할 수 있으며 다음과 같은 다른 중요한 기능에 필요합니다: 앱에 대한 Mobile SDK 설정 지침을 따랐다면 Extension이 이미 구성되어 있을 것입니다. 이 섹션에서는 OneSignal 알림 페이로드 데이터에 액세스하는 방법과 발생할 수 있는 문제를 해결하는 방법을 설명합니다.iOS 푸시 페이로드 가져오기
didReceive(_:withContentHandler:) 오버라이드는 OneSignalExtension.didReceiveNotificationExtensionRequest를 호출합니다. 이 메서드가 호출되기 전에 bestAttemptContent를 읽거나 수정할 수 있습니다.
이 예시에서는 다음 데이터와 함께 알림을 보냅니다:
JSON
userInfo의 custom 딕셔너리 내 a 키를 통해 OneSignalNotificationServiceExtension 내에서 이 추가 data에 액세스합니다:
iOS Notification Service Extension 문제 해결
이 가이드는 iOS 모바일 앱에서 이미지, 액션 버튼 또는 확인된 전달이 표시되지 않는 문제를 디버깅하기 위한 것입니다.Xcode 설정 확인
General > Targets에서 main app target과 OneSignalNotificationServiceExtension 타겟이 동일하고 올바른지 확인하세요:- Supported Destinations
- Minimum Deployment(iOS 14.5 이상)

Xcode의 Main App Target 예시

Xcode의 OneSignalNotificationServiceExtension Target 예시
NSExtension 키를 확장합니다. 다음이 표시되는지 확인하세요:
XML

Info 탭의 NSExtension 키 예시
”Copy only when installing” 끄기
main app target > Build Phases > Embed App Extensions를 선택합니다. “Copy only when installing”이 선택되지 않았는지 확인하세요. 선택되어 있으면 선택 해제하세요:
Main app target 빌드 단계 설정
iOS Notification Service Extension 디버깅
다음 단계에 따라 Notification Service Extension이 올바르게 설정되었는지 확인하세요.1. OneSignalNotificationServiceExtension 코드 업데이트
NotificationService.m 또는 NotificationService.swift를 열고 전체 파일 내용을 아래 코드로 바꾸세요. Extension이 실행 중인지 확인하는 데 도움이 되는 로깅을 추가합니다.
YOUR_BUNDLE_ID를 실제 Bundle ID로 바꾸세요.
디버그 로그 유형은 Console에서 Action > Include Debug Messages를 통해 활성화해야 합니다.
2. Active Scheme 변경
Active Scheme을OneSignalNotificationServiceExtension으로 설정합니다.

Xcode Active Scheme 선택
3. 프로젝트 빌드 및 실행
Xcode에서 실제 장치에서 프로젝트를 빌드하고 실행합니다.4. Console 열기
Xcode에서 Window > Devices and Simulators를 선택합니다.
Xcode Devices and Simulators 창

장치 콘솔 액세스 버튼
5. Console 확인
Console에서:- Action > Include Debug Messages 선택
- CATEGORY로
OneSignalNotificationServiceExtension검색 - Start 선택

Console 디버깅 구성
contents 속성 사용). 이 예시에서 페이로드는 다음과 같습니다:
cURL

Console 디버그 출력 예시
FAQ
iOS에서 Notification Service Extension이 실행되지 않는 이유는 무엇인가요? Extension은mutable-content가 설정된 경우에만 실행됩니다. OneSignal은 첨부 파일이나 액션 버튼이 있는 알림에 대해 자동으로 이를 설정합니다. Xcode 설정이 문제 해결 섹션의 요구 사항과 일치하는지 확인하세요.
Android에서 알림 표시를 방지할 수 있나요?
네, event.preventDefault()를 호출하여 알림을 억제할 수 있습니다. 나중에 event.getNotification().display()를 호출하여 표시하거나 호출하지 않고 자동으로 삭제할 수 있습니다. 자세한 내용은 중복 알림을 참조하세요.
Android에서 @Keep 어노테이션이 필요한가요?
네, @Keep 어노테이션은 축소 과정에서 ProGuard/R8이 INotificationServiceExtension을 구현하는 클래스의 이름을 변경하거나 제거하지 못하도록 방지합니다.
관련 페이지
Mobile SDK 설정
iOS 및 Android용 OneSignal SDK를 설치하고 구성합니다.
이미지 및 리치 미디어
푸시 알림에 이미지, GIF 및 비디오를 첨부합니다.
확인된 전달
장치에 대한 알림 전달 확인을 추적합니다.
중복 알림
모든 플랫폼에서 중복 푸시 알림 문제를 해결합니다.