Я использую Unity 2018.2.15f1, Firebase и Android / iOS.У меня есть что-то, что работает нормально, пока нет.Вот мои настройки в Firebase.
Матчи -Global1v1 -OneVOne - -Active - - -MatchIDArray
То, что я делаю в Unity:
public void CheckForAvailable1v1Match() {
reference.Child("Matches/OneVOne/Active/").GetValueAsync().ContinueWith(task => {
if (task.IsFaulted)
{
Debug.Log("Fault");
}
else if (task.IsCanceled) {
Debug.Log("Canceled");
}
else if (task.IsCompleted)
{
DataSnapshot snapshot = task.Result;
var closedCount = 1;
//ALL OF THESE BELOW WORK IN PLAYER BUT NOT ON DEVICE
//if (snapshot.ChildrenCount < 1)
//if (!snapshot.HasChildren)
//if (snapshot.ChildrenCount == 0)
//if (snapshot.Value == null)
//if (snapshot == null)
if(!snapshot.Exists)
{
Debug.Log("Does not exist here");
gameMNG.CreateOneOnX();
return;
}
if (snapshot.ChildrenCount > 0)
{
foreach (var c in snapshot.Children)
....
Вышеописанное прекрасно работает в плеере, но простовисит на устройстве.И Android, и iOS.
Из того, что я прочитал, если вы запрашиваете у firebase URL-адрес или запрос, снимок никогда не будет нулевым, поэтому он никогда не завершится ошибкой на снимке == null, поэтому вам следует использовать .Exists.
Что я сделал, чтобы обойти это, так это просто добавил в массив элемент, который я никогда не использую, и тогда конечная точка всегда будет существовать.Проблема возникает, когда эта таблица каким-то образом разрушается, а затем таблица становится пустой и вся игра заканчивается неудачей.
Есть идеи?
ОБНОВЛЕНИЕ Я реорганизовал свою базу данных и разбил объект сопоставления на два отдельных места.Теперь у меня есть:
OneVOne / Pending & Global1V1 / Active
Затем я использую снимок == null, как и раньше, и по какой-то причине он работает теперь без помех ...Я в замешательстве, но это работает.