Работая с Firebase в проекте Unity, для простого рекорда я наткнулся на проблемы при выполнении запроса. В редакторе все работает как брелок (в редакторе нет постоянства) На устройствах (с включенным постоянством) начинаются проблемы. Запрос показывает кэшированные данные Firebase, поэтому он корректен только при первом вызове в клиенте, а затем, когда Firebase считает, что он подходит для синхронизации c (возможно, никогда, поскольку отсутствует обработчик событий)
Однако, В поисках решения нет способа принудительно обновить кэшированные значения. Затем я проверил KeepSynced (true) для запроса, и это, кажется, работает:
this.HiscoreQuery = hiscoreref.OrderByChild ("Score").LimitToLast (20);
this.HiscoreQuery.KeepSynced(true);
this.HiscoreQuery.GetValueAsync().ContinueWith (task => {
if (task.IsFaulted) {
Debug.LogError ("Get hiscores faulted");
return;
}
if (task.Result != null && task.Result.ChildrenCount > 0) {
Debug.Log ("Get hiscore data success!");
this.AddDelayedUpdateAction (() => this.OnGetHiScores (task.Result));
}
});
Вопрос: Хотя это может быть хорошо, если Firebase прослушивает только запрос LImitToLast (20), это было бы очень Плохо, если Firebase внутренне хранит весь (растущий) свой исторический список, скопированный на каждом клиенте.
Кто-нибудь знает, ограничено ли KeepSynced(true)
фактической областью запроса или целым деревом / ветвью? И как можно это проверить?