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

[FEAT] 푸시알림에 데이터 페이로드 추가 #98

Merged
merged 2 commits into from
Jan 7, 2024

Conversation

leGit-y
Copy link
Contributor

@leGit-y leGit-y commented Jan 7, 2024

🔎 관련이슈

✨ 변경사항

  • 알림 메시지에 데이터 페이로드 포함시키기

푸시알림을 사용자가 클릭했을 때, 특정화면(우리의 경우, 해당고민의 상세페이지)으로 이동하게끔 하기 위해
필요한 데이터를 아래와 같은 형식으로 포함하여 알림을 보낸다.

        // data must only contain string values
        let message = {
            token: deviceToken,
            notification: {
                title: title,
                body: contents,
            },
            // ! 추가된 부분
            data: {
                worryId: String(payload)
            }
        }

이때, 값들은 전부 string 타입이어야 함을 유의한다.
데이터 페이로드가 포함된 알림 메시지 보내는 방법


  • multicast 방식 수정

이전에는 알림 대상인 모든 유저들에게 알림을 보낼때, multicast(다중전송) 방식을 사용하여
token 속성에 단일 deviceToken이 아닌, deviceTokens(배열) 값을 넣었다.
하지만 해당 multicast 방식은 위처럼 data 값을 추가하여 보낼 수는 있으나, 모든 유저에게 동일한 data 값만을 보낼 수 있는 것으로 확인하였다.
multicast 방식

때문에 개별 유저에게 본인에게 맞는 worryId값은 보내기 위해서는 multicast 방식을 사용할 수 없었고,
for 문을 돌려 개별 유저에게 알맞은 worryId값을 담아 보내는 방식을 사용.


  • 알림 메시지 전송시 필요한 데이터 한꺼번에 가져오기

조건에 맞는 데드라인의 고민글을 찾고, 해당 고민글의 유저를 찾고, 해당 유저의 대바이스토큰을 찾아
앞서 말한 형식과 일치하게 하여 알림을 보내야 했다.
우리가 원하는 정보를 한꺼번에 가져오기 위해, worryRepository.ts 의 findUserListByDeadline 함수를 아래와 같이 수정하였다.
(세 개의 테이블을 조인하는 개념)

const findUserListByDeadline = async(date: Date) => {
    return await prisma.worry.findMany({
       include:{
            user:{
                include:{
                    token:true
                }
            }
        },
        where: {
            deadline: date,
            final_answer: null
        }
    })
}

prisma - deeply nested relations


  • alarmController.ts에서 settingAlarm 함수 수정

알람 비활성화 상태에서 알람 비활성화하려 할 때 & 알람 활성화 상태에서 알람 활성화하려 할 때 처리

📃 참고사항

알림 클릭시 특정화면으로 이동하는 방법
https://firebase.google.com/docs/cloud-messaging/send-message?hl=ko#example-notification-click-action

우리가 구현하고자 하는 거랑은 다른것이, 우리는 특정화면으로 이동하기 위해서 필요한 데이터가 필요한 경우이고
위 링크는 특정화면으로 이동하기 위한 부가적인 데이터가 필요하지 않은 경우인거 같다.

@leGit-y leGit-y merged commit c7cdc86 into main Jan 7, 2024
1 check passed
@leGit-y leGit-y deleted the feat/alarm-with-worryid branch January 7, 2024 14:43
@leGit-y leGit-y added Feature New feature or request Fix Something needs to be fixed labels Jan 7, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Feature New feature or request Fix Something needs to be fixed
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant