개발 모르는 기획자의 시행착오 흔적
유저에게 알림 발송하기!
일상에서 흔히 마주하는 기능이죠.
그런데 막상 구현하려니..
정말 할 때마다 막히더라고요..
어찌어찌 구현 성공했는데,
다음 알림 기능 추가하려니깐 또 안 되는 상황!!!
다음에는 고생 안 하게 이번에는 제대로 파헤쳐 봤어요.
여러분의 시간을 조금 아껴줄 포인트 4 개! 공유드려요 :D
flutter_local_notifications.dart
이게 꼭 필요하더라고요.
프롬프트 쓰실 때 해당 플러그인 활용해 달라고 포함시키세요!
(근데 말 안 해도 알아서 해주기도 해요)
1/ 처음 시작할 때는 → 테스트 알림 하나만 만든다.
OO 페이지에 알림 테스트 버튼 하나 추가할게. {input}이 들어오면, {가장 단순한 알림 메시지} 알림을 5초 후에 발송해 줘.
ex. {소통} 페이지에 알림 테스트 버튼 하나 더 추가할게. {요청 게시글의 status가 변경되었으면}, {그냥 변경되었다}는 알림을 5초 후에 발송해 줘.
이렇게 구현된 알림 버튼을 누르고, 배경 화면으로 돌아가서 기다려보세요.
만약 5초 내 알림이 오면 성공!
2/ 내가 설계한 알림 조건 기반으로 어찌어찌 구현이 되었을 때는 → 주석을 달아 원리를 이해해 본다.
각 구성이 지금 어떤 목적 및 역할을 갖고 있는지 알려줘. {예를 들어, '음식의 예약 알림 설정(권장폐기일 기반)'과 '알림 예약(내부 메서드)' 간 차이가 뭔지 모르겠어. 그리고 '5초 후 테스트 알림 (Background 테스트용)', '5초 후 즉시 알림 발송 (권장폐기일 수정 시 사용)' 간 차이도 아직 이해가 안 가.} 만약 지금 사용하지 않아서 삭제해도 된다면 삭제하고, 간단한 목적 및 역할을 주석으로 남겨줘. 나는 개발자가 아니기 때문에, 이후에 다시 읽어도 이해가 되도록.
여기서 사실 핵심은..
간단한 목적 및 역할을 주석으로 남겨줘.
나는 개발자가 아니기 때문에, 이후에 다시 읽어도 이해가 되도록.
입니다!
그럼 이렇게 주석이 달려요.
길어지긴 해도, 비개발자인 저로써는 너무 도움 되었습니다!
사실 방법은 여러 가지일 것 같아요!
저의 경우를 공유드리자면..
아래와 같은 구성/방식으로 진행되었습니다.
Firestore 구조: users/{userId}/foodLog로 유저별 분리
데이터 조회: getUserLogsByLocation()이 현재 유저의 데이터만 가져옴
알림 설정: 현재 유저의 음식에 대해서만 알림 설정
로컬 알림: 해당 디바이스에서만 발송
아무것도 모르는 상태에서 알림 기능을 만들면,
유저가 앱을 완전히 종료하지 않을 때(백그라운드 상태)에만 알림이 발송돼요.
하지만 우리가 원하는 건?!
유저가 앱을 아예 끄고 있어도(종료 상태) 알림이 가는 것이죠..!
우선 헷갈리는 상태 유형부터 봐볼게요.
자, 그래서 종료 상태일 때 알림 가도록 하는 방법!
1/ OS 예약 알림 (zonedSchedule)
"{어떤 상태}가 되었을 때, {오전 9시}에 알림을 발송한다"라고
예약 코드를 요청하세요.
그럼..
_notifications.zonedSchedule(...)
ㄴ 이런 코드가 활용되어요..!
2/ 푸시 알림 (FCM - Firebase Cloud Messaging)
이 경우는.. 알림 시점이 정해져 있지 않습니다.
서버에서 "지금 보내야 해!"라고 하면,
이걸 캐치해서 디바이스로 보내주는 것이 FCM입니다.
(참고로 저는 서버로 Firebase를 사용하고 있어서 알게 되었어요!)
이 방법을 사용하게 되는 예시 :
운영자가 요청 상태를 변경함
새로운 공지사항 등록
친구가 메시지를 보냄
관리자 승인 완료
제가 사실 유저의 요청을 반영했다는 알림을 주고 싶어서..
알아보게 되었습니다.
이걸 쓰려면 Firebase를 유료로 전환해야 하더라고요..
아직 서비스 검증도 안 된 상황에서
돈을 태우기는 섣부르다고 판단했습니다.
여러분에게 도움이 되었으면 좋겠군요..!
앞으로도 비전공자가 개발할 때
맞닥뜨리는 시행착오들을 공유해 드릴게요!