본문 바로가기

유니티

[유니티] Firebase Database 실시간 데이터 변화 감지하는 함수 만들기

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using Firebase;
using Firebase.Database;
using Firebase.Extensions;

public class MakeHintManager : MonoBehaviour
{
    DatabaseReference dataReference;
    
    void Start()
    {
        dataReference = FirebaseDatabase.DefaultInstance.RootReference;
        dataReference.ValueChanged += ValueChanged;
    }
    void ValueChanged(object data,ValueChangedEventArgs args)
    {
        if (args.DatabaseError != null)
        {
            Debug.Log(args.DatabaseError.Message);
        }
        else
        {
            Debug.Log("데이터 변화 감지");
        }
    }
}

앞선 포스팅을 따라서 firebase database에 접근을 한 경우, 만약 데이터베이스상에서 변화가 생기면 Value Change라는 함수가 실행되는 모습을 확인할 수 있다.

만약, 전체 데이터베이스가 아니라 특정 이름값 자식들 부터의 데이터 변화를 감지하고 싶다면,

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using Firebase;
using Firebase.Database;
using Firebase.Extensions;

public class MakeHintManager : MonoBehaviour
{
    DatabaseReference dataReference;
    
    void Start()
    {
        dataReference = FirebaseDatabase.DefaultInstance.GetReference("specific");//이 노드의 child들이 바뀔때 만 감지 
        dataReference.ValueChanged += ValueChanged;
    }
    void ValueChanged(object data,ValueChangedEventArgs args)
    {
        if (args.DatabaseError != null)
        {
            Debug.Log(args.DatabaseError.Message);
        }
        else
        {
            Debug.Log("데이터 변화 감지");
        }
    }
}

이런 식으로 코드를 짜주면, specific이라는 이름값 하위의 값들이 변할 때에만 ValueChange함수가 호출되는것을 볼 수 있다.

 

이와 비슷한 여러 함수가 있는데, 이는 Firebase 공식 문서에 잘 정리되어 있다.

 

 

ValueChanged 외에 필요한 상황에서 필요한 event listener들을 위와 같은 방식으로 넣어주면 실시간으로 db상에서 데이터가 변할 떄를 감지할 수 있다.