Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

refactor: fcm 푸시 알림 리팩토링 #110

Merged
merged 25 commits into from
Dec 19, 2024
Merged

Conversation

kimyu0218
Copy link
Collaborator

@kimyu0218 kimyu0218 commented Dec 17, 2024

Issue Number

close: #108

작업 개요

다중 로그인, 멀티 디바이스 지원을 위해 fcm 푸시 알림을 리팩토링 했습니다.

작업 사항

  • device, device_subscription 테이블을 만들었습니다.
    • 사용자가 여러 개의 디바이스를 사용할 수 있으므로 member 테이블에 두었던 device_token 필드를 삭제하고 device라는 별도의 테이블을 만들었습니다.
    • device_subscription 테이블에 멤버의 특정 디바이스가 구독한 미션 목록을 저장하도록 만들었습니다.
  • devicemember 도메인을 분리했습니다. (service, presentation, domain 등)
  • aos와 ios 모두 푸시 알림을 받을 수 있도록 notification + data 혼합 메시지 형태를 보내도록 수정했습니다.

고민한 점들(필수 X)

Note

(aos의 경우) 하나의 디바이스로 여러 계정에 로그인할 수 있습니다.

  • A 계정B 계정이 디바이스 토큰을 공유할 때, A 계정에게 B 계정의 푸시 알림이, B 계정에게 A 계정의 푸시 알림이 전송될 수 있습니다.
  • 이를 예방하기 위해 로그인할 때마다 해당 디바이스로 구독한 모든 토픽을 구독 취소하고, 현재 계정을 기준으로 새롭게 토픽을 구독하도록 만들었습니다.

Note

(현재는 사용하지 않지만) 디바이스 운영체제 정보를 device 테이블에 os_type으로 저장하고 있습니다.

  • 지금은 푸시 메시지 타입을 통일하고 있지만 추후 운영체제에 따른 분기 처리가 필요할 때 사용할 예정입니다.

스크린샷(필수 X)

여기에 작성하세요

@kimyu0218 kimyu0218 marked this pull request as ready for review December 19, 2024 05:37
@kimyu0218 kimyu0218 requested a review from songyi00 as a code owner December 19, 2024 05:37
created_at datetime(6) null,
deleted_at datetime(6) null,
updated_at datetime(6) null,
device_identifier varchar(255) not null,
Copy link
Collaborator Author

Choose a reason for hiding this comment

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

  • device_token이 변할 수 있는 값이고 푸시 알림을 활성화하지 않은 경우 없는 값이기 때문에 기기를 구별하는 고유 식별자를 클라이언트한테서 전달 받을 예정입니다 (aos는 있다고 합니당)
  • aos는 식별자가 20자 정도라고 하는데 아직 ios는 몰라서 일단 255자로 두었습니다~

@kimyu0218 kimyu0218 merged commit 79abfac into develop Dec 19, 2024
1 check passed
@kimyu0218 kimyu0218 deleted the refactor/#108-fcm-push branch December 19, 2024 16:06
Comment on lines +27 to +35
@Transactional
public void updateDeviceToken(final UpdateDeviceTokenCommand command) {
if (command.deviceIdentifier().isBlank() // TODO: 추후 앞의 조건 삭제
|| !deviceRepository.existsByDeviceIdentifier(command.deviceIdentifier())) {
createDevice(command.memberId(), command.deviceIdentifier(), command.deviceToken(), command.osType());
} else {
updateDevice(command.memberId(), command.deviceIdentifier(), command.deviceToken());
}
}
Copy link
Collaborator Author

@kimyu0218 kimyu0218 Dec 20, 2024

Choose a reason for hiding this comment

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

Warning

PATCH 시 insert가 발생합니다

  • updateDeviceToken이 실행되었을 때 device 테이블을 확인하여 insert나 update를 수행하고 있습니다.
  • insert가 POST가 아닌 PATCH에서 발생하게 되는데 404를 내려주고 createDevice를 실행하도록 하는 것이 좋을까요?

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.

fcm 푸시 알림 리팩토링
1 participant