FIREBASE

[FireBase] 파이어베이스를 이용한 이벤트 배너 관리하기

seominki 2023. 12. 26. 09:40

FireBase 란?

  • Firebase는 구글에서 개발한 클라우드 기반의 백엔드 서비스를 제공하는 모바일 및 웹 애플리케이션 개발 플랫폼이다.
  • Firebase는 데이터베이스, 인증, 스토리지, 호스팅, 애널리틱스 등의 다양한 기능을 제공하며, Realtime Database와 Cloud Firestore, Authentication, Cloud Storage, Hosting, Cloud Messaging 등의 기능을 포함한다.
  • Firebase는 다양한 프로그래밍 언어와 플랫폼을 지원하며, 개발자들은 빠르게 애플리케이션을 개발하고 배포할 수 있다.

이미지 파일 스토리지에 저장

  • 각 배너 이미지 목록들을 스토리지에 저장
  • 배너 종류에 따라 파일을 나누어 저장하는게 관리 하는데 용이함

remote config에 배너 설정을 json 파일로 저장

  • 프로젝트에 현재일 기준으로 시작일 종료일을 비교하는 로직 및 콜백 함수는 따로 구현해야함
  • ga 데이터를 쌓기 위한 event parameter 도 별도 설정
  "homeMainBanner": [
    {
      "startShowDate": "2023-12-18", // 시작일
      "lastShowDate": "2024-01-16", // 종료일
      "image": "https://firebasestorage/" // 이미지 경로
      "functionName": "openBrowser", // 배너 클릭시 실행시킬 함수 이름
      // google analytics 로 전송할 파라미터 및 이벤트 페이지 url
      "parameters": {
        "event": "",
        "eventCategory": "",
        "eventLabel": "",
        "targetUrl": ""
      }
    }
  ]

프로젝트에서 remoteConfig 에 저장되어 있는 data 가져오기

import firebase from "firebase/app";  
import "firebase/remote-config";

function getEventBanner() {  
    const firebaseConfig = {  
        apiKey: "",  
        authDomain: "",  
        projectId: "",  
        appId: "",  
    };

    // 이미 config가 설정되어 있는 경우 다시 초기화 하지 않도록 하기 위한 코드  
    const app = !firebase.apps.length  
        ? firebase.initializeApp(firebaseConfig)  
        : firebase.app();

    const remoteConfig = app.remoteConfig();

    remoteConfig.settings = {  
        minimumFetchIntervalMillis: 60000 * 60, // 최소 1시간마다 서버에서 가져오기  
    };

// 원격 구성 가져오기  
    remoteConfig.fetchAndActivate()  
    .then(() => {  
        // 운영환경 별 json file 다르게 설정  
         const jsonfileName = ENV === "production" ? "prodBanners" : "devBanners";  
          // Remote Config에서 JSON 값 가져오기  
          const jsonValue = remoteConfig.getString(jsonfileName);  
          const jsonObject = JSON.parse(jsonValue);  
          this.eventBanner = jsonObject; // 배너 목록을 담을 변수  
          })  
    .catch((error) => {  
        console.error("Error fetching remote config:", error);  
    });  
}