이제 시작 스크립트를 작성해보자.
일단 테스트로 User클래스를 만들었다.
public class User{
public string name;
public int level;
public User(string _name, int _level){
name = _name;
level = _level;
}
}
간단하게 만들어주었고, 이제 버튼을 두개 만들어서 버튼에 각각 write기능과 read기능을 추가해줄것이다.
using Firebase;
using Firebase.Database;
using System;
public class ButtonScript : MonoBehaviour
{
[SerializeField] string _hir;
[SerializeField] string _name;
[SerializeField] int _level;
public void DBWriteUser(){
FirebaseApp.DefaultInstance.Options.DatabaseUrl = new Uri("https://unitytest-eaefc-default-rtdb.firebaseio.com/");
DatabaseReference refe = FirebaseDatabase.DefaultInstance.RootReference;
User user1 = new User(_name, _level);
string jsonData = JsonUtility.ToJson(user1);
refe.Child("User").Child(_hir).SetRawJsonValueAsync(jsonData);
}
public void DBReadUser(){
DatabaseReference reference = FirebaseDatabase.DefaultInstance.GetReference("User");
reference.GetValueAsync().ContinueWith(task =>
{
if(task.IsCompleted){
DataSnapshot snapshot = task.Result;
foreach(DataSnapshot data in snapshot.Children){
IDictionary User = (IDictionary) data.Value;
print($"이름 : {User["name"]}, 레벨 : {User["level"]}");
}
}
});
}
}
코드는 사진과 같이 버튼에 각각 붙여주었다.
이런식으로 버튼에 함수를 붙여주었는데, Button Script에 직접 입력값을 입력해 버튼을 클릭하면 데이터가 추가되도록 설정하였다.
여기서 Hir은 이부분이다.
읽기 버튼은 그냥 스크립트만 붙여주면 된다.
Firebase를 임포트하고,
Firebase.Database를 임포트하자.
추가적으로 Uri클래스를 쓰기 위해서 System도 임포트해주었다.
우리가 값을 쓸땐, Uri형태의 링크를 전달해주어야 한다.
이 링크는 이전 글에서 만들었던 콘솔의 Realtime Database의 링크를 전달할건데
동그라미 친 부분의 링크를 복사해서 붙여넣어주면 된다.
그리고 값을 쓸 땐, root 레퍼런스를 지정해주어야한다.
지금은 FirebaseDatabase.DefaultInstance.RootReference 를 사용해 그냥 최상단 레퍼런스를 쓰고 있지만, 나중에는 다른 레퍼런스를 기준으로 써도 될것같다.
그리고 일반적인 자료형이 아닌 우리가 이전에 선언한 User클래스로 이루어진 값을 전달하기 때문에 JsonUtility.ToJson()을 사용하여 만들어진 클래스를 Json형태로 전달해야한다.
마지막으로, Child("User").Child(_hir).SetRawJsonValueAsync(jsondata)처럼 전달하고 있는데 이는
User 레퍼런스 아래에 _hir이라는 레퍼런스를 만들고 그 안에 jsondata값을 넣으라는 구문이다.
이렇게 한 후, 실행해보면 콘솔은 다음과 같이 형성된다.
나는 버튼에 넣어서 두번 실행했다.
그리고 읽는 부분에서 주의해야할점은,
DataSnapshot snapshot = task.Result; 이부분이다!
이 다음에 foreach 구문으로 각각 접근해 출력하고 있는데, 여기서 snapshot이 반환하는 값은 딕셔너리이기 때문이다.
그래서 바로 User 클래스로 변환해준것이 아니라 IDictionary User = (IDictionary) data.Value; 처럼 사용하여 딕셔너리로 바꿔준 후, 값을 읽은것이다! (이문제도 찾는데 1시간 걸렸다...)
이렇게 데이터를 읽고 쓰는 방법을 알아보았다.
또 깊은 부분에 작성해둬야할 부분이 있다면 이어적겠다.
'Develop > Firebase' 카테고리의 다른 글
[Firebase] Firebase를 이용한 서버 구현 (FireBase) - 4. 로그인/ 회원가입 (0) | 2024.06.17 |
---|---|
[Firebase] Firebase를 이용한 서버 구현 (FireBase) - 3. 파일 입출력 (0) | 2024.06.14 |
[Firebase] Firebase를 이용한 서버 구현 (FireBase) - 1. FireBase가입 (0) | 2024.06.13 |