Это руководство покажет вам, как изменять версии ваших функций Firebase между обновлениями вашего мобильного, веб-приложения или любого другого типа приложения, которое их использует.

Чтобы следовать этому руководству, вам не нужно ничего особенного. Он просто раскроет простой пример и объяснит лежащие в его основе принципы. Вы можете легко реализовать это на любой платформе и в любом приложении, использующем функции Firebase.

В этом руководстве также не используются какие-либо другие технологии, кроме функций Firebase и простого машинописного текста для объяснения принципов в коде.

Вы также можете использовать Express для управления версиями с функциями Firebase, и это правильное решение. Однако мне показалось раздражающим и ненужным добавлять дополнительный слой в Firebase Functions.

Для чего нужны версии?

Одна из основных причин заключается в том, что, работая над мобильным приложением Gifter, я планировал будущие функции и версии. Но вы можете планировать не так много. И по мере того, как вы работаете над приложением, все меняется: планы, функции, интерфейсы, структура данных. Все меняется по мере того, как вы получаете обратную связь, новые идеи и новые планы.

Итак, как безопасно переключать пользователей между двумя основными версиями, которые изменяют способ обработки данных?

Я не хотел блокировать пользователей и заставлять их скачивать новую версию. Когда кто-то получит обновление, зависит от Google или вашего магазина дистрибутивов и от того, насколько быстро он распространяет новую версию. Кроме того, меня всегда раздражало, когда мне блокировали использование приложения только потому, что есть обновление.

Реализация

Я реализовал простой интерфейс в Typescript, который расширяет все мои запросы к любой функции Firebase.

export interface FunctionsApiVersion {
  version: number;
}

У нас пока такая ситуация:

Теперь у меня есть «версия API», и функция может реагировать соответствующим образом. Поскольку у меня есть только одна версия, функция будет просто выполнять:

if(version == 1){
  doSomething();
}
else {
  logError("API version not supported");
}

Вам нужно будет реализовать эти функции в зависимости от ваших потребностей