- Delivered는 푸시 알림이 푸시 서비스에 성공적으로 전달되었음을 의미합니다. 푸시 서비스로부터 응답을 받습니다.
- Confirmed는 장치의 OneSignal SDK가 알림을 받았음을 의미합니다. 각 사용자의 장치에서 직접 이 상태를 받습니다.
전제 조건
효과적으로 문제를 해결하려면 다음을 수집하세요:- OneSignal App ID
- 표시되지 않은 푸시의 Message ID
- 사용자의:
External ID만 있는 경우 Device Type, Last Session 및 IP Address와 같은 필터를 사용하여 Audience > Subscriptions 탭에서 구독을 검색하세요.
장치 수준 문제
푸시 알림 전달에 영향을 줄 수 있는 장치에서 사용자가 제어하는 항목입니다.푸시 권한 및 구독 상태
장치에서 앱의 Notification Settings를 확인하세요. 알림 권한이 활성화되어 있는지 확인합니다. 그런 다음 앱을 엽니다. SDK가 구독 상태 및 기타 속성을 업데이트하려면 장치에서 앱을 여는 것이 필수적입니다. OneSignal 대시보드 Audience > Subscriptions에서:- Subscription ID를 검색합니다
- Subscription ID가 없는 경우 External ID를 검색하거나 Device Type, Last Session 및 IP Address로 필터링하여 찾으세요.
Android 카테고리 비활성화됨
장치가 Android인 경우 Settings App > Notifications > Your App을 확인하세요. “Show notifications”가 활성화되고 아래의 모든 카테고리가 활성화되어 있어야 합니다. 카테고리가 비활성화된 경우 해당 카테고리의 알림을 받지 못합니다. 이 예제에서는 Abandoned Cart - Urgent 카테고리가 꺼져 있습니다. 이 카테고리가 알림에 사용되면 장치는 알림을 받지 못합니다.
이미지는 장치의 앱에 대해 카테고리가 비활성화되어 있음을 보여주므로 해당 카테고리로 보낼 때 장치가 이 푸시를 받지 못합니다.
일부 Samsung 장치는 자동으로 앱의 카테고리를 끄기 본값으로 설정합니다. 자세한 내용은 이 reddit 게시물 및 Android Police와 article 2의 기사를 참조하세요.
사용자에게 이에 대해 교육하려면 In-app 메시지를 설정하여 Samsung 사용자를 타겟팅하고 카테고리 활성화 지침을 표시할 수 있습니다. Example: Target certain Android manufacturers and devices 튜토리얼을 제공합니다.
Android 앱이 강제 중지됨
Android 앱이 강제 중지되면 장치는 해당 앱의 푸시 알림이 표시되지 않도록 방지합니다. 배터리 수명을 절약하기 위해 Xiaomi, Huawei, Samsung 등과 같은 일부 Android 제조업체는 공격적인 백그라운드 프로세스 관리를 구현했으며 사용자가 앱을 스와이프하여 제거할 때 앱을 강제 중지할 수 있습니다(Facebook, Whatsapp, Gmail 등과 같은 대형 앱은 제외). 이에 대한 많은 정보가 온라인에 있습니다: https://dontkillmyapp.com/ 및 이에 대한 블로그 게시물을 작성했으며 Reddit에서 많은 토론을 생성했습니다. 장치에 따라 이를 방지하려면 다음 단계를 수행해야 할 수 있습니다:-
백그라운드 활동 허용:
- Settings > Apps > Your App > Battery > Allow background activity.
-
Sleeping Apps 기능 비활성화:
- Settings > Battery and Device Care > Battery > Background Usage Limits > Sleeping Apps > 이 목록에서 앱을 제거합니다.
-
Recent Apps에서 앱 잠금:
- 앱을 열고 Recent Apps 버튼을 탭합니다.
- 앱을 찾아 앱 창을 탭하고 길게 누른 다음 Lock this app(일부 Samsung 모델에서 사용 가능).
-
앱에 대한 Auto-Start 활성화(일부 장치에서):
- Settings > Apps > Your App > Permissions > Auto-Start > Enable.
-
앱에 대한 Adaptive Battery Optimization 비활성화:
- Settings > Battery and Device Care > Battery > More Battery Settings > Adaptive Battery > Toggle Off(또는 앱 제외).
네트워크 연결
장치는 푸시 알림을 받으려면 온라인 상태여야 합니다. 장치가 꺼져 있거나 비행기 모드이거나 불안정하거나 인터넷 연결이 없는 경우 적절한 연결이 이루어질 때까지 푸시가 표시되지 않습니다. 자세한 내용은 Time To Live (TTL) Parameter를 참조하세요.WiFi 연결, 방화벽 또는 VPN
연결된 네트워크 / WiFi를 확인하세요. Apple 또는 Google 서버에 대한 연결이 닫혔을 수 있습니다. 인터넷 연결을 비활성화하고 다시 활성화해 보세요. 또한 셀룰러 데이터를 사용하여 WiFi 없이 시도해 보세요. 인터넷과의 트래픽을 제한하는 경우 푸시 서비스와의 연결을 허용하도록 구성해야 합니다.- FCM은 5228, 5229, 5230 포트가 열려 있어야 합니다. 자세한 내용: https://firebase.google.com/docs/cloud-messaging/concept-options
- APNS는 TCP 포트 5223 및 TCP 포트 443 또는 2197에 연결해야 합니다. 자세한 내용: https://support.apple.com/en-us/HT203609
방해 금지 및 집중 모드
장치가 “Do Not Disturb” 또는 “Focus” 모드를 사용하는 경우 알림 표시를 방지하거나 앱의 다른 알림과 다르게 알림을 함께 그룹화할 수 있습니다. 집중 모드로 그룹화된 알림을 스와이프하여 제거하면 장치의 알림 센터에서 앱에 대해 이미 그룹화된 알림에 나중에 표시되지 않습니다. 장치에서 이러한 모드를 확인하고 비활성화하세요.- iOS: Settings > Notifications > Focus Mode
- Android: Settings > Notifications > Focus Mode
알림 그룹화 동작
집중 모드와 함께 다른 버전의 Android에는 자체 알림 그룹화 동작이 있을 수 있습니다. 시도할 솔루션:- OneSignal 대시보드 또는 코드를 사용하여 Android notification categories를 생성해 보세요. 그런 다음 모든 알림에 이 ID를 설정하여 효과가 있는지 확인하세요.
- 장치별 설정 검토: 장치에서 Settings > Notifications > Advanced settings를 확인하여 장치별 그룹화 옵션이 있는지 확인하세요.
- 알림 제한 확인: 이 특정 장치에서 앱에 대해 배터리 최적화 또는 앱 절전 기능이 활성화되어 있는지 확인하세요.
저전력 모드 및 배터리 최적화
iOS 장치: 테스트하는 동안 저전력 모드를 비활성화하거나 장치를 충전하세요. Android 장치: 장치 제조업체 및 운영 체제 버전에 따라 “Battery Optimization” 설정에 여러 다른 이름이 있습니다. Battery Settings에서 앱을 “Unrestricted” 또는 “Not Optimized”로 설정하세요. 이 설정이 없는 경우 Battery Optimization 또는 Power Saving Mode 또는 Energy Saving 또는 Background usage limits 또는 Adaptive Battery Settings를 검색하고 앱에 대해 비활성화하거나 테스트하는 동안 비활성화하세요.에뮬레이터 특이점
에뮬레이터 장치는 다음 두 가지가 모두 필요합니다:- Google Play Services(Google Play Store)가 설치되어 있어야 함
- Cold Boot로 시작
- Android Studio Device Manager를 엽니다
- 장치를 선택하고 Google Play Store가 설치되어 있는지 확인한 다음 Edit을 클릭합니다
- Additional Settings 또는 More 버튼으로 이동합니다
- Boot option을 Cold Boot로 설정합니다
- 변경 사항을 저장하고 에뮬레이터를 다시 시작합니다
푸시 전송
푸시 알림을 보낼 때 확인해야 할 일반적인 사항입니다.메시지 오디언스에 장치가 없음
구독이 메시지의 타겟 오디언스에 포함되지 않을 수 있습니다. Segments 또는 필터를 사용하는 경우 구독이 기준에 맞는지 확인하세요. External ID 또는 다른 별칭을 타겟팅하는 경우 설정되어 있고 올바른 항목으로 보내고 있는지 확인하세요.Collapse ID
메시지에 Collapse ID를 추가하는 경우 최신 알림이 동일한 ID를 가진 이전 알림을 대체합니다. 이를 설정하지 않거나 교체하려는 알림에 대해 올바르게 설정하고 있는지 확인하세요. 자세한 내용은 Remove notifications & TTL을 참조하세요.Android Doze 모드, 우선순위 및 우선순위 낮춤(제한됨) 메시지
Android의 절전 기능(Doze mode 및 App Standby)은 알림을 지연시키거나 차단할 수 있습니다. 이러한 모드는 장치가 플러그를 뽑고 일정 기간 동안 정지 상태일 때 자동으로 적용됩니다. 장치가 이러한 모드에 있는 경우 높은 우선순위 메시지를 보내면 앱이 깨어납니다. 그러나 너무 많이 보내면 알림의 우선순위가 낮아지고 일반 우선순위로 전송될 수 있습니다. FCM states:Android의 높은 우선순위 메시지는 시간에 민감한 사용자 표시 콘텐츠를 위한 것이며 사용자 대면 알림을 생성해야 합니다. FCM이 메시지가 사용자 대면 알림을 생성하지 않는 패턴을 감지하면 메시지의 우선순위가 일반 우선순위로 낮아지거나 Google Play Services에서 처리하도록 위임될 수 있습니다.
개발자: 알림을 차단하거나 제거하는 코드
OneSignal 포그라운드 알림 방지
SDK에는 Foreground Event Listener 메서드가 있습니다. 이 메서드 내에서event.preventDefault()를 호출하여 앱이 열려 있는 동안 알림이 표시되지 않도록 차단할 수 있습니다.
테스트하는 동안 앱이 백그라운드에 있거나 닫혀 있는지 확인하여 알림을 차단하지 않는지 확인하세요.
Android Service Extension이 알림 차단
Android Notification Service Extension을 설정한 경우 이는 앱에 대한 알림의 진입점입니다.event.preventDefault() 메서드로 알림을 차단할 수 있습니다. 코드를 확인하여 이것이 사용되고 있는지 및 어떤 조건에서 사용되는지 확인하세요.
iOS UNUserNotificationCenterDelegate가 포그라운드에서 알림 차단
iOS UNUserNotificationCenterDelegate를 설정한 경우 포그라운드에 있는 동안 iOS 장치가 알림을 표시하지 못하도록 차단하는 코드가 있을 수 있습니다. 이 사용자 지정 코드를 제거하고 대신 SDK Foreground Event Listener 메서드를 사용하세요.iOS 배지 지우기
배지 지우기는 알림에 영향을 줄 수 있습니다. 앱이 배지를 지우면 Notification Center에서 기존 알림을 제거할 수 있습니다. OneSignal의 SDK는 앱이 열릴 때 배지를 지워 알림을 제거합니다. 이를 방지하는 방법에 대한 자세한 내용은 Badges를 참조하세요.알림 제거
Apple은 Notification Center에서 앱의 전달된 모든 알림을 제거하는removeAllDeliveredNotifications() 메서드를 제공합니다. Apple의 removeAllDeliveredNotifications() 개발자 문서를 참조하세요.
Firebase 충돌
Firebase Messaging SDK를 사용하는 경우 Android Manifest 파일에서 다음 줄을 확인하세요. 이로 인해 알림이 차단될 수 있습니다.테스트
앱에 자세한 디버깅 메서드를 추가하려면 Getting a Debug Log를 따르세요. 앱을 백그라운드에서 실행하고 자신에게 메시지를 보내세요. 메시지 이벤트를 받지 못한 경우 다음 정보와 함께support@onesignal.com에 문의하세요:
- 테스트의 전체 로그. 자세한 내용은 Getting a Debug Log를 참조하세요.
- 디버깅할 때 보낸 onesignal.com 대시보드의 메시지 보고서 링크. Delivery > Sent Messages에서 찾을 수 있습니다. 보낸 메시지를 클릭한 다음 URL을 복사하여 붙여넣고 공유하세요.
앱 상태 확인
다음을 실행하여 앱의 현재 상태를 확인하세요. “com.company.appname”을 패키지 이름으로 바꾸세요.stopped=false가 표시되고, 그렇지 않으면 stopped=true가 표시되면 앱이 어떤 방식으로든 강제 종료되었습니다.
또 다른 방법은 몇 개의 알림을 보내고 다음 GCM logcat 항목을 확인하는 것입니다.