! 제품 버전을 정확하게 입력해 주세요.
제품 버전이 정확하게 기재되어 있지 않은 경우,
최신 버전을 기준으로 안내 드리므로
더욱 빠르고 명확한 안내를 위해
제품 버전을 정확하게 입력해 주세요!

Wijmo Snapshot 클래스를 사용한 실시간 Firestore 업데이트 > 블로그 & Tips

본문 바로가기

Wijmo Snapshot 클래스를 사용한 실시간 Firestore 업데이트

페이지 정보

작성자 GrapeCity 작성일 2020-05-28 00:00 조회 2,908회 댓글 0건

본문

다른 포스팅에서는 FirestoreCollection 클래스를 사용하는 방법에 대해 설명합니다. 이 클래스를 이용하면 하위 수준의 REST API를 사용해 Firestore 데이터베이스에 있는 데이터를 로드, 확인 및 편집할 수 있습니다. 하위 수준의 REST API는 가볍고 빠르지만 오프라인 캐싱, 실시간 업데이트와 같이 Firestore 웹 클라이언트 라이브러리에 의해 사용 가능해지는 고급 기능은 제공하지 않습니다.

Snapshot 클래스는 CollectionView 클래스를 확장하여 Firebase 컬렉션 및 쿼리에 대한 액세스 권한을 제공합니다. 또한 웹 클라이언트 라이브러리에 의존하여 실시간 업데이트 및 기타 고급 기능을 제공합니다. Snapshot 클래스를 사용하려면 NPM 또는 CDN에서 웹 클라이언트 라이브러리를 로드해야 합니다.


스냅샷 만들기


웹 클라이언트 라이브러리를 로드했다면 다음과 같이 Snapshot 클래스를 만들어 사용할 수 있습니다.

 // initialize Firestore web client library
 const firebaseConfig = {
     apiKey: …
     authDomain: …,
 };
 firebase.initializeApp(firebaseConfig);

 // get a snapshot of the "restaurants" collection
 const db = firebase.firestore();
 let restaurants = db.collection('restaurants');
 let snapshot = new Snapshot(restaurants, {
     query: restaurants.where('type', 'in', ['Japanese', 'Italian' ])
 });

 // bind the snapshot to a FlexGrid
 new FlexGrid('#theGrid', {
     itemsSource: snapshot
 });

위 코드는 웹 클라이언트 라이브러리를 초기화하는 것으로 시작합니다. 그런 다음 식당 유형이 "Japanese" 또는 "Italian"인 "restaurants" 컬렉션의 콘텐츠에 기반을 둔 Snapshot을 빌드합니다.

query 속성은 언제든지 변경될 수 있지만, 항상 "restaurants" 컬렉션에 기반을 두어야 합니다.

끝으로 이 코드에서는 SnapshotFlexGrid를 위한 데이터 소스로 사용합니다.

누구든지 "restaurants" 컬렉션을 변경하면 Snapshot은 이에 대한 알림을 받고 그리드는 자동으로 업데이트됩니다.


인증 활성화


Snapshot 클래스는 웹 클라이언트 라이브러리를 사용하며 이 라이브러리의 인증 메커니즘에 의존합니다.

대부분의 응용 프로그램은 읽기 및 쓰기 작업에 제한 사항을 적용하므로 특정 사용자만 데이터를 보거나 편집할 수 있습니다. 웹 클라이언트 라이브러리는 Firestore 데이터베이스 보안 규칙과 통합됩니다. Firebase 콘솔에서 이 규칙을 만들고 검토하고 수정할 수 있습니다. 예:


 


이 예에서는 누구나 데이터를 읽을 수 있지만 특정 사용자만 변경할 수 있도록 규칙이 설정되어 있습니다. 사용자는 데이터베이스 내에서 "admins" 컬렉션을 사용하여 정의되어 있습니다. "admins" 컬렉션에는 데이터베이스에 쓸 권한이 있는 사용자의 이메일이 포함되어 있습니다.

규칙은 다음과 같습니다.

service cloud.firestore {
   match /databases/{database}/documents {
     match /{document=**} {
       allow read;
       allow write: if exists(/databases/$(database)/documents/admins/$(request.auth.token.email));
     }
   }
 }

Firestore 클래스를 사용할 때와 마찬가지로 OAuth2 클래스를 사용하여 사용자에게 권한을 부여할 수 있습니다. 유일한 차이점은 웹 클라이언트 라이브러리를 사용할 때 이전처럼 accessToken 속성을 사용하지는 않는다는 것입니다. 대신에 OAuth2 클래스가 제공하는 idToken에 기반을 둔 자격 증명 개체를 만들고 이 자격 증명을 사용해 Firebase 클라이언트 라이브러리로 서명해야 합니다. 

 // update state when user changes
 auth.userChanged.addHandler(s => {
     let user = s.user;
     oAuthBtn.textContent = user ? 'Sign Out' : 'Sign In';

     // update Firestore access tokens
     //fs.accessToken = user ? s.accessToken : null;

     // Sign in with credential from the Google user.
     // https://firebase.google.com/docs/auth/web/google-signin
     if (user) {
         let credential = firebase.auth.GoogleAuthProvider.credential(s.idToken);
         firebase.auth().signInWithCredential(credential);
     } else {
         firebase.auth().signOut();
     }
 });

로그인 및 로그아웃 환경은 이전과 동일하지만 Firestore 보안 규칙을 사용하고 사용자 정의함으로써 유연성을 높일 수 있습니다.

사용자는 인증을 받게 되면 Snapshot에서 데이터를 편집할 수 있습니다(사용자의 이메일이 "admins" 컬렉션에 있는 경우).


실시간 업데이트


이 응용 프로그램을 실행하고 브라우저 인스턴스 두 개를 열면 인스턴스를 하나만 변경해도 변경 사항이 즉시 다른 인스턴스에 적용됨을 확인할 수 있습니다.

모든 유형의 인스턴스에 실시간 업데이트가 필요한 것은 아니지만 어떤 경우 매우 중요할 수 있습니다. 또한 Firestore를 이용하면 필요할 때 실시간 업데이트를 쉽게 얻을 수 있습니다.


라이브 데모 실행하기



  • 페이스북으로 공유
  • 트위터로  공유
  • 링크 복사
  • 카카오톡으로 보내기

댓글목록

등록된 댓글이 없습니다.

메시어스 홈페이지를 통해 제품에 대해서 더 자세히 알아 보세요!
홈페이지 바로가기

태그1

인기글

더보기
  • 인기 게시물이 없습니다.
메시어스 홈페이지를 통해 제품에 대해서 더 자세히 알아 보세요!
홈페이지 바로가기
이메일 : sales-kor@mescius.com | 전화 : 1670-0583 | 경기도 과천시 과천대로 7길 33, 디테크타워 B동 1107호 메시어스(주) 대표자 : 허경명 | 사업자등록번호 : 123-84-00981 | 통신판매업신고번호 : 2013-경기안양-00331 ⓒ 2024 MESCIUS inc. All rights reserved.