Skip to content

Latest commit

 

History

History
105 lines (70 loc) · 5.56 KB

pushapp.md

File metadata and controls

105 lines (70 loc) · 5.56 KB

모바일 앱 푸시 연동하기

개요

라이믹스로 만든 홈페이지는 웹뷰 기반의 앱에서 손쉽게 기기를 등록하고 푸시 알림을 받을 수 있습니다. 아래의 설명은 FCM 기준입니다.

시스템 설정

FCM을 사용하려면 시스템 설정 → 알림 설정 메뉴에서 FCM HTTP v1 API를 설정해야 합니다.

Firebase 콘솔에서 비공개 키를 생성하여 "FCM 서비스 계정 파일" 입력란에 붙여넣고 저장합니다. 이 파일에는 알림 발송시 인증에 사용하는 개인키를 비롯하여, 프로젝트 ID와 그 밖의 정보가 포함되어 있습니다. 관리자가 아닌 사람에게 서비스 계정 파일이 노출되지 않도록 주의하십시오.

기기 등록

FCM을 통해 device token을 발급받은 앱은, 사용자가 웹뷰 내에서 로그인하거나 회원가입할 때 아래의 방법 중 하나를 사용하여 토큰을 서버로 전송해야 합니다.

  1. device_token이라는 POST 변수
  2. device_token이라는 쿠키
  3. X-Device-Token이라는 헤더

로그인은 actprocMemberLogin인 POST 요청을 의미하고, 회원가입은 actprocMemberInsert인 POST 요청을 의미합니다. 이러한 요청을 할 때 위의 3가지 방법 중 하나로 토큰이 전달되고, 로그인 또는 회원가입에 성공하게 되면, 라이믹스는 해당 회원의 계정에 토큰을 자동으로 등록합니다.

[참고] 위의 조건을 충족하는 쿠키나 헤더가 존재하더라도, 로그인 또는 회원가입 시점 외에는 인식하지 않습니다. 웹뷰 내에서 일어나는 요청들을 일일이 추적하기 어려운 환경이라면 모든 요청에 쿠키나 헤더를 일괄 추가하는 방식으로 구현하여도 무방합니다. 단, 외부 이미지나 스크립트, 링크 등을 통해 다른 사이트에 접속할 때 토큰이 노출되지 않도록 주의하여야 합니다.

알림 발송

토큰이 등록된 회원이 알림을 받으면, 해당 회원이 등록한 모든 기기에 자동으로 푸시 알림이 발송됩니다. 일반적인 게시판 댓글 알림, 쪽지 알림 등을 모바일 앱으로 발송하기 위해 위에서 언급한 시스템 설정 외에 별도의 작업이 필요하지는 않습니다.

일반적인 알림 외에 백엔드에서 임의로 알림을 생성하려면 NcenterliteController 클래스의 sendNotification() 메소드를 사용합니다. 임의의 URL을 지정하거나, 제목과 내용을 각각 커스터마이징하거나, 별도의 데이터를 넣어서 전달하는 등, 일반적인 알림에서 지원되지 않는 다양한 기능을 지원합니다.

알림 수신

토큰을 등록한 앱은 자신에게 전달되는 FCM 알림을 일반적인 방법으로 수신합니다.

고급 활용

로그인 또는 회원가입 시점이 아니더라도, 아래의 API를 사용하여 기기를 등록하고 로그인 상태를 유지할 수 있습니다.

기기 등록 API

member 모듈의 procMemberRegisterDevice 액션에 아래의 변수들을 POST로 제출합니다.

  • user_id (아이디 또는 이메일 주소)
  • password
  • device_token

인증에 성공하면 해당 회원의 계정에 기기가 등록되고, device_key가 반환됩니다.

자동 로그인 API

회원의 아이디나 이메일 주소, 비밀번호 등을 앱에서 기억하지 않고 안전하게 로그인을 유지하는 방법입니다.

member 모듈의 procMemberLoginWithDevice 액션에 아래의 변수들을 POST로 제출합니다.

  • device_token
  • device_key

유효한 회원 계정에 device_token과 일치하는 기기가 등록되어 있고, 해당 기기를 등록할 때 반환했던 device_key가 일치한다면 로그인이 됩니다. 이것을 사용하면 서버의 세션 유지 기간이나 회원의 비밀번호 변경과 관계없이 앱에서 항상 로그인 상태를 유지할 수 있습니다.

로그인 상태 확인 API

위의 자동 로그인 API를 사용하기 전, 현재 로그인이 되어 있는지 확인하는 방법입니다.

member 모듈의 getLoginStatus 액션을 POST로 호출합니다.

로그인되어 있다면 해당 회원의 고유값을 반환하고, 로그인되어 있지 않다면 none을 반환합니다. 이것을 활용하여 로그인이 풀렸거나, 기기를 등록했던 아이디와 다른 아이디로 로그인한 상태인지 확인하고, 필요에 따라 적절히 대응할 수 있습니다.

주의사항

위의 모든 요청은 웹뷰에서 사용하는 것과 동일한 세션 쿠키, user-agent 등을 사용하여 요청해야 하고, 서버에서 쿠키를 반환할 경우 웹뷰에 정확하게 전달해야 합니다. 웹뷰와 별도로 네이티브 부분에서 HTTP client를 생성하여 사용할 경우, 쿠키가 서로 동기화되지 않거나, 일부 쿠키 속성이 정확하게 전달되지 않아 오작동할 수 있습니다.

POST 방식의 모든 요청은 백엔드에서 CSRF 체크를 거칩니다. 각 사이트의 보안 설정에 따라 아래의 두 가지 방법 중 하나를 사용하여 CSRF 체크를 통과하도록 해야 합니다.

  1. Referer 헤더에 사이트 내부 주소(예: 메인화면 주소)를 전송
  2. X-CSRF-token 헤더에 CSRF 토큰을 전송

만약 CSRF 토큰을 사용할 경우, 위에서 설명한 로그인 상태 확인 API를 사용하여 현재 세션에서 유효한 토큰을 얻을 수 있습니다. (로그인 상태 확인 API를 호출할 때는 리퍼러나 CSRF 토큰이 필요하지 않습니다.)