dev-yakuza / dev-yakuza.github.io

8 stars 9 forks source link

[Flutter] 로컬 푸시 노티피케이션 - Flutter에서 flutter_local_notifications를 사용하여 기기 자체에서 특정 시간에 푸시 메시지를 표시하는 방법에 대해서 알아봅시다. #64

Open utterances-bot opened 1 year ago

utterances-bot commented 1 year ago

[Flutter] 로컬 푸시 노티피케이션 - Flutter에서 flutter_local_notifications를 사용하여 기기 자체에서 특정 시간에 푸시 메시지를 표시하는 방법에 대해서 알아봅시다.

Flutter에서 flutter_local_notifications를 사용하여 기기 자체에서 특정 시간에 푸시 메시지를 표시하는 방법에 대해서 알아봅시다.

https://dev-yakuza.posstree.com/ko/flutter/flutter_local_notifications/

kohj1018 commented 1 year ago

너무 좋은 글 남겨주셔서 감사합니다! 한 가지 궁금한 부분이 있는데요, '새로운 메시지를 등록할 때, 이전에 등록된 메시지를 모두 취소하기 위해 cancelAll 함수를 사용하였습니다.' 라고 말씀해주셨는데 새로운 메시지를 등록할 때 cancelAll() 함수를 사용하는 이유가 무엇인가요?

dev-yakuza commented 1 year ago

@kohj1018

안녕하세요. 블로그 글을 봐주셔서 감사합니다.

cancelAll을 사용하는 이유는 이전에 등록한 메시지를 모두 지우기 위해서 입니다. 특정 시간에 푸시 메시지를 보낼 때는 큰 문제가 없지만, 일정 주기로 보내는 메시지인 경우, 중복되서 메시지가 발송될 때가 있습니다. 특정 시간에 푸시 메시지를 보낼 때도, id를 잘못 설정할 경우, 메시지가 여러번 발송되는 경우가 있어서, 안전하게 모든 메시지를 지우고, 다시 등록하도록 하였습니다. 정확히 한번만 등록하고, id를 통해 중복 등록을 피하도록 하였다면 사용하지 않으셔도 문제가 없을거 같습니다.

제 답변이 조금이나마 도움이 되었으면 좋겠습니다.

감사합니다.

kohj1018 commented 1 year ago

친절히 답변해주셔서 감사합니다 :)

현재 삼성 기본 알람앱과 비슷한 서비스를 제공하는 기능을 만들고 있는데요, 특정 시간, 특정 요일에 알람을 설정하면 해당 요일의 해당 시간이 될 때마다 계속해서 알림을 주려고 합니다. 이 경우 답글 달아주신 내용 중 후자인 '일정 주기로 보내는 메시지'로 생각하면 될까요? 그렇다면 몇 가지 질문이 있는데요,

  1. '매일 오전 9시'에 알림을 등록 해 놓은 상태에서 새로 '매일 오전 11시'에 알림을 또 등록하려고 하는 경우에도 cancelAll을 사용해도 괜찮은가요?
  2. 기존에 등록된 '매일 오전 9시' 알림의 알림 오는 시간을 변경하려고 하면 기존 notification을 cancel함수로 삭제하고 다시 만드는 것이 안전한가요?
  3. '매일 오전 9시'에 알림을 등록 해 놓은 상태에서 새로 '매일 오전 11시'에 알림을 또 등록하려고 할 때 두 notification의 id를 다르게 해주면 중복 문제를 피할 수 있다고 해주셨는데 id 값을 어떻게 관리하시나요? (중복되지 않게 하기 위해 id 파라매터에 변수를 넣어놓고 새로운 알림이 등록될 때마다 변수값을 달리해서 등록해줘야할텐데 어떠한 방식으로 id 값을 관리하시는지 궁금합니다)
  4. _registerMessage 함수의 final tz.TZDateTime now = tz.TZDateTime.now(tz.local); tz.TZDateTime scheduledDate = tz.TZDateTime( tz.local, now.year, now.month, now.day, hour, minutes, ); 에서 year, month, day 는 알림을 등록하는 현재의 값이 들어가는 것 같은데 '매일 오전 9시' 와 같이 알림을 주고 싶다면 코드에 변경을 줘야하나요?
dev-yakuza commented 1 year ago

@kohj1018

'매일 오전 9시'에 알림을 등록 해 놓은 상태에서 새로 '매일 오전 11시'에 알림을 또 등록하려고 하는 경우에도 cancelAll을 사용해도 괜찮은가요?

cancelAll은 등록된 모든 메시지를 제거합니다. 따라서 매일 오전 11시 알림을 등록할 때, cancelAll을 사용하면 매일 오전 9시 알림은 등록이 취소됩니다.

기존에 등록된 '매일 오전 9시' 알림의 알림 오는 시간을 변경하려고 하면 기존 notification을 cancel함수로 삭제하고 다시 만드는 것이 안전한가요?

flutter_local_notifications는 수정 기능을 제공하지 않고 있습니다. 따라서 등록된 매일 오전 9시 알림의 알림 시간을 변경하는 방법이 없습니다. 따라서 기존에 등록한 알림을 제거하고 새로운 시간에 새로운 알림을 등록해야 합니다.

'매일 오전 9시'에 알림을 등록 해 놓은 상태에서 새로 '매일 오전 11시'에 알림을 또 등록하려고 할 때 두 notification의 id를 다르게 해주면 중복 문제를 피할 수 있다고 해주셨는데 id 값을 어떻게 관리하시나요? (중복되지 않게 하기 위해 id 파라매터에 변수를 넣어놓고 새로운 알림이 등록될 때마다 변수값을 달리해서 등록해줘야할텐데 어떠한 방식으로 id 값을 관리하시는지 궁금합니다)

id를 관리하기 위해서는 많은 방법이 있을거 같습니다. 예를 들어 SharedPreferences라던지, sqflite라던지, 해당 키를 저장하여 관리하시면 될거 같습니다. 시간별로 하나의 메시지만 존재한다면 단순히 시간을 id로 사용해도 될거 같습니다.

_registerMessage 함수의 final tz.TZDateTime now = tz.TZDateTime.now(tz.local); tz.TZDateTime scheduledDate = tz.TZDateTime( tz.local, now.year, now.month, now.day, hour, minutes, ); 에서 year, month, day 는 알림을 등록하는 현재의 값이 들어가는 것 같은데 '매일 오전 9시' 와 같이 알림을 주고 싶다면 코드에 변경을 줘야하나요?

공신 문서 등을 참고하시면 많은 도움이 될거 같습니다.

kohj1018 commented 1 year ago

도움이 많이 되었습니다 대단히 감사합니다! :)

dev-yakuza commented 1 year ago

@kohj1018

도움이 되었다니 정말 기쁘네요. 😍 앞으로도 좋은 글로 또 찾아뵙겠습니다.

감사합니다.