Перейти к основному содержимому

Функции облака

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

Мы позволяем вам писать и развертывать функции облака Firebase непосредственно в платформе. С интегрированным редактором кода написание функций облака на JavaScript происходит быстро и удобно для пользователя. Каждая функция имеет настраиваемые настройки заготовки, включая предварительно настроенные основные параметры, такие как память, регион и время ожидания.

примечание

Ознакомьтесь с некоторыми интересными примерами использования функций облака.

Добавление функций облака

Давайте посмотрим, как добавить функцию облака, создав пример, который генерирует логотипы на основе запросов пользователя. Вот как это выглядит:

Функция облака получает ввод от виджета TextField и инициирует вызов API к API генерации изображений. После получения URL изображения отображается в виджете Image.

Вот пошаговая инструкция по созданию такого примера:

  1. Добавьте переменные состояния страницы
  2. Создайте страницу
  3. Создайте и разверните функцию облака
  4. Дополнительно: Добавление пакета
  5. Запуск функции облака
  6. Дополнительно: Использование результатов функции облака
Перед началом работы
  • Убедитесь, что проект находится на тарифном плане Blaze в Firebase.
  • Завершите все шаги в Настройке Firebase.

1. Добавление переменных состояния страницы

Для этого примера вам нужно настроить две переменные состояния страницы:

  1. generatingImage (Тип: Boolean): Используется для управления видимостью индикатора загрузки во время процесса создания логотипа. Его значение устанавливается на True перед инициированием вызова API и переключается на False, когда создание логотипа завершено.
  2. logoImage (Тип: ImagePath): Используется для хранения сгенерированного изображения логотипа. После успешного вызова API URL полученного изображения хранится здесь, что позволяет отображать логотип в виджете Image.

img_6.png

2. Создание страницы

Добавьте страницу, позволяющую пользователям вводить подсказку. Для ускорения этого процесса можно добавить страницу из шаблона или использовать AI Page Gen. Вот страница, добавленная с использованием AI Page Gen, и после некоторых модификаций она выглядит следующим образом:

Также посмотрите, как строить макет страницы, если вы хотите создать страницу с нуля.

img_7.png

Несколько замечаний:

  • Мы используем виджет ConditionalBuilder, чтобы показывать/скрывать индикатор загрузки на основе переменной generatingImage. Подсказка: Блок Else этого виджета представляет собой индикатор выполнения внутри контейнера с анимацией вращающегося цикла.
  • Виджет Image использует переменную logoImage для отображения логотипа.

3. Создание и развертывание функции облака

Для создания и развертывания функции облака:

  1. Нажмите на Функции облака в Меню навигации (слева от вашего экрана).
  2. Нажмите на + Добавить. Это добавит стандартную newCloudFunction.
  3. Установите Название функции облака.

Настройки заготовки

Справа можно настроить следующие настройки заготовки:

  1. Выделение памяти: Вы можете указать количество памяти, которую должна иметь ваша функция при выполнении в зависимости от ее сложности и потребностей. Эта настройка важна, поскольку она влияет на производительность функции и стоимость ее выполнения. Больше памяти может улучшить производительность для интенсивных задач, но также увеличивает затраты.

  2. Время ожидания (с): Это максимальное количество времени, в секундах, в течение которого функция может выполняться до автоматического завершения. Если вашей функции требуется больше времени для выполнения, возможно, потребуется увеличить настройку времени ожидания. Однако помните, что увеличение времени ожидания может повлечь за собой дополнительные затраты, так как тарификация происходит на основе времени выполнения.

  3. Требуется аутентификация: Включите эту настройку, если вы хотите, чтобы пользователи были аутентифицированы для выполнения этой функции облака.

  4. Регион функции облака: Это определяет географическое расположение серверов, где развертываются и выполняются ваши функции. Идеально было бы сохранить это же, что и Местоположение ресурсов GCP по умолчанию и регион функции облака, указанный в дополнительных настройках Firebase.

img_8.png

Настройка ввода и вывода

Ваша функция облака может требовать некоторые данные для обработки и возврата результата. Вы можете сделать это, настроив ввод и вывод.

  1. Для получения вывода из функции Cloud Function активируйте Вернуть значение и выберите соответствующий тип вывода, например 'String' для текста. Для этого примера установите ImagePath, чтобы получить URL сгенерированного логотипа.

  2. Для ввода данных: Щелкните + Добавить параметры. Назовите параметр, выберите его Тип, выберите один или несколько элементов (Опция Является ли списком), и уберите галочку Может быть нулевым, если значение может быть равно null. Для этого примера добавьте параметр 'prompt' с Типом 'String'.

  3. При использовании Пользовательских типов данных, Cloud Function ожидает JSON, сопоставляющий каждое поле типа данных с парой ключ-значение в JSON. Если тип данных является списком, функция ожидает список JSON. Например, для пользовательского типа данных с именем 'Person' с полями 'Name' и 'Age' функция должна вернуть:

       //JSON:
{ "Name": "John", "Age": 30 }

//Пример кода функции облака:
return {
"name": person.name,
"age": person.age
};

Для списка функция должна вернуть:

        //JSON
[ { "Name": "John", "Age": 30 }, { "Name": "Jane", "Age": 25 } ]

//Пример кода функции облака:
return filteredpersons.map(filteredpersons => {
return {
"name": filteredpersons.name,
"age": filteredpersons.age
};
});

Для развертывания

  1. Нажмите на [</>], чтобы увидеть заготовочный код; откроется всплывающее окно с обновленным кодом, а затем нажмите </> Копировать в редактор. Подсказка: Чтобы убедиться, что вы можете развернуть функцию облака (перед добавлением собственного кода), перейдите непосредственно к шагам 8 и 9.

  2. В редакторе кода добавьте код функции облака. Подсказка: Вы можете скопировать заготовочный код в ChatGPT и попросить его написать желаемый код на его основе.

  3. Нажмите Сохранить функцию облака.

  4. Нажмите Развернуть.

Вот код, используемый для этого примера:

const functions = require('firebase-functions');
const admin = require('firebase-admin');
const https = require('https');

exports.logoMaker = functions.region('us-central1')
.runWith({
timeoutSeconds: 10,
memory: '512MB'
}).https.onCall((data, context) => {
return new Promise((resolve, reject) => {
const prompt = data.prompt;
if (!prompt) {
reject(new functions.https.HttpsError('invalid-argument', 'No prompt provided'));
return;
}

const postData = JSON.stringify({
model: "dall-e-3",
prompt: prompt,
n: 1,
size: "1024x1024"
});

const options = {
hostname: 'api.openai.com',
port: 443,
path: '/v1/images/generations',
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Authorization': `Bearer YOUR-APIKEY`,
'Content-Length': postData.length
}
};

const req = https.request(options, (res) => {
let responseBody = '';

res.on('data', (chunk) => {
responseBody += chunk;
});

res.on('end', () => {
try {
const responseJSON = JSON.parse(responseBody);
if (responseJSON.data && responseJSON.data.length > 0) {
// Retrieve the URL of the first image
const firstImageUrl = responseJSON.data[0].url;
resolve(firstImageUrl);
} else {
reject(new functions.https.HttpsError('not-found', 'No images found'));
}
} catch (error) {
reject(new functions.https.HttpsError('internal', 'Error processing response', error));
}
});
});

req.on('error', (error) => {
reject(new functions.https.HttpsError('internal', 'Error generating image', error));
});

req.write(postData);
req.end();
});
});
Важная информация

Всегда создавайте и используйте обновленный заготовочный код или корректируйте собственный код соответственно при изменениях в коде, настройках заготовки или параметрах ввода/вывода.

4. Дополнительно: Добавление пакета

Вашей функции облака может потребоваться работа с сторонними пакетами. Вы можете включить любой пакет npm (зависимость), перечислив его в файле package.json. Этот файл не только управляет зависимостями пакетов npm для ваших функций, но и содержит метаданные проекта, настраивает скрипты для задач, таких как развертывание, и определяет совместимые версии Node.js.

Чтобы добавить зависимость, откройте файл package.json и укажите ваш пакет в разделе dependencies.

img_9.png

5. Запуск функции облака

Новая созданная функция облака будет доступна как действие при добавлении. Для этого примера по щелчку кнопки мы сначала устанавливаем generatingImage на True, а затем запускаем Действие функции облака.