728x90
전체코드는 이것이다
using Firebase.Auth;
using Firebase.Database;
using Firebase.Extensions;
using System;
using System.Collections.Generic;
using System.Threading.Tasks;
using UnityEngine;
namespace PKW_FireBaseTest
{
public class FirebaseTest : MonoBehaviour
{
private FirebaseAuth _auth;
private FirebaseUser _user;
private bool _isInitialLoadComplete = false;
public event Action<string, string> OnMessageReceived;
private void Start()
{
Init();
}
public void Init()
{
Firebase.FirebaseApp.CheckAndFixDependenciesAsync().ContinueWithOnMainThread(task =>
{
var dependencyStatus = task.Result;
if (dependencyStatus == Firebase.DependencyStatus.Available)
{
FirebaseInit();
}
else
{
UnityEngine.Debug.LogError(System.String.Format(
"Could not resolve all Firebase dependencies: {0}", dependencyStatus));
}
});
}
public void FirebaseInit()
{
Debug.Log("Firebase Init");
_auth = FirebaseAuth.DefaultInstance;
_auth.StateChanged += AuthStateChanged;
DatabaseReference _data = FirebaseDatabase.DefaultInstance.GetReference("ChatMessage");
_data.LimitToLast(1).ChildAdded += (sender, e) =>
{
// 처음 synchronize 될 때는 데이터를 불러오지 않는다.
if (!_isInitialLoadComplete)
{
Debug.Log("Initial data load skipped.");
_isInitialLoadComplete = true;
return;
}
ShowMessages(sender, e);
};
}
private void ShowMessages(object sender, ChildChangedEventArgs e)
{
DataSnapshot _message = e.Snapshot;
if (_message == null)
{
return;
}
Debug.Log($"{_message.Key} : content : {_message.Child("content").Value} username : {_message.Child("username").Value}");
OnMessageReceived?.Invoke(_message.Child("username").Value.ToString(), _message.Child("content").Value.ToString());
}
private void AuthStateChanged(object sender, EventArgs e)
{
FirebaseAuth senderAuth = sender as FirebaseAuth;
if (senderAuth != null)
{
_user = senderAuth.CurrentUser;
if (_user != null)
{
Debug.Log(_user.UserId);
}
}
}
public void SignIn()
{
SignInTaskAysnc();
}
private Task SignInTaskAysnc()
{
return _auth.SignInAnonymouslyAsync().ContinueWithOnMainThread(task =>
{
if (task.IsCanceled)
{
Debug.LogError("SignInAnonymouslyAsync was canceled.");
return;
}
if (task.IsCompleted)
{
Debug.Log("SignInCompleted");
return;
}
});
}
public void SignOut()
{
_auth.SignOut();
Debug.Log("SignOut");
}
public void GetDataBase()
{
DatabaseReference _data = FirebaseDatabase.DefaultInstance.GetReference("ChatMessage");
_data.GetValueAsync().ContinueWithOnMainThread(task =>
{
if (task.IsFaulted)
{
Debug.LogError("GetDataBase Error");
return;
}
else if (task.IsCompleted)
{
DataSnapshot _snapShot = task.Result;
foreach (DataSnapshot _message in _snapShot.Children)
{
Debug.Log($"{_message.Key} : content : {_message.Child("content").Value} username : {_message.Child("username").Value}");
}
}
});
}
public void SendData(string _userName, string _content)
{
DatabaseReference _data = FirebaseDatabase.DefaultInstance.GetReference("ChatMessage");
string _key = _data.Push().Key;
Dictionary<string, object> _message = new Dictionary<string, object>
{
{ "content", _content},
{ "username", _userName},
{ "timestamp", ServerValue.Timestamp },
};
Dictionary<string, object> _childUpdates = new Dictionary<string, object>()
{
{_key, _message }
};
_data.UpdateChildrenAsync(_childUpdates).ContinueWithOnMainThread(task =>
{
if (task.IsCompleted)
{
Debug.Log("SendData Completed");
return;
}
});
}
}
}
728x90
'unity > 유니티 초보' 카테고리의 다른 글
unity - 기어가는 달팽이 <2D bone 애니메이션 제작> (0) | 2024.08.21 |
---|---|
Unity2D 절차 지향적 맵 생성 (0) | 2024.08.18 |
Unity - prefab을 이용한 간단한 ObjectPool (0) | 2024.05.30 |
Unity 카메라 기능들 정리 (0) | 2024.05.28 |
Unity - 부드러운 카메라 회전 (0) | 2024.05.27 |