크롬(삼성 브라우저)에서 페이스북이나 유튜브와 같은 형태의 댓글 알림을 표시해주는 모듈입니다.
웹소켓, SSE를 사용하는게 아닌, 구글 FCM(GCM)을 사용하여 알림을 전송합니다.
사실 파이어폭스에서도 되게 할려고 하였으나 여러가지 걸림돌이 많아서 파이어폭스는 일단 keep 하였습니다.
알림이 어떤 형태로 오는지 확인하고 싶으시다면 https://gauntface.github.io/simple-push-demo/ 에서 확인 가능합니다.
https://github.com/huhani/xe-noti
설치 방법
1. 모듈 파일은 모듈에 복사, manifest.json, service-worker.js파일은 무.조.건. 사이트 최상단 디렉토리에다 복사.
2. https://console.firebase.google.com 에서 서버 키(Server key)와, 발신자 키(Sender ID) 발급. 발급 방법은 https://developers.google.com/web/updates/2015/03/push-notifications-on-the-open-web 참조.
3. 발급받은 서버 키는 /index.php?module=admin&act=dispNotiAdminConfig 의 "Google FCM API Key"에 입력, 발신자 키는 아까 복사한 사이트 최상위 디렉터리에 있는 manifest.json의 "gcm_sender_id" 항목에다 적기. 그 외 name, short_name 등.. 항목들도 적당히 입력.
4. /index.php?act=dispNotiDeviceList 들어가서 알림 테스트. 새 단말기가 등록되었다는 메세지가 뜨지 않는다면 위 과정중 하나라도 잘못되었을 가능성이 큼.
잘 사용하신다면 깃허브에 별이라도 눌러주시면 매우 감사하겠습니다 ㅠㅠ
+ https://github.com/huhani/xe-comment-without-refresh/tree/master/addons/board_extender
해당 애드온도 설치할 것을 권장합니다만, 만약 사용하기 싫으시다면
/noti/noti.controller.php 파일의 cpage_detect 항목을 지워주세요.
=============
P.S.1
기본적으로 PC에서 알림이 뜬 후 20초 뒤에 자동으로 닫히는데, service-worker.js 파일의 requireInteraction 값들을 true로 해놓는다면 10분이 지나던 1시간이 지나던 자동으로 닫히지 않습니다.
P.S.2
안드로이드에선 브라우저를 닫아도 알림이 옵니다. 모듈 설정에서 "FCM 메세지 우선 순위"를 "높은 우선순위" 로 설정해놓으면 절전 모드에서도 알림이 옵니다. 기본값은 "보통 우선순위"이지만 "높은 우선순위"로 설정할 것을 권장합니다.
P.S.3
안드로이드에선 PC와는 달리 알림이 와도 자동으로 닫히지 않습니다. 알림은 최대 50개까지 쌓이고(현재까진 그렇다만 추후 브라우저 업뎃으로 인해 정책이 바뀐다면 달라 질 수도 있습니다) 그 이후로부턴 아마 알림이 오지 않을겁니다. 알림을 자동으로 닫히게 하고 싶어도 이게 브라우저 버그인가봅니다 ㅠㅠ
P.S.4
모듈 설정의 "자동 로그인시 사용" 사용 설정시 자동 로그인(로그인 유지)을 사용할 경우 자동으로 알림 사용을 유도합니다. 알림 사용중 클라이언트가 로그아웃 할 시, 알림도 자동 해제됩니다.
하지만 유저가 수동으로 알림사용을 설정하였을 시, 로그아웃하여도 알림 사용 설정은 유지됩니다.
P.S.5
모듈 설정의 "알림 발송 닉네임" 항목은 아직 신경쓸 필요가 없습니다. 현재까진 그저 아무런 가치도 없는 쓰레기 항목일 뿐입니다. 미래에 쓸 일이 있을까봐 만들어는 뒀지만 아마 쓸 일이 없을 것 같습니다.
P.S.6
service-worker.js 파일이 ServiceWorker로 등록이 된 상태인 경우 서버에서 service-worker.js 파일을 수정하여도 반영이 되지 않습니다. 등록된 ServiceWorker를 uninstall 한 뒤, 다시 install한다면 수정된 부분이 반영될 것입니다.
P.S.7
슈퍼 캐시 모듈을 사용하시는 경우 슈퍼 캐시 모듈의 "기타 설정" 탭의 "캐시 예외 쿠키에 "_noti" 를 추가하여 주세요.