투케이2K

18. (TWOK/STUDY) [투케이 학습] : Firebase FCM V1 푸시 알림 전송 방식 학습 본문

투케이2K 학습정리

18. (TWOK/STUDY) [투케이 학습] : Firebase FCM V1 푸시 알림 전송 방식 학습

투케이2K 2023. 12. 18. 19:09

[제 목]

[투케이 학습] : Firebase FCM V1 푸시 알림 전송 방식 학습

 

[설 명]

 

=====================================================
[FCM 변경 관련 이슈]
=====================================================

1. 기존에 사용하던 FCM 레거시 HTTP 알림 메시지 발송 방식이 2023-06-20 일에 중단 되는 이슈

  >> 기존 레거시 FCM 방식을 FCM V1 방식으로 마이그레션 필요



=====================================================
[FCM V1 기술 관련 내용]
=====================================================

1. 액세스 토큰을 통한 보안 향상 : 
  >> HTTP v1 API는 OAuth2 보안 모델에 따라 수명이 짧은 액세스 토큰을 사용합니다
  >> 액세스 토큰 만료 시간은 최대 1시간 설정으로, 기존 API 에서 사용하는 서버키 방식 보다 보안에 뛰어 납니다


2. 보다 효율적인 플랫폼에 따른 메시지 맞춤설정 : 
  >> 메시지 본문의 경우 HTTP v1 API는 모든 대상 인스턴스에 전달되는 공용 키는 물론 플랫폼에 따라 메시지를 맞춤설정할 수 있는 플랫폼별 키 가 있습니다
  >> 플랫폼별 키를 사용하면 메시지 하나로 여러 클라이언트 플랫폼에 약간 다른 페이로드를 전송하는 '재정의'를 만들 수 있습니다


3. 새 클라이언트 플랫폼 버전을 위한 확장성 강화 및 미래 경쟁력 확보 : 
  >> HTTP v1 API는 Apple 플랫폼, Android, 웹에 제공되는 메시지 옵션을 완전히 지원합니다
  >> 플랫폼별로 JSON 페이로드에 자체 정의된 블록이 있으므로 FCM에서 필요에 따라 새 버전과 새 플랫폼으로 API를 확장할 수 있습니다


4. 기기 그룹 메시징 관리 지원 제외
  >> HTTP v1은 기기 그룹에 메시지를 보낼 수 있지만 관리는 지원하지 않습니다



=====================================================
[서버] : [FCM V1 메시지 발송 관련 흐름도]
=====================================================

1. 관리자는 파이어베이스 콘솔에서 [비공개 키] 파일 발급 (JSON 파일)


2. 관리자는 서버 특정 디렉토리에 발급 받은 [비공개 키] 를 삽입 및 환경 변수 설정 수행


3. 푸시 서버에서는 [비공개 키] 를 통해 [사용자 인증 수행] 및 푸시 발송에 필요한 [액세스 토큰 발급] 요청


4. 푸시 서버에서는 [액세스 토큰 발급] 이 완료 된 경우 HTTP 요청 [URL 정의], [헤더 값 추가], [메시지 발송 JSON 페이로드] 정의 수행
  >> URL (POST) : https://fcm.googleapis.com/v1/projects/<PROJECT_UNIQUE_ID : 파이어베이스 콘솔에서 확인>/messages:send
  >> Header : Authorization: Bearer <OAUTH_2_ACCESS_TOKEN : 액세스 토큰>
  >> Body : 
----------------------------------------------------------------------
[토픽 지정 발송]

{
  "message": {
    "topic": "news",
    "notification": {
      "title": "Breaking News",
      "body": "New news story available."
    },
    "data": {
      "story_id": "story_12345"
    }
  }
}
----------------------------------------------------------------------
[특정 타겟 기기 발송]

{
   "message":{
      "token": <특정 기기 푸시 알림 토큰>,
      "notification":{
        "body":"This is an FCM notification message!",
        "title":"FCM Message"
      }
   }
}
----------------------------------------------------------------------


5. 푸시 알림 메시지 발송 실시



=====================================================
[모바일] : [FCM V1 메시지 표시 관련 흐름도]
=====================================================

1. 프로젝트에 파이어베이스 FCM 라이브러리 적용


2. 프로젝트에서 푸시 알림 토큰 확인 및 실시간 푸시 알림 서비스 확인 클래스 작성
  >> 네이티브에서 FCM V1 방식 푸시 알림 토큰은 기존 레거시 FCM 과 동일하게 취득 사용


3. 네이티브에서 획득한 푸시 알림 토큰을 푸시 알림 서버에서 발송할 수 있도록 DB 에 토큰 저장 API 호출 실시
   >> 기기 토큰 변경 시점 참고 : 새 기기에서 앱 복원, 사용자가 앱 제거/재설치, 사용자가 앱 데이터 소거


4. 실시간 푸시 알림 메시지가 도착 시 변경 된 푸시 알림 페이로드 형식에 맞게 JSON 데이터 파싱 수행


5. 푸시 알림 메시지 표시 수행
  >> 안드로이드 인 경우 오레오 (Oreo) 버전 이상 사전) 알림 채널 생성 필요
  >> 안드로이드, IOS 모두 푸시 알림 표시를 위해 사전) 사용자로 부터 알림 표시 권한 획득 필요



=====================================================
[FCM V1 적용 관련 서비스 유의 사항]
=====================================================

1. 푸시 서버는 FCM 메시지 발송 시 유효한 액세스 토큰으로 메시지를 발송해야하므로, 메시지 발송 전) 액세스 토큰 유효성 검사 필요
  >> 액세스 토큰 발급 요청으로 확인 수행


2. HTTP v1 API 에서 특정 기기 타겟으로 메시지 발송 시 등록 된 토큰이 잘못된 경우에 따른 사용자 고지 처리 
  >> 푸시 서버에서 유효하지 않은 토큰인 경우 UNREGISTERED(HTTP 404), INVALID_ARGUMENT(HTTP 400) 리턴
  >> 해당 응답 값을 받은 특정 기기는 DB 업데이트 필요 : 유효하지 않은 토큰 사용 기기, 갱신 필요 플래그값 저장 (ex : token (Y, N))
  >> 사용자가 앱 실행 후 API 호출 및 토큰 유효성 값 확인 후 메인 화면에 푸시 사용 가능 여부 표시



=====================================================
[FCM V1 적용 마이그레이션 참고 사이트]
=====================================================

1. 서버 마이그레이션 참고 : https://firebase.google.com/docs/cloud-messaging/migrate-v1?hl=ko#java_1

2. 기기 토큰 관리 가이트 문서 : https://firebase.google.com/docs/cloud-messaging/manage-tokens?hl=ko

3. 샘플 액세스 토큰 확인 oauth 사이트 : https://developers.google.com/oauthplayground/

 

반응형
Comments