public class UserData
{
public string username;
public string money;
public UserData(string username, string money)
{
this.username = username;
this.money = money;
}
}
DatabaseReference reference;
void Awake()
{
reference = FirebaseDatabase.DefaultInstance.RootReference;
}
void Start()
{
readUserData("User Information");
}
void OnApplicationQuit()
{
Debug.Log("실행");
writeNewUserData("User Information", "Pangzili", gm.Gold.ToString());
}
private void writeNewUserData(string userId, string name, string money)
{
UserData UserData = new UserData(name, money);
string jsonData = JsonUtility.ToJson(UserData);
reference.Child(userId).Child("이메일").SetRawJsonValueAsync(jsonData);
}
private void readUserData(string userId)
{
reference.Child(userId).GetValueAsync().ContinueWith(task =>
{
if (task.IsFaulted)
{
Debug.Log("error");
}
else if (task.IsCompleted)
{
DataSnapshot snapshot = task.Result;
Debug.Log(snapshot.ChildrenCount);
foreach (DataSnapshot data in snapshot.Children)
{
IDictionary personInfo = (IDictionary)data.Value;
Debug.Log(personInfo["money"]);
string stmoney = personInfo["money"].ToString();
gm.Gold = BigInteger.Parse(stmoney);
}
}
});
}
}
파이어베이스 강좌를 보면서 일단
코드를 이렇게 썻음..
gm.Gold에 이메일, 이메일2 두번 써지지 않음?
그런거 같아요.. 이메일 하나만 쓰는법 없을까요..?
readUserData 첫 줄에 Child부분을 수정해주면 됨 User Infomation/이메일2 까지 타도록 그리고 결과값 하나니까 foreach빼고하면 될듯
이메일2까지 타게 하는건 위에처럼 Child(userId).Child("이메일2") 해보던지 함수 첫 줄 reference 뒤에 Child빼고 그 자리에 .GetReference(userId + "/이메일2") 넣어보면 될듯
감사합니당! 성공했습니당
User information 콜렉션에서 foreach쓰지말고 이메일까지 도큐먼트 지정한다음 불러와야 하지않음? Foreach에서 이메일, 이메일2 전부 부른다음 이메일 2로 덮어써져서 그런거 같은데 난 파이어 스토어 위주라 도큐먼트 까지 지정하는데 데이터 베이스는 콜렉션까지만 쓰나?
근데 유니티에서 바로 파이어베이스 데이타 호출하고 유니티 내부에서 데이타 바꾸고 보내면 그렇게 의미가 있남...;; 중간 서버역활하는 기능이 있어야하는거 아닌감...그냥 잘 몰라서 물어봄..
폰바꿨을때도 데이터를 가져오는 역할로 쓰고싶어서 이렇게써보고있어요..