[Feat] 트래킹 푸시(사진 마일스톤/정상 도달) mixed payload 전환#193
Conversation
silent push(data-only) 일 때 iOS APNs 의 background throttle/묶음 전달로
마일스톤 알림이 한꺼번에 도착하거나 앱 종료 상태에서 누락되는 문제가 있었다.
notification 키를 함께 발송(mixed) 하도록 NotificationType 의 dataOnly 를 false 로
전환해 iOS 시스템이 직접 즉시 배너를 표시하도록 한다.
- 변경 enum: TRACKING_PHOTO_MILESTONE, TRACKING_SUMMIT_REACHED
- data 키 / 라우팅 키 / 본문 결정 흐름은 그대로
- 다른 NotificationType 영향 없음, 마이그레이션 불필요
프론트는 동시 머지 필요:
1) setBackgroundMessageHandler 안 로컬 알림 생성 코드에서 트래킹 타입 skip
(중복 알림 방지)
2) setForegroundNotificationPresentationOptions({alert:false,...}) 로
포그라운드 시스템 배너 차단
Summary of ChangesHello, I'm Gemini Code Assist1! I'm currently reviewing this pull request and will post my feedback shortly. In the meantime, here's a summary to help you and other reviewers quickly get up to speed! 본 PR은 iOS 환경에서 트래킹 관련 푸시 알림이 지연되거나 누락되는 문제를 해결하기 위해 푸시 발송 방식을 개선합니다. 기존의 data-only 방식 대신 notification 키를 포함한 mixed payload를 사용함으로써, 앱이 종료된 상태에서도 시스템이 알림을 즉시 처리하고 배너를 표시할 수 있도록 변경하였습니다. Highlights
New Features🧠 You can now enable Memory (public preview) to help Gemini Code Assist learn from your team's feedback. This makes future code reviews more consistent and personalized to your project's style. Click here to enable Memory in your admin console. Using Gemini Code AssistThe full guide for Gemini Code Assist can be found on our documentation page, here are some quick tips. Invoking Gemini You can request assistance from Gemini at any point by creating a comment using either
Customization To customize the Gemini Code Assist for GitHub experience, repository maintainers can create a configuration file and/or provide a custom code review style guide (such as PEP-8 for Python) by creating and adding files to a Limitations & Feedback Gemini Code Assist may make mistakes. Please leave feedback on any instances where its feedback is incorrect or counterproductive. You can react with 👍 and 👎 on @gemini-code-assist comments. If you're interested in giving your feedback about your experience with Gemini Code Assist for GitHub and other Google products, sign up here. Footnotes
|
|
Important Review skippedAuto reviews are disabled on this repository. Please check the settings in the CodeRabbit UI or the ⚙️ Run configurationConfiguration used: Repository UI Review profile: CHILL Plan: Pro Plus Run ID: You can disable this status message by setting the Use the checkbox below for a quick retry:
✨ Finishing Touches🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
There was a problem hiding this comment.
Code Review
This pull request updates the NotificationType enum constants (TRACKING_PHOTO_MILESTONE and TRACKING_SUMMIT_REACHED) to use mixed payloads for iOS background notification support, changing their boolean flag to false. The review feedback recommends refining the Javadoc comments to suggest using UNUserNotificationCenterDelegate on the iOS client side for dynamic foreground banner control, preventing the global side effects of using setForegroundNotificationPresentationOptions.
Important
The consumer version of Gemini Code Assist on GitHub is being sunset. Starting June 18, 2026, new organization installations will be blocked, and all code review activity will officially cease on July 17, 2026.
For more details on the timeline and next steps, please review the Help Documentation.
| * iOS 백그라운드/잠금화면/앱 종료 상태에서도 시스템이 즉시 배너를 표시하도록 mixed payload | ||
| * (notification 키 + data 키) 로 발송한다. 포그라운드 자동 배너 차단은 클라(앱) 의 | ||
| * setForegroundNotificationPresentationOptions 에서 처리한다. |
There was a problem hiding this comment.
iOS에서 setForegroundNotificationPresentationOptions는 앱 전역에 영향을 미치는 설정입니다. 만약 이 설정을 통해 포그라운드 배너를 일괄 차단하게 되면, 트래킹 알림뿐만 아니라 다른 모든 알림의 포그라운드 배너 노출도 함께 차단되는 부작용이 발생할 수 있습니다.
따라서 다른 알림 타입에 영향을 주지 않고 TRACKING_PHOTO_MILESTONE 및 TRACKING_SUMMIT_REACHED 알림만 포그라운드 배너를 차단하려면, 클라이언트(iOS) 측에서 UNUserNotificationCenterDelegate의 userNotificationCenter(_:willPresent:withCompletionHandler:) 메서드를 구현하여 페이로드 내의 알림 타입(예: NotificationType)을 식별하고 동적으로 completionHandler([])를 호출하도록 처리해야 합니다.
클라이언트와의 명확한 협업 및 오해 방지를 위해 주석의 설명을 구체적으로 수정하는 것을 권장합니다.
| * iOS 백그라운드/잠금화면/앱 종료 상태에서도 시스템이 즉시 배너를 표시하도록 mixed payload | |
| * (notification 키 + data 키) 로 발송한다. 포그라운드 자동 배너 차단은 클라(앱) 의 | |
| * setForegroundNotificationPresentationOptions 에서 처리한다. | |
| * iOS 백그라운드/잠금화면/앱 종료 상태에서도 시스템이 즉시 배너를 표시하도록 mixed payload | |
| * (notification 키 + data 키) 로 발송한다. 포그라운드 배너 노출 여부는 클라(앱)의 | |
| * UNUserNotificationCenterDelegate(willPresent) 에서 알림 타입을 식별하여 동적으로 제어한다. |
References
- 백엔드/프론트엔드 통합 변경 사항 시 백엔드가 기대하는 바와 프론트엔드가 처리해야 하는 영역을 명확히 구분해야 합니다. (link)
setForegroundNotificationPresentationOptions 는 앱 전역 옵션이라 다른 NotificationType 의 시스템 배너도 함께 차단되므로, iOS UNUserNotificationCenterDelegate(willPresent) 에서 data.type 으로 분기하는 방식으로 안내한다.
🧾 요약
🔗 이슈
✨ 변경 내용
✅ 확인