Большинство функциональных возможностей действительно может быть выполнено непосредственно из клиентского приложения, используя Firebase SDK для вашей прикладной платформы.И всякий раз, когда это возможно, я настоятельно рекомендую реализовать его таким образом.
Но некоторые типы функций не пригодны для выполнения непосредственно от клиента.Обычно они подразделяются на следующие основные категории:
- Операция требует привилегированной информации.Например, если вы хотите отправлять push-уведомления пользователям вашего приложения, вам нужно будет указать ключ сервера FCM.Как следует из его названия, этот ключ должен использоваться только на сервере, которым вы управляете, или в доверенной среде, такой как облачные функции.Эта же причина также относится к таким вещам, как взаимодействие со платежными шлюзами и многими API-интерфейсами в Google Cloud Platform, для которых требуются серверные API-ключи.
- Код самой операции является привилегированнымоперация.Например, вы часто найдете это в играх, где вы хотите проверить, что пользователь не обманывает.Если вы поместите этот код в свое приложение, злоумышленник сможет увидеть его и использовать для обхода вашего обнаружения.Перемещая код в облачные функции, пользователи приложения больше не могут видеть код.
- Код требует больше «мощности» (ЦП, сеть, память, дисковое пространство, батарея), чем вы можете рассчитыватьбыть доступным на устройствах вашего пользователя.Поскольку облачные функции работают в дата-центрах Google, они всегда подключены к электросети, имеют надежный ЦП, отличную сеть и настраиваемое пространство памяти / ОЗУ.
Еще одним преимуществом является то, что облачные функцииодинаковы для пользователей на любой платформе, на которую вы ориентируетесь.Допустим, у вас есть сложный алгоритм, который вы хотите использовать для пользователей Android, iOS и Web.Если вы реализуете алгоритм в облачных функциях, вам нужно будет реализовать его только один раз, а затем вызывать его с каждой платформы, вместо того, чтобы реализовывать алгоритм для каждой из них.
Я также рекомендую вам проверить список вариантов использования в документации по облачным функциям для Firebase .