Comments 34
А почему не сделать сериализацию сложных данных в строку (Json <-> String) на своей стороне, а в Firebase передавать пару (ключ, строка)?
На самом деле мы именно так и делаем и сериализируем используя newtonsoft.json и записываем через SetRawJson однако, у firebase на этот счёт свои мысли и похоже происходит ещё и преобразование на стороне firebase :)
Про передачу ключ строка не думали так как дальше планируем добавлять возможность для игрока смотреть прогресс друзей из того же facebook и это будет не так удобно в итоге. Ну и бд на то и бд что бы использовать ее как бд :)
Плюс эффективность в трафике. Я не ручаюсь за это, но похоже что исходя из того что я вижу (объем передаваемого трафика), firebase имеет свой протокол который так или иначе уменьшает объем передаваемых данных исходя из структуры json. Если же использовать строку, это скорее всего сойдёт на нет. Не добавлял это в статью так как пока это на уровне домыслов и сопоставлений с тем что вижу.
Просто я для себя давно вывел, что если данных немного (меньше сотни килобайт), то быстрее паковать в строку\из строки самому (начиная от элементарного «в массив чисел» и заканчивая msgpack и zip), чем морочиться с особенностями интерпретации объектов.
JsonUtility имеют свои ограничения вроде отсутствия сериализации для dictionary, null, свойств, полиморфных типов и кучу других ограничений. Да и по факту это бы никак не повлияло на проблему с преобразованиями внутри фаербейз.
Я о нем не знал, но попробую. Спасибо.
dictionary да не работает. Но я его сохраняю через OnBeforeSerialize/OnAfterDeserialize
null по логике, это пустота, зачем её сохранять. Ну ситуации разные.
Может я со сложными элементами при сохранении не сталкивался.
А если в фаербейз передавать json как простую текстовую строку. А потом текстовую строку получать обратно и преобразовывать во что нужно. Или в массив или в объект.
Ваш подход возможен, но не очень правилен с точки зрения работы с базой данных. Я чуть выше другому человеку уже коментировал почему не стал так делать. Не буду еще раз дублировать. Но он бы стработал :)
Сериализация происходит на нашей стороне силами newtonsoft json. На самом деле, это не так проблема, как неожиданность. Когда пишешь массив, ожидаешь считать массив. То есть например массив:
{ new Something(), null, new Something() } после сериализации newtonsoft таки массив. После передачи в firebase и считывания обратно, это уже будет объект:
0: Something
2: Something
Если знать про это поведение, его обыграть не составляет труда.
Я пожалуй не лучший пример привел в статье. Подправлю этот момент.
Спасибо за замечание.
1. Выделяете фрагмент текста с ошибкой (любую — грамматическую или пунктуационную, на ваше усмотрение) в публикации;
2. Жмём хоткей CTRL+Enter (или CMD+Enter);
3. В нижней части экрана появляется форма, в которой будет процитирован выделенный ранее (в п.1) текст, а также поле для опционального пояснения.
Кроме заголовка.
Оформляли ИП или сначала планируете поработать как физ.лица?
У вас уже был macbook или пришлось покупать для сборки билдов под iOS?
Вам не кажется, что это личный вопрос?
Никак не технического характера.
(Возможно виной тому тот факт что устанавливали мы хакинтош на старенький ноут)
Низззя.
Хакинтош нормально ставится только на desktop.
Не знаю, что именно здесь подразумевается под "нормально", но у меня вполне заводился El Capitan на ноуте HP Envy с SSD под VirtualBox. Работает, конечно, не слишком шустро, но пользовался в основном консолью через SSH — в таком режиме вполне можно пользоваться. Да и графикой при желании тоже, хотя без удовольствия — подтормаживает.
При установке с бубном немного попрыгать пришлось, но после всё работает спокойно.
Наша с девушкой первая видеоигра. Разработка на Unity. Часть 1