Skip to content

[Feat] 트래킹 푸시(사진 마일스톤/정상 도달) mixed payload 전환#193

Merged
JangInho merged 2 commits into
developfrom
feat/#190-tracking-push-mixed
Jun 4, 2026
Merged

[Feat] 트래킹 푸시(사진 마일스톤/정상 도달) mixed payload 전환#193
JangInho merged 2 commits into
developfrom
feat/#190-tracking-push-mixed

Conversation

@JangInho

@JangInho JangInho commented Jun 4, 2026

Copy link
Copy Markdown
Contributor

🧾 요약

  • silent push(data-only) 일 때 iOS APNs 의 background throttle/묶음 전달로 마일스톤 알림이 한꺼번에 도착하거나 앱 종료 상태에서 누락되는 문제가 있었다.

🔗 이슈

✨ 변경 내용

  • notification 키를 함께 발송(mixed) 하도록 NotificationType 의 dataOnly 를 false 로 전환해 iOS 시스템이 직접 즉시 배너를 표시하도록 한다.
  • 변경 enum: TRACKING_PHOTO_MILESTONE, TRACKING_SUMMIT_REACHED
  • data 키 / 라우팅 키 / 본문 결정 흐름은 그대로
  • 다른 NotificationType 영향 없음, 마이그레이션 불필요

✅ 확인

  • 빌드 OK
  • 테스트 OK

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,...}) 로
     포그라운드 시스템 배너 차단
@JangInho JangInho self-assigned this Jun 4, 2026
@gemini-code-assist

Copy link
Copy Markdown
Contributor

Summary of Changes

Hello, 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

  • 푸시 알림 페이로드 방식 변경: iOS의 백그라운드 푸시 제한 문제를 해결하기 위해 기존 data-only 방식에서 notification 키를 포함한 mixed payload 방식으로 전환했습니다.
  • NotificationType 설정 업데이트: TRACKING_PHOTO_MILESTONE 및 TRACKING_SUMMIT_REACHED 타입의 dataOnly 설정을 false로 변경하여 시스템이 즉시 배너를 표시하도록 개선했습니다.
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 Assist

The 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 /gemini <command> or @gemini-code-assist <command>. Below is a summary of the supported commands on the current page.

Feature Command Description
Code Review /gemini review Performs a code review for the current pull request in its current state.
Pull Request Summary /gemini summary Provides a summary of the current pull request in its current state.
Comment @gemini-code-assist Responds in comments when explicitly tagged, both in pull request comments and review comments.
Help /gemini help Displays a list of available commands.

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 .gemini/ folder in the base of the repository. Detailed instructions can be found here.

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

  1. Review the Privacy Notices, Generative AI Prohibited Use Policy, Terms of Service, and learn how to configure Gemini Code Assist in GitHub here. Gemini can make mistakes, so double check it and use code with caution.

@coderabbitai

coderabbitai Bot commented Jun 4, 2026

Copy link
Copy Markdown

Important

Review skipped

Auto reviews are disabled on this repository. Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro Plus

Run ID: 8e82be10-e898-4014-a158-da3344b692b0

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch feat/#190-tracking-push-mixed

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.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@gemini-code-assist gemini-code-assist Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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.

Comment on lines +41 to +43
* iOS 백그라운드/잠금화면/앱 종료 상태에서도 시스템이 즉시 배너를 표시하도록 mixed payload
* (notification 키 + data 키) 로 발송한다. 포그라운드 자동 배너 차단은 클라(앱) 의
* setForegroundNotificationPresentationOptions 에서 처리한다.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

iOS에서 setForegroundNotificationPresentationOptions는 앱 전역에 영향을 미치는 설정입니다. 만약 이 설정을 통해 포그라운드 배너를 일괄 차단하게 되면, 트래킹 알림뿐만 아니라 다른 모든 알림의 포그라운드 배너 노출도 함께 차단되는 부작용이 발생할 수 있습니다.

따라서 다른 알림 타입에 영향을 주지 않고 TRACKING_PHOTO_MILESTONETRACKING_SUMMIT_REACHED 알림만 포그라운드 배너를 차단하려면, 클라이언트(iOS) 측에서 UNUserNotificationCenterDelegateuserNotificationCenter(_:willPresent:withCompletionHandler:) 메서드를 구현하여 페이로드 내의 알림 타입(예: NotificationType)을 식별하고 동적으로 completionHandler([])를 호출하도록 처리해야 합니다.

클라이언트와의 명확한 협업 및 오해 방지를 위해 주석의 설명을 구체적으로 수정하는 것을 권장합니다.

Suggested change
* iOS 백그라운드/잠금화면/ 종료 상태에서도 시스템이 즉시 배너를 표시하도록 mixed payload
* (notification + data ) 발송한다. 포그라운드 자동 배너 차단은 클라()
* setForegroundNotificationPresentationOptions 에서 처리한다.
* iOS 백그라운드/잠금화면/ 종료 상태에서도 시스템이 즉시 배너를 표시하도록 mixed payload
* (notification + data ) 발송한다. 포그라운드 배너 노출 여부는 클라()
* UNUserNotificationCenterDelegate(willPresent) 에서 알림 타입을 식별하여 동적으로 제어한다.
References
  1. 백엔드/프론트엔드 통합 변경 사항 시 백엔드가 기대하는 바와 프론트엔드가 처리해야 하는 영역을 명확히 구분해야 합니다. (link)

setForegroundNotificationPresentationOptions 는 앱 전역 옵션이라 다른 NotificationType
의 시스템 배너도 함께 차단되므로, iOS UNUserNotificationCenterDelegate(willPresent)
에서 data.type 으로 분기하는 방식으로 안내한다.
@JangInho
JangInho merged commit db75c55 into develop Jun 4, 2026
1 check passed
@howooyeon howooyeon changed the title feat: 트래킹 푸시(사진 마일스톤/정상 도달) mixed payload 전환 [Feat] 트래킹 푸시(사진 마일스톤/정상 도달) mixed payload 전환 Jun 4, 2026
@howooyeon
howooyeon deleted the feat/#190-tracking-push-mixed branch June 5, 2026 12:29
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[feat] 트래킹 silent push 변경

1 participant