Когда вы создаете расширение, вы пишете его логику с помощью Cloud Functions , почти так же, как вы пишете функцию, которая будет использоваться только в вашем собственном проекте. Вы объявляете свои функции в файле extension.yaml
, и когда пользователи устанавливают ваше расширение, эти функции развертываются в их проекте.
Общие сведения об использовании Cloud Functions см. в документации Cloud Functions .
Cloud Functions 1-го и 2-го поколения
Firebase поддерживает Cloud Functions как 1-го, так и 2-го поколения . Однако расширения Firebase в настоящее время имеют некоторые ограничения на то, какое поколение облачных функций можно использовать с определенными типами триггеров. По этой причине многие расширения включают в себя сочетание функций 1-го и 2-го поколения.
Поддержка генерации функций указана для каждого типа триггера ниже.
Особые соображения
Некоторые определения функций требуют указания информации, которая также указана в файле
extension.yaml
. Например, в Cloud Firestore есть методdocument()
, который определяет шаблон документа для просмотра, а его соответствующее объявление вextension.yaml
имеет полеresource
, которое указывает то же самое.В таких ситуациях используется конфигурация, указанная в файле
extension.yaml
, а конфигурация, указанная в определении функции, игнорируется.Обычной практикой является указание настроенного значения в определении функции в целях документации. Примеры на этой странице следуют этому шаблону.
В SDK Cloud Functions 1-го поколения есть метод
functions.config()
и команда CLIfunctions:config:set
, которую можно использовать для работы с параметризованными значениями в функциях 1-го поколения. Этот метод устарел в Cloud Functions и вообще не будет работать в расширении. Вместо этого используйте модульfunctions.params
(рекомендуется) илиprocess.env
.
Использование TypeScript
Большая часть документации по разработке собственного расширения описывает рабочие процессы с использованием JavaScript для Cloud Functions for Firebase . Однако вместо этого вы можете писать свои функции, используя TypeScript.
Фактически, все официальные расширения Firebase написаны на TypeScript. Вы можете просмотреть эти расширения, чтобы узнать о некоторых рекомендациях по использованию TypeScript для вашего расширения.
Если вы пишете функции своего расширения на TypeScript, перед установкой расширения необходимо сделать следующее:
Скомпилируйте исходный код функций вашего расширения в JavaScript.
Команда
firebase ext:dev:init
позволяет вам выбрать TypeScript для написания ваших функций. Команда предоставляет вам полное устанавливаемое расширение , а также сценарий сборки, который вы можете запустить с помощьюnpm run build
.В файле
package.json
обязательно укажите вmain
поле сгенерированный JavaScript.Если вы устанавливаете или загружаете расширение из локального источника, сначала скомпилируйте файлы TypeScript.
Поддерживаемые триггеры функций
HTTP-триггеры
Функция, активируемая HTTP, развертывается в общедоступной конечной точке https
и запускается при доступе к конечной точке.
Информацию о написании функций, запускаемых HTTP, см. в разделе «Вызов функций через HTTP-запросы» в документации Cloud Functions .
Определение функции (только 1-го поколения)
import { https } from "firebase-functions/v1";
export const yourFunctionName = https.onRequest(async (req, resp) => {
// ...
});
Объявление ресурса (расширение.yaml)
resources:
- name: yourFunctionName
type: firebaseextensions.v1beta.function
properties:
runtime: nodejs16
httpsTrigger: {}
- name: anotherFunction
type: ...
Вызываемые функции
Вызываемые функции аналогичны функциям, запускаемым HTTP, но они реализуют протокол, который делает их удобными для вызова из клиентского кода.
Информацию об использовании вызываемых функций см. в разделе Вызов функций из вашего приложения в документации Cloud Functions .
Определение функции (только 1-го поколения)
import { https } from "firebase-functions/v1";
export const yourFunctionName = https.onCall(async (data, context) => {
// ...
});
Объявление ресурса (расширение.yaml)
resources:
- name: yourFunctionName
type: firebaseextensions.v1beta.function
properties:
runtime: nodejs16
httpsTrigger: {}
- name: anotherFunction
type: ...
Триггеры запланированных функций
Запланированная функция выполняется неоднократно по настраиваемому расписанию.
Информацию о написании запланированных функций см. в разделе Функции расписания в документации Cloud Functions .
Определение функции (только 1-го поколения)
import { pubsub } from "firebase-functions/v1";
export const yourFunctionName = pubsub.schedule("every 6 hours").onRun((context) => {
// ...
});
Объявление ресурса (расширение.yaml)
resources:
- name: yourFunctionName
type: firebaseextensions.v1beta.function
properties:
scheduleTrigger:
schedule: 'every 5 minutes'
- name: anotherFunction
type: ...
Вот доступные подполя для scheduleTrigger
:
Поле | Описание |
---|---|
schedule (необходимый) | Частота, с которой вы хотите, чтобы функция выполнялась. Это поле может принимать строки, использующие любой синтаксис (требуется заключение в одинарные кавычки ):
|
timeZone (необязательный) | Часовой пояс, в котором будет работать расписание.
|
Если вы хотите, чтобы пользователи могли настраивать расписание при установке вашего расширения, добавьте новый параметр в файл extension.yaml
и укажите ссылку на этот параметр в объявлении resource
вашей функции:
resources:
- name: yourFunctionName
type: firebaseextensions.v1beta.function
properties:
scheduleTrigger:
schedule: ${SCHEDULE_FREQUENCY}
- name: anotherFunction
type: ...
params:
- param: SCHEDULE_FREQUENCY
label: Schedule
description: How often do you want to run yourFunctionName()?
type: string
default: 'every 5 minutes' # Specifying a default is optional.
required: true
Триггеры очереди задач
Функция очереди задач запускается либо при событиях жизненного цикла вашего расширения, либо при добавлении в очередь задач вашего расширения вручную с помощью метода TaskQueue.enqueue()
Admin SDK.
См . раздел «Обработка событий жизненного цикла вашего расширения» для получения информации о написании функций, обрабатывающих события жизненного цикла.
Информацию о написании функций очереди задач см. в разделе «Постановка функций в очередь с облачными задачами» в документации Cloud Functions .
Определение функции (только 1-го поколения)
import { tasks } from "firebase-functions/v1";
export const yourFunctionName = tasks.taskQueue().onDispatch(async (data, context) => {
// ...
});
Объявление ресурса (расширение.yaml)
resources:
- name: myTaskFunction
type: firebaseextensions.v1beta.function
description: >-
Perform a task when triggered by a lifecycle event
properties:
taskQueueTrigger: {}
Установите для свойства taskQueueTrigger
значение {}
или карту параметров, которые настраивают ограничения скорости и поведение повторных попыток очереди задач (см. Настройка очереди задач ).
Если вы хотите запускать свою функцию в событиях жизненного цикла вашего расширения, добавьте записи lifecycleEvents
с именем функции и необязательным сообщением обработки, которое будет отображаться в консоли Firebase при начале обработки.
lifecycleEvents:
onInstall:
function: myTaskFunction
processingMessage: Resizing your existing images
onUpdate:
function: myOtherTaskFunction
processingMessage: Setting up your extension
onConfigure:
function: myOtherTaskFunction
processingMessage: Setting up your extension
Analytics
Функция, активируемая Analytics, запускается при регистрации указанного события Analytics.
Информацию о написании функций, запускаемых Analytics, см. в разделе «Триггеры Google Analytics» в документации Cloud Functions .
Определение функции (только 1-го поколения)
import { analytics } from "firebase-functions/v1";
export const yourFunctionName = analytics.event("event_name").onLog((event, context) => {
// ...
});
Объявление ресурса (расширение.yaml)
resources:
- name: yourFunctionName
type: firebaseextensions.v1beta.function
properties:
eventTrigger:
eventType: providers/google.firebase.analytics/eventTypes/event.log
resource: projects/${PROJECT_ID}/events/ga_event
- name: anotherFunction
type: ...
Если вы хотите, чтобы пользователи могли настроить событие Analytics для прослушивания при установке вашего расширения, добавьте новый параметр в файл extension.yaml
и укажите ссылку на этот параметр в объявлении resource
вашей функции:
resources:
- name: yourFunctionName
type: firebaseextensions.v1beta.function
properties:
eventTrigger:
eventType: providers/google.firebase.analytics/eventTypes/event.log
resource: projects/${PROJECT_ID}/events/${EVENT_NAME}
- name: anotherFunction
type: ...
params:
- param: EVENT_NAME
label: Analytics event
description: What event do you want to respond to?
type: string
default: ga_event # Specifying a default is optional.
required: true
Authentication
Функция, активируемая аутентификацией, запускается при создании или удалении пользователя.
См. «Триггеры аутентификации Firebase» в документации Cloud Functions для получения информации о написании функций, запускаемых авторизацией.
Определение функции (только 1-го поколения)
import { auth } from "firebase-functions/v1";
export const yourFunctionName = auth.user().onCreate((user, context) => {
// ...
});
export const yourFunctionName2 = auth.user().onDelete((user, context) => {
// ...
});
Объявление ресурса (расширение.yaml)
resources:
- name: yourFunctionName
type: firebaseextensions.v1beta.function
properties:
eventTrigger:
eventType: providers/firebase.auth/eventTypes/user.create
resource: projects/${PROJECT_ID}
- name: anotherFunction
type: ...
В следующей таблице показано, как указать каждый из поддерживаемых типов событий Authentication :
Триггер событий Cloud Functions | eventType | Описание |
---|---|---|
onCreate() | providers/firebase.auth/eventTypes/user.create | Новый пользователь создан |
onDelete() | providers/firebase.auth/eventTypes/user.delete | Пользователь удален |
Cloud Firestore
Функция, активируемая Cloud Firestore, запускается при создании, обновлении или удалении документа.
См. «Триггеры Cloud Firestore» в документации Cloud Functions для получения информации о написании функций, запускаемых Firestore.
Определение функции (только 1-го поколения)
import { firestore } from "firebase-functions/v1";
export const yourFunctionName = firestore.document("collection/{doc_id}")
.onCreate((snapshot, context) => {
// ...
});
export const yourFunctionName2 = firestore.document("collection/{doc_id}")
.onUpdate((change, context) => {
// ...
});
export const yourFunctionName3 = firestore.document("collection/{doc_id}")
.onDelete((snapshot, context) => {
// ...
});
export const yourFunctionName4 = firestore.document("collection/{doc_id}")
.onWrite((change, context) => {
// onWrite triggers on creation, update, and deletion.
// ...
});
Объявление ресурса (расширение.yaml)
resources:
- name: yourFunctionName
type: firebaseextensions.v1beta.function
properties:
eventTrigger:
eventType: providers/cloud.firestore/eventTypes/document.write
resource: projects/${PROJECT_ID}/databases/(default)/documents/collection/{documentID}
- name: anotherFunction
type: ...
В следующей таблице показано, как указать каждый из поддерживаемых типов событий Cloud Firestore :
Триггер событий Cloud Functions | eventType | Описание |
---|---|---|
onCreate() | providers/cloud.firestore/eventTypes/document.create | Новый документ создан |
onDelete() | providers/cloud.firestore/eventTypes/document.delete | Документ удален. |
onUpdate() | providers/cloud.firestore/eventTypes/document.update | Документ обновлен |
onWrite() | providers/cloud.firestore/eventTypes/document.write | Документ создан, удален или обновлен |
Если вы хотите, чтобы пользователи могли настраивать путь к документу при установке вашего расширения, добавьте новый параметр в файл extension.yaml
и укажите ссылку на этот параметр в объявлении resource
вашей функции:
resources:
- name: yourFunctionName
type: firebaseextensions.v1beta.function
properties:
eventTrigger:
eventType: providers/cloud.firestore/eventTypes/document.write
resource: projects/${PROJECT_ID}/databases/(default)/documents/${YOUR_DOCUMENT_PATH}
- name: anotherFunction
type: ...
params:
- param: YOUR_DOCUMENT_PATH
label: Cloud Firestore path
description: Where do you want to watch for changes?
type: string
default: path/to/{documentID} # Specifying a default is optional.
required: true
Pub/Sub
Функция, запускаемая Pub/Sub, запускается, когда сообщение публикуется в определенной теме.
Информацию о написании функций, запускаемых Pub/Sub, см. в разделе «Триггеры Pub/Sub» в документации Cloud Functions .
Определение функции (только 1-го поколения)
import { pubsub } from "firebase-functions/v1";
export const yourFunctionName = pubsub.topic("topic_name").onPublish((message, context) => {
// ...
});
Объявление ресурса (расширение.yaml)
resources:
- name: yourFunctionName
type: firebaseextensions.v1beta.function
properties:
eventTrigger:
eventType: google.pubsub.topic.publish
resource: projects/${PROJECT_ID}/topics/topic-name
- name: anotherFunction
type: ...
Если вы хотите, чтобы пользователи могли настраивать тему Pub/Sub при установке вашего расширения, добавьте новый параметр в файл extension.yaml
и укажите ссылку на этот параметр в объявлении resource
вашей функции:
resources:
- name: yourFunctionName
type: firebaseextensions.v1beta.function
properties:
eventTrigger:
eventType: google.pubsub.topic.publish
resource: projects/${PROJECT_ID}/topics/${PUBSUB_TOPIC}
- name: anotherFunction
type: ...
params:
- param: PUBSUB_TOPIC
label: Pub/Sub topic
description: Which Pub/Sub topic do you want to watch for messages?
type: string
default: topic-name # Specifying a default is optional.
required: true
Realtime Database
Функция, активируемая базой данных реального времени, запускается, когда создается, обновляется или удаляется путь, соответствующий указанному шаблону.
Информацию о написании функций, запускаемых RTDB, см. в разделе «Триггеры базы данных реального времени » в документации Cloud Functions .
Определение функции (только 1-го поколения)
import { database } from "firebase-functions/v1";
export const yourFunctionName = database.ref("path/to/{item}")
.onCreate((snapshot, context) => {
// ...
});
export const yourFunctionName2 = database.ref("path/to/{item}")
.onUpdate((change, context) => {
// ...
});
export const yourFunctionName3 = database.ref("path/to/{item}")
.onDelete((snapshot, context) => {
// ...
});
export const yourFunctionName4 = database.ref("path/to/{item}")
.onWrite((change, context) => {
// onWrite triggers on creation, update, and deletion.
// ...
});
Объявление ресурса (расширение.yaml)
resources:
- name: yourFunctionName
type: firebaseextensions.v1beta.function
properties:
eventTrigger:
eventType: providers/google.firebase.database/eventTypes/ref.create
# DATABASE_INSTANCE (project's default instance) is an auto-populated
# parameter value. You can also specify an instance.
resource: projects/_/instances/${DATABASE_INSTANCE}/refs/path/to/{itemId}
- name: anotherFunction
type: ...
В следующей таблице показано, как указать каждый из поддерживаемых типов событий Cloud Firestore :
Триггер событий Cloud Functions | eventType | Описание |
---|---|---|
onCreate() | providers/google.firebase.database/eventTypes/ref.create | Данные созданы |
onDelete() | providers/google.firebase.database/eventTypes/ref.delete | Данные удалены |
onUpdate() | providers/google.firebase.database/eventTypes/ref.update | Данные обновлены |
onWrite() | providers/google.firebase.database/eventTypes/ref.write | Данные созданы, удалены или обновлены |
Если вы хотите, чтобы пользователи могли настраивать путь для просмотра при установке вашего расширения, добавьте новый параметр в файл extension.yaml
и укажите ссылку на этот параметр в объявлении resource
вашей функции:
resources:
- name: yourFunctionName
type: firebaseextensions.v1beta.function
properties:
eventTrigger:
eventType: providers/google.firebase.database/eventTypes/ref.create
# DATABASE_INSTANCE (project's default instance) is an auto-populated
# parameter value. You can also specify an instance.
resource: projects/_/instances/${DATABASE_INSTANCE}/refs/${DB_PATH}
- name: anotherFunction
type: ...
params:
- param: DB_PATH
label: Realtime Database path
description: Where do you want to watch for changes?
type: string
default: path/to/{itemId} # Specifying a default is optional.
required: true
Remote Config
Функция, активируемая Remote Config, запускается при обновлении шаблона параметров проекта.
См. триггеры Remote Config в документации Cloud Functions для получения информации о написании функций, запускаемых Remote Config.
Определение функции (только 1-го поколения)
import { remoteConfig } from "firebase-functions/v1";
export const yourFunctionName = remoteConfig.onUpdate((version, context) => {
// ...
});
Объявление ресурса (расширение.yaml)
resources:
- name: yourFunctionName
type: firebaseextensions.v1beta.function
properties:
eventTrigger:
eventType: google.firebase.remoteconfig.update
resource: projects/${PROJECT_ID}
- name: anotherFunction
type: ...
Cloud Storage
Функция, активируемая Cloud Storage, запускается при создании, архивировании или удалении объекта, а также при изменении его метаданных.
Информацию о написании функций, запускаемых хранилищем, см. в разделе «Триггеры облачного хранилища» в документации Cloud Functions .
Определение функции (только 1-го поколения)
import { storage } from "firebase-functions/v1";
export const yourFunctionName = storage.object().onFinalize((object, context) => {
// ...
});
export const yourFunctionName2 = storage.object().onMetadataUpdate((object, context) => {
// ...
});
export const yourFunctionName3 = storage.object().onArchive((object, context) => {
// ...
});
export const yourFunctionName4 = storage.object().onDelete((object, context) => {
// ...
});
Объявление ресурса (расширение.yaml)
resources:
- name: yourFunctionName
type: firebaseextensions.v1beta.function
properties:
eventTrigger:
eventType: google.storage.object.finalize
# STORAGE_BUCKET (project's default bucket) is an auto-populated
# parameter. You can also specify a bucket.
resource: projects/_/buckets/${STORAGE_BUCKET}
- name: anotherFunction
type: ...
В следующей таблице показано, как указать каждый из поддерживаемых типов событий Cloud Storage :
Триггер событий Cloud Functions | eventType | Описание |
---|---|---|
onFinalize() | google.storage.object.finalize | Объект создан |
onMetadataUpdate() | google.storage.object.metadataUpdate | Метаданные объекта обновлены. |
onArchive() | google.storage.object.archive | Объект был заархивирован |
onDelete() | google.storage.object.delete | Объект удален |
Если вы хотите, чтобы пользователи могли настраивать сегмент хранилища при установке вашего расширения, добавьте новый параметр в файл extension.yaml
и укажите ссылку на этот параметр в объявлении resource
вашей функции:
resources:
- name: yourFunctionName
type: firebaseextensions.v1beta.function
properties:
eventTrigger:
eventType: google.storage.object.finalize
resource: projects/_/buckets/${YOUR_BUCKET}
- name: anotherFunction
type: ...
params:
- param: YOUR_BUCKET
label: Cloud Storage bucket
description: Which bucket do you want to watch for changes?
type: selectResource
resourceType: storage.googleapis.com/Bucket
default: ${STORAGE_BUCKET} # Specifying a default is optional.
required: true
Test Lab
Функция, запускаемая тестовой лабораторией, запускается, когда тестовая матрица завершает свои тесты.
Информацию о написании функций, запускаемых Test Lab, см. в разделе «Триггеры Firebase Test Lab» в документации Cloud Functions .
Определение функции (только 1-го поколения)
import { testLab } from "firebase-functions/v1";
export const yourFunctionName = testLab.testMatrix().onComplete((matrix, context) => {
// ...
});
Объявление ресурса (расширение.yaml)
resources:
- name: yourFunctionName
type: firebaseextensions.v1beta.function
properties:
eventTrigger:
eventType: google.testing.testMatrix.complete
resource: projects/${PROJECT_ID}/testMatrices/{matrixId}
- name: anotherFunction
type: ...
Триггеры оповещений Crashlytics
Функция, запускаемая Crashlytics запускается, когда Crashlytics публикует оповещение.
См. «Триггеры оповещений Firebase» в документации Cloud Functions для получения информации о написании функций, запускаемых оповещениями.
Определение функции (только 2-го поколения)
import {
onNewFatalIssuePublished,
onNewNonfatalIssuePublished,
onNewAnrIssuePublished,
onRegressionAlertPublished,
onVelocityAlertPublished,
onStabilityDigestPublished,
} from "firebase-functions/v2/alerts/crashlytics";
export const yourFunctionName = onNewFatalIssuePublished((event) => {
// ...
});
export const yourFunctionName2 = onNewNonfatalIssuePublished((event) => {
// ...
});
export const yourFunctionName3 = onNewAnrIssuePublished((event) => {
// ...
});
export const yourFunctionName4 = onRegressionAlertPublished((event) => {
// ...
});
export const yourFunctionName5 = onVelocityAlertPublished((event) => {
// ...
});
export const yourFunctionName6 = onStabilityDigestPublished((event) => {
// ...
});
Объявление ресурса (расширение.yaml)
apis:
- apiName: eventarc.googleapis.com
reason: Powers all events and triggers
- apiName: run.googleapis.com
reason: Powers 2nd-gen functions
resources:
- name: yourfunctionname
type: firebaseextensions.v1beta.v2function
properties:
buildConfig:
runtime: nodejs16
serviceConfig:
availableMemory: 512M
eventTrigger:
eventType: google.firebase.firebasealerts.alerts.v1.published
triggerRegion: global
eventFilters:
- attribute: alerttype
value: crashlytics.newFatalIssue
- name: anotherFunction
type: ...
Вы можете использовать следующие значения для alerttype
-
crashlytics.newFatalIssue
-
crashlytics.newNonfatalIssue
-
crashlytics.regression
-
crashlytics.stabilityDigest
-
crashlytics.velocity
-
crashlytics.newAnrIssue
Триггеры оповещений Performance Monitoring
Функция, активируемая Performance Monitoring , запускается, когда Performance Monitoring публикует предупреждение.
См. «Триггеры оповещений Firebase» в документации Cloud Functions для получения информации о написании функций, запускаемых оповещениями.
Определение функции (только 2-го поколения)
import { onThresholdAlertPublished } from "firebase-functions/v2/alerts/performance";
export const yourFunctionName = onThresholdAlertPublished((event) => {
// ...
});
Объявление ресурса (расширение.yaml)
apis:
- apiName: eventarc.googleapis.com
reason: Powers all events and triggers
- apiName: run.googleapis.com
reason: Powers 2nd-gen functions
resources:
- name: yourfunctionname
type: firebaseextensions.v1beta.v2function
properties:
buildConfig:
runtime: nodejs16
serviceConfig:
availableMemory: 512M
eventTrigger:
eventType: google.firebase.firebasealerts.alerts.v1.published
triggerRegion: global
eventFilters:
- attribute: alerttype
value: performance.threshold
- name: anotherFunction
type: ...
Триггеры оповещений App Distribution
Функция, активируемая App Distribution запускается, когда App Distribution публикует оповещение.
См. «Триггеры оповещений Firebase» в документации Cloud Functions для получения информации о написании функций, запускаемых оповещениями.
Определение функции (только 2-го поколения)
import {
onNewTesterIosDevicePublished,
onInAppFeedbackPublished
} from "firebase-functions/v2/alerts/appDistribution";
export const yourFunctionName = onNewTesterIosDevicePublished((event) => {
// ...
});
export const yourFunctionName2 = onInAppFeedbackPublished((event) => {
// ...
});
Объявление ресурса (расширение.yaml)
apis:
- apiName: eventarc.googleapis.com
reason: Powers all events and triggers
- apiName: run.googleapis.com
reason: Powers 2nd-gen functions
resources:
- name: yourfunctionname
type: firebaseextensions.v1beta.v2function
properties:
buildConfig:
runtime: nodejs16
serviceConfig:
availableMemory: 512M
eventTrigger:
eventType: google.firebase.firebasealerts.alerts.v1.published
triggerRegion: global
eventFilters:
- attribute: alerttype
value: appDistribution.inAppFeedback
- name: anotherFunction
type: ...
Вы можете использовать следующие значения для alerttype
-
appDistribution.newTesterIosDevice
-
appDistribution.inAppFeedback
Пользовательские триггеры событий (Eventarc)
Функция, запускаемая Eventarc, запускается, когда событие определенного типа публикуется в определенном канале.
Информацию о написании функций, запускаемых Eventarc, см. в разделе Создание и обработка пользовательских триггеров событий в документации Cloud Functions
Вы также можете публиковать события из своих расширений, чтобы дать пользователям возможность вставлять в ваше расширение собственную логику. См. раздел Использование пользовательской логики, предоставленной разработчиком, в расширении .
Определение функции (только 2-го поколения)
import { onCustomEventPublished } from "firebase-functions/v2/eventarc";
export const yourFunctionName = onCustomEventPublished((event) => {
// ...
});
Объявление ресурса (расширение.yaml)
apis:
- apiName: eventarc.googleapis.com
reason: Powers all events and triggers
- apiName: run.googleapis.com
reason: Powers 2nd-gen functions
resources:
- name: yourfunctionname
type: firebaseextensions.v1beta.v2function
properties:
# LOCATION is a user-configured parameter value specified by the user
# during installation.
location: ${param:LOCATION}
buildConfig:
runtime: nodejs16
serviceConfig:
availableMemory: 512M
timeoutSeconds: 60
eventTrigger:
eventType: firebase.extensions.storage-resize-images.v1.complete
channel: projects/${param:PROJECT_ID}/locations/us-central1/channels/firebase
- name: anotherFunction
type: ...
Канал должен уже существовать на момент установки вашего расширения. Например, если вы зависите от пользовательских событий другого расширения, создающего канал, попросите пользователей сначала установить это расширение.
В приведенном выше примере будет создан пользовательский триггер событий для канала Firebase по умолчанию в регионе us-central1
. Вы можете настроить имя канала и регион с помощью параметров. Например:
params:
- param: EVENTARC_CHANNEL_NAME
label: Eventarc channel name
description: What is the name of the Eventarc channel.
default: firebase
type: string
required: true
resources:
- name: yourfunctionname
type: firebaseextensions.v1beta.v2function
properties:
location: ${param:LOCATION}
eventTrigger:
eventType: firebase.extensions.storage-resize-images.v1.complete
channel: projects/${param:PROJECT_ID}/locations/${param:LOCATION}/channels/${param:EVENTARC_CHANNEL_NAME}
, Когда вы создаете расширение, вы пишете его логику с помощью Cloud Functions , почти так же, как вы пишете функцию, которая будет использоваться только в вашем собственном проекте. Вы объявляете свои функции в файле extension.yaml
, и когда пользователи устанавливают ваше расширение, эти функции развертываются в их проекте.
Общие сведения об использовании Cloud Functions см. в документации Cloud Functions .
Cloud Functions 1-го и 2-го поколения
Firebase поддерживает Cloud Functions как 1-го, так и 2-го поколения . Однако расширения Firebase в настоящее время имеют некоторые ограничения на то, какое поколение облачных функций можно использовать с определенными типами триггеров. По этой причине многие расширения включают в себя сочетание функций 1-го и 2-го поколения.
Поддержка генерации функций указана для каждого типа триггера ниже.
Особые соображения
Некоторые определения функций требуют указания информации, которая также указана в файле
extension.yaml
. Например, в Cloud Firestore есть методdocument()
, который определяет шаблон документа для просмотра, а его соответствующее объявление вextension.yaml
имеет полеresource
, которое указывает то же самое.В таких ситуациях используется конфигурация, указанная в файле
extension.yaml
, а конфигурация, указанная в определении функции, игнорируется.Обычной практикой является указание настроенного значения в определении функции в целях документации. Примеры на этой странице следуют этому шаблону.
В SDK Cloud Functions 1-го поколения есть метод
functions.config()
и команда CLIfunctions:config:set
, которую можно использовать для работы с параметризованными значениями в функциях 1-го поколения. Этот метод устарел в Cloud Functions и вообще не будет работать в расширении. Вместо этого используйте модульfunctions.params
(рекомендуется) илиprocess.env
.
Использование TypeScript
Большая часть документации по разработке собственного расширения описывает рабочие процессы с использованием JavaScript для Cloud Functions for Firebase . Однако вместо этого вы можете писать свои функции, используя TypeScript.
Фактически, все официальные расширения Firebase написаны на TypeScript. Вы можете просмотреть эти расширения, чтобы узнать о некоторых рекомендациях по использованию TypeScript для вашего расширения.
Если вы пишете функции своего расширения на TypeScript, перед установкой расширения необходимо сделать следующее:
Скомпилируйте исходный код функций вашего расширения в JavaScript.
Команда
firebase ext:dev:init
позволяет вам выбрать TypeScript для написания ваших функций. Команда предоставляет вам полное устанавливаемое расширение , а также сценарий сборки, который вы можете запустить с помощьюnpm run build
.В файле
package.json
обязательно укажите вmain
поле сгенерированный JavaScript.Если вы устанавливаете или загружаете расширение из локального источника, сначала скомпилируйте файлы TypeScript.
Поддерживаемые триггеры функций
HTTP-триггеры
Функция, активируемая HTTP, развертывается в общедоступной конечной точке https
и запускается при доступе к конечной точке.
Информацию о написании функций, запускаемых HTTP, см. в разделе «Вызов функций через HTTP-запросы» в документации Cloud Functions .
Определение функции (только 1-го поколения)
import { https } from "firebase-functions/v1";
export const yourFunctionName = https.onRequest(async (req, resp) => {
// ...
});
Объявление ресурса (расширение.yaml)
resources:
- name: yourFunctionName
type: firebaseextensions.v1beta.function
properties:
runtime: nodejs16
httpsTrigger: {}
- name: anotherFunction
type: ...
Вызываемые функции
Вызываемые функции аналогичны функциям, запускаемым HTTP, но они реализуют протокол, который делает их удобными для вызова из клиентского кода.
Информацию об использовании вызываемых функций см. в разделе Вызов функций из вашего приложения в документации Cloud Functions .
Определение функции (только 1-го поколения)
import { https } from "firebase-functions/v1";
export const yourFunctionName = https.onCall(async (data, context) => {
// ...
});
Объявление ресурса (расширение.yaml)
resources:
- name: yourFunctionName
type: firebaseextensions.v1beta.function
properties:
runtime: nodejs16
httpsTrigger: {}
- name: anotherFunction
type: ...
Триггеры запланированных функций
Запланированная функция выполняется неоднократно по настраиваемому расписанию.
См. функции планирования в документации Cloud Functions для получения информации о написании запланированных функций.
Определение функции (только 1-го поколения)
import { pubsub } from "firebase-functions/v1";
export const yourFunctionName = pubsub.schedule("every 6 hours").onRun((context) => {
// ...
});
Объявление ресурса (расширение.yaml)
resources:
- name: yourFunctionName
type: firebaseextensions.v1beta.function
properties:
scheduleTrigger:
schedule: 'every 5 minutes'
- name: anotherFunction
type: ...
Вот доступные подполя для scheduleTrigger
:
Поле | Описание |
---|---|
schedule (необходимый) | Частота, с которой вы хотите, чтобы функция выполнялась. Это поле может принимать строки, использующие любой синтаксис (требуется заключение в одинарные кавычки ):
|
timeZone (необязательный) | Часовой пояс, в котором будет работать расписание.
|
Если вы хотите, чтобы пользователи могли настраивать расписание при установке вашего расширения, добавьте новый параметр в файл extension.yaml
и укажите ссылку на этот параметр в объявлении resource
вашей функции:
resources:
- name: yourFunctionName
type: firebaseextensions.v1beta.function
properties:
scheduleTrigger:
schedule: ${SCHEDULE_FREQUENCY}
- name: anotherFunction
type: ...
params:
- param: SCHEDULE_FREQUENCY
label: Schedule
description: How often do you want to run yourFunctionName()?
type: string
default: 'every 5 minutes' # Specifying a default is optional.
required: true
Триггеры очереди задач
Функция очереди задач запускается либо при событиях жизненного цикла вашего расширения, либо при добавлении в очередь задач вашего расширения вручную с помощью метода TaskQueue.enqueue()
Admin SDK.
См . раздел «Обработка событий жизненного цикла вашего расширения» для получения информации о написании функций, обрабатывающих события жизненного цикла.
Информацию о написании функций очереди задач см. в разделе «Постановка функций в очередь с облачными задачами» в документации Cloud Functions .
Определение функции (только 1-го поколения)
import { tasks } from "firebase-functions/v1";
export const yourFunctionName = tasks.taskQueue().onDispatch(async (data, context) => {
// ...
});
Объявление ресурса (расширение.yaml)
resources:
- name: myTaskFunction
type: firebaseextensions.v1beta.function
description: >-
Perform a task when triggered by a lifecycle event
properties:
taskQueueTrigger: {}
Установите для свойства taskQueueTrigger
значение {}
или карту параметров, которые настраивают ограничения скорости и поведение повторных попыток очереди задач (см. Настройка очереди задач ).
Если вы хотите запускать свою функцию в событиях жизненного цикла вашего расширения, добавьте записи lifecycleEvents
с именем функции и необязательным сообщением обработки, которое будет отображаться в консоли Firebase при начале обработки.
lifecycleEvents:
onInstall:
function: myTaskFunction
processingMessage: Resizing your existing images
onUpdate:
function: myOtherTaskFunction
processingMessage: Setting up your extension
onConfigure:
function: myOtherTaskFunction
processingMessage: Setting up your extension
Analytics
Функция, активируемая Analytics, запускается при регистрации указанного события Analytics.
Информацию о написании функций, запускаемых Analytics, см. в разделе «Триггеры Google Analytics» в документации Cloud Functions .
Определение функции (только 1-го поколения)
import { analytics } from "firebase-functions/v1";
export const yourFunctionName = analytics.event("event_name").onLog((event, context) => {
// ...
});
Объявление ресурса (расширение.yaml)
resources:
- name: yourFunctionName
type: firebaseextensions.v1beta.function
properties:
eventTrigger:
eventType: providers/google.firebase.analytics/eventTypes/event.log
resource: projects/${PROJECT_ID}/events/ga_event
- name: anotherFunction
type: ...
Если вы хотите, чтобы пользователи могли настроить событие Analytics для прослушивания при установке вашего расширения, добавьте новый параметр в файл extension.yaml
и укажите ссылку на этот параметр в объявлении resource
вашей функции:
resources:
- name: yourFunctionName
type: firebaseextensions.v1beta.function
properties:
eventTrigger:
eventType: providers/google.firebase.analytics/eventTypes/event.log
resource: projects/${PROJECT_ID}/events/${EVENT_NAME}
- name: anotherFunction
type: ...
params:
- param: EVENT_NAME
label: Analytics event
description: What event do you want to respond to?
type: string
default: ga_event # Specifying a default is optional.
required: true
Authentication
Функция, активируемая аутентификацией, запускается при создании или удалении пользователя.
См. «Триггеры аутентификации Firebase» в документации Cloud Functions для получения информации о написании функций, запускаемых авторизацией.
Определение функции (только 1-го поколения)
import { auth } from "firebase-functions/v1";
export const yourFunctionName = auth.user().onCreate((user, context) => {
// ...
});
export const yourFunctionName2 = auth.user().onDelete((user, context) => {
// ...
});
Объявление ресурса (расширение.yaml)
resources:
- name: yourFunctionName
type: firebaseextensions.v1beta.function
properties:
eventTrigger:
eventType: providers/firebase.auth/eventTypes/user.create
resource: projects/${PROJECT_ID}
- name: anotherFunction
type: ...
В следующей таблице показано, как указать каждый из поддерживаемых типов событий Authentication :
Триггер событий Cloud Functions | eventType | Описание |
---|---|---|
onCreate() | providers/firebase.auth/eventTypes/user.create | Новый пользователь создан |
onDelete() | providers/firebase.auth/eventTypes/user.delete | Пользователь удален |
Cloud Firestore
Функция, активируемая Cloud Firestore, запускается при создании, обновлении или удалении документа.
См. «Триггеры Cloud Firestore» в документации Cloud Functions для получения информации о написании функций, запускаемых Firestore.
Определение функции (только 1-го поколения)
import { firestore } from "firebase-functions/v1";
export const yourFunctionName = firestore.document("collection/{doc_id}")
.onCreate((snapshot, context) => {
// ...
});
export const yourFunctionName2 = firestore.document("collection/{doc_id}")
.onUpdate((change, context) => {
// ...
});
export const yourFunctionName3 = firestore.document("collection/{doc_id}")
.onDelete((snapshot, context) => {
// ...
});
export const yourFunctionName4 = firestore.document("collection/{doc_id}")
.onWrite((change, context) => {
// onWrite triggers on creation, update, and deletion.
// ...
});
Объявление ресурса (расширение.yaml)
resources:
- name: yourFunctionName
type: firebaseextensions.v1beta.function
properties:
eventTrigger:
eventType: providers/cloud.firestore/eventTypes/document.write
resource: projects/${PROJECT_ID}/databases/(default)/documents/collection/{documentID}
- name: anotherFunction
type: ...
В следующей таблице показано, как указать каждый из поддерживаемых типов событий Cloud Firestore :
Триггер событий Cloud Functions | eventType | Описание |
---|---|---|
onCreate() | providers/cloud.firestore/eventTypes/document.create | Новый документ создан |
onDelete() | providers/cloud.firestore/eventTypes/document.delete | Документ удален. |
onUpdate() | providers/cloud.firestore/eventTypes/document.update | Документ обновлен |
onWrite() | providers/cloud.firestore/eventTypes/document.write | Документ создан, удален или обновлен |
Если вы хотите, чтобы пользователи могли настраивать путь к документу при установке вашего расширения, добавьте новый параметр в файл extension.yaml
и укажите ссылку на этот параметр в объявлении resource
вашей функции:
resources:
- name: yourFunctionName
type: firebaseextensions.v1beta.function
properties:
eventTrigger:
eventType: providers/cloud.firestore/eventTypes/document.write
resource: projects/${PROJECT_ID}/databases/(default)/documents/${YOUR_DOCUMENT_PATH}
- name: anotherFunction
type: ...
params:
- param: YOUR_DOCUMENT_PATH
label: Cloud Firestore path
description: Where do you want to watch for changes?
type: string
default: path/to/{documentID} # Specifying a default is optional.
required: true
Pub/Sub
Функция, запускаемая Pub/Sub, запускается, когда сообщение публикуется в определенной теме.
Информацию о написании функций, запускаемых Pub/Sub, см. в разделе «Триггеры Pub/Sub» в документации Cloud Functions .
Определение функции (только 1-го поколения)
import { pubsub } from "firebase-functions/v1";
export const yourFunctionName = pubsub.topic("topic_name").onPublish((message, context) => {
// ...
});
Объявление ресурса (расширение.yaml)
resources:
- name: yourFunctionName
type: firebaseextensions.v1beta.function
properties:
eventTrigger:
eventType: google.pubsub.topic.publish
resource: projects/${PROJECT_ID}/topics/topic-name
- name: anotherFunction
type: ...
Если вы хотите, чтобы пользователи могли настраивать тему Pub/Sub при установке вашего расширения, добавьте новый параметр в файл extension.yaml
и укажите ссылку на этот параметр в объявлении resource
вашей функции:
resources:
- name: yourFunctionName
type: firebaseextensions.v1beta.function
properties:
eventTrigger:
eventType: google.pubsub.topic.publish
resource: projects/${PROJECT_ID}/topics/${PUBSUB_TOPIC}
- name: anotherFunction
type: ...
params:
- param: PUBSUB_TOPIC
label: Pub/Sub topic
description: Which Pub/Sub topic do you want to watch for messages?
type: string
default: topic-name # Specifying a default is optional.
required: true
Realtime Database
Функция, активируемая базой данных реального времени, запускается, когда создается, обновляется или удаляется путь, соответствующий указанному шаблону.
Информацию о написании функций, запускаемых RTDB, см. в разделе «Триггеры базы данных реального времени » в документации Cloud Functions .
Определение функции (только 1-го поколения)
import { database } from "firebase-functions/v1";
export const yourFunctionName = database.ref("path/to/{item}")
.onCreate((snapshot, context) => {
// ...
});
export const yourFunctionName2 = database.ref("path/to/{item}")
.onUpdate((change, context) => {
// ...
});
export const yourFunctionName3 = database.ref("path/to/{item}")
.onDelete((snapshot, context) => {
// ...
});
export const yourFunctionName4 = database.ref("path/to/{item}")
.onWrite((change, context) => {
// onWrite triggers on creation, update, and deletion.
// ...
});
Объявление ресурса (расширение.yaml)
resources:
- name: yourFunctionName
type: firebaseextensions.v1beta.function
properties:
eventTrigger:
eventType: providers/google.firebase.database/eventTypes/ref.create
# DATABASE_INSTANCE (project's default instance) is an auto-populated
# parameter value. You can also specify an instance.
resource: projects/_/instances/${DATABASE_INSTANCE}/refs/path/to/{itemId}
- name: anotherFunction
type: ...
В следующей таблице показано, как указать каждый из поддерживаемых типов событий Cloud Firestore :
Триггер событий Cloud Functions | eventType | Описание |
---|---|---|
onCreate() | providers/google.firebase.database/eventTypes/ref.create | Данные созданы |
onDelete() | providers/google.firebase.database/eventTypes/ref.delete | Данные удалены |
onUpdate() | providers/google.firebase.database/eventTypes/ref.update | Данные обновлены |
onWrite() | providers/google.firebase.database/eventTypes/ref.write | Данные созданы, удалены или обновлены |
Если вы хотите, чтобы пользователи могли настраивать путь для просмотра при установке вашего расширения, добавьте новый параметр в файл extension.yaml
и укажите ссылку на этот параметр в объявлении resource
вашей функции:
resources:
- name: yourFunctionName
type: firebaseextensions.v1beta.function
properties:
eventTrigger:
eventType: providers/google.firebase.database/eventTypes/ref.create
# DATABASE_INSTANCE (project's default instance) is an auto-populated
# parameter value. You can also specify an instance.
resource: projects/_/instances/${DATABASE_INSTANCE}/refs/${DB_PATH}
- name: anotherFunction
type: ...
params:
- param: DB_PATH
label: Realtime Database path
description: Where do you want to watch for changes?
type: string
default: path/to/{itemId} # Specifying a default is optional.
required: true
Remote Config
Функция, активируемая Remote Config, запускается при обновлении шаблона параметров проекта.
См. триггеры Remote Config в документации Cloud Functions для получения информации о написании функций, запускаемых Remote Config.
Определение функции (только 1-го поколения)
import { remoteConfig } from "firebase-functions/v1";
export const yourFunctionName = remoteConfig.onUpdate((version, context) => {
// ...
});
Объявление ресурса (расширение.yaml)
resources:
- name: yourFunctionName
type: firebaseextensions.v1beta.function
properties:
eventTrigger:
eventType: google.firebase.remoteconfig.update
resource: projects/${PROJECT_ID}
- name: anotherFunction
type: ...
Cloud Storage
Функция, активируемая Cloud Storage, запускается при создании, архивировании или удалении объекта, а также при изменении его метаданных.
Информацию о написании функций, запускаемых хранилищем, см. в разделе «Триггеры облачного хранилища» в документации Cloud Functions .
Определение функции (только 1-го поколения)
import { storage } from "firebase-functions/v1";
export const yourFunctionName = storage.object().onFinalize((object, context) => {
// ...
});
export const yourFunctionName2 = storage.object().onMetadataUpdate((object, context) => {
// ...
});
export const yourFunctionName3 = storage.object().onArchive((object, context) => {
// ...
});
export const yourFunctionName4 = storage.object().onDelete((object, context) => {
// ...
});
Объявление ресурса (расширение.yaml)
resources:
- name: yourFunctionName
type: firebaseextensions.v1beta.function
properties:
eventTrigger:
eventType: google.storage.object.finalize
# STORAGE_BUCKET (project's default bucket) is an auto-populated
# parameter. You can also specify a bucket.
resource: projects/_/buckets/${STORAGE_BUCKET}
- name: anotherFunction
type: ...
В следующей таблице показано, как указать каждый из поддерживаемых типов событий Cloud Storage :
Триггер событий Cloud Functions | eventType | Описание |
---|---|---|
onFinalize() | google.storage.object.finalize | Объект создан |
onMetadataUpdate() | google.storage.object.metadataUpdate | Метаданные объекта обновлены. |
onArchive() | google.storage.object.archive | Объект был заархивирован |
onDelete() | google.storage.object.delete | Объект удален |
Если вы хотите, чтобы пользователи могли настраивать сегмент хранилища при установке вашего расширения, добавьте новый параметр в файл extension.yaml
и укажите ссылку на этот параметр в объявлении resource
вашей функции:
resources:
- name: yourFunctionName
type: firebaseextensions.v1beta.function
properties:
eventTrigger:
eventType: google.storage.object.finalize
resource: projects/_/buckets/${YOUR_BUCKET}
- name: anotherFunction
type: ...
params:
- param: YOUR_BUCKET
label: Cloud Storage bucket
description: Which bucket do you want to watch for changes?
type: selectResource
resourceType: storage.googleapis.com/Bucket
default: ${STORAGE_BUCKET} # Specifying a default is optional.
required: true
Test Lab
Функция, запускаемая тестовой лабораторией, запускается, когда тестовая матрица завершает свои тесты.
Информацию о написании функций, запускаемых Test Lab, см. в разделе «Триггеры Firebase Test Lab» в документации Cloud Functions .
Определение функции (только 1-го поколения)
import { testLab } from "firebase-functions/v1";
export const yourFunctionName = testLab.testMatrix().onComplete((matrix, context) => {
// ...
});
Объявление ресурса (расширение.yaml)
resources:
- name: yourFunctionName
type: firebaseextensions.v1beta.function
properties:
eventTrigger:
eventType: google.testing.testMatrix.complete
resource: projects/${PROJECT_ID}/testMatrices/{matrixId}
- name: anotherFunction
type: ...
Триггеры оповещений Crashlytics
Функция, запускаемая Crashlytics запускается, когда Crashlytics публикует оповещение.
См. «Триггеры оповещений Firebase» в документации Cloud Functions для получения информации о написании функций, запускаемых оповещениями.
Определение функции (только 2-го поколения)
import {
onNewFatalIssuePublished,
onNewNonfatalIssuePublished,
onNewAnrIssuePublished,
onRegressionAlertPublished,
onVelocityAlertPublished,
onStabilityDigestPublished,
} from "firebase-functions/v2/alerts/crashlytics";
export const yourFunctionName = onNewFatalIssuePublished((event) => {
// ...
});
export const yourFunctionName2 = onNewNonfatalIssuePublished((event) => {
// ...
});
export const yourFunctionName3 = onNewAnrIssuePublished((event) => {
// ...
});
export const yourFunctionName4 = onRegressionAlertPublished((event) => {
// ...
});
export const yourFunctionName5 = onVelocityAlertPublished((event) => {
// ...
});
export const yourFunctionName6 = onStabilityDigestPublished((event) => {
// ...
});
Объявление ресурса (расширение.yaml)
apis:
- apiName: eventarc.googleapis.com
reason: Powers all events and triggers
- apiName: run.googleapis.com
reason: Powers 2nd-gen functions
resources:
- name: yourfunctionname
type: firebaseextensions.v1beta.v2function
properties:
buildConfig:
runtime: nodejs16
serviceConfig:
availableMemory: 512M
eventTrigger:
eventType: google.firebase.firebasealerts.alerts.v1.published
triggerRegion: global
eventFilters:
- attribute: alerttype
value: crashlytics.newFatalIssue
- name: anotherFunction
type: ...
Вы можете использовать следующие значения для alerttype
-
crashlytics.newFatalIssue
-
crashlytics.newNonfatalIssue
-
crashlytics.regression
-
crashlytics.stabilityDigest
-
crashlytics.velocity
-
crashlytics.newAnrIssue
Триггеры оповещений Performance Monitoring
Функция, активируемая Performance Monitoring , запускается, когда Performance Monitoring публикует предупреждение.
См. «Триггеры оповещений Firebase» в документации Cloud Functions для получения информации о написании функций, запускаемых оповещениями.
Определение функции (только 2-го поколения)
import { onThresholdAlertPublished } from "firebase-functions/v2/alerts/performance";
export const yourFunctionName = onThresholdAlertPublished((event) => {
// ...
});
Объявление ресурса (расширение.yaml)
apis:
- apiName: eventarc.googleapis.com
reason: Powers all events and triggers
- apiName: run.googleapis.com
reason: Powers 2nd-gen functions
resources:
- name: yourfunctionname
type: firebaseextensions.v1beta.v2function
properties:
buildConfig:
runtime: nodejs16
serviceConfig:
availableMemory: 512M
eventTrigger:
eventType: google.firebase.firebasealerts.alerts.v1.published
triggerRegion: global
eventFilters:
- attribute: alerttype
value: performance.threshold
- name: anotherFunction
type: ...
Триггеры оповещений App Distribution
Функция, активируемая App Distribution запускается, когда App Distribution публикует оповещение.
См. «Триггеры оповещений Firebase» в документации Cloud Functions для получения информации о написании функций, запускаемых оповещениями.
Определение функции (только 2-го поколения)
import {
onNewTesterIosDevicePublished,
onInAppFeedbackPublished
} from "firebase-functions/v2/alerts/appDistribution";
export const yourFunctionName = onNewTesterIosDevicePublished((event) => {
// ...
});
export const yourFunctionName2 = onInAppFeedbackPublished((event) => {
// ...
});
Объявление ресурса (расширение.yaml)
apis:
- apiName: eventarc.googleapis.com
reason: Powers all events and triggers
- apiName: run.googleapis.com
reason: Powers 2nd-gen functions
resources:
- name: yourfunctionname
type: firebaseextensions.v1beta.v2function
properties:
buildConfig:
runtime: nodejs16
serviceConfig:
availableMemory: 512M
eventTrigger:
eventType: google.firebase.firebasealerts.alerts.v1.published
triggerRegion: global
eventFilters:
- attribute: alerttype
value: appDistribution.inAppFeedback
- name: anotherFunction
type: ...
Вы можете использовать следующие значения для alerttype
-
appDistribution.newTesterIosDevice
-
appDistribution.inAppFeedback
Пользовательские триггеры событий (Eventarc)
Функция, запускаемая Eventarc, запускается, когда событие определенного типа публикуется в определенном канале.
Информацию о написании функций, запускаемых Eventarc, см. в разделе Создание и обработка пользовательских триггеров событий в документации Cloud Functions
Вы также можете публиковать события из своих расширений, чтобы дать пользователям возможность вставлять в ваше расширение собственную логику. См. раздел Использование пользовательской логики, предоставленной разработчиком, в расширении .
Определение функции (только 2-го поколения)
import { onCustomEventPublished } from "firebase-functions/v2/eventarc";
export const yourFunctionName = onCustomEventPublished((event) => {
// ...
});
Объявление ресурса (расширение.yaml)
apis:
- apiName: eventarc.googleapis.com
reason: Powers all events and triggers
- apiName: run.googleapis.com
reason: Powers 2nd-gen functions
resources:
- name: yourfunctionname
type: firebaseextensions.v1beta.v2function
properties:
# LOCATION is a user-configured parameter value specified by the user
# during installation.
location: ${param:LOCATION}
buildConfig:
runtime: nodejs16
serviceConfig:
availableMemory: 512M
timeoutSeconds: 60
eventTrigger:
eventType: firebase.extensions.storage-resize-images.v1.complete
channel: projects/${param:PROJECT_ID}/locations/us-central1/channels/firebase
- name: anotherFunction
type: ...
Канал должен уже существовать на момент установки вашего расширения. Например, если вы зависите от пользовательских событий другого расширения, создающего канал, попросите пользователей сначала установить это расширение.
В приведенном выше примере будет создан пользовательский триггер событий для канала Firebase по умолчанию в регионе us-central1
. Вы можете настроить имя канала и регион с помощью параметров. Например:
params:
- param: EVENTARC_CHANNEL_NAME
label: Eventarc channel name
description: What is the name of the Eventarc channel.
default: firebase
type: string
required: true
resources:
- name: yourfunctionname
type: firebaseextensions.v1beta.v2function
properties:
location: ${param:LOCATION}
eventTrigger:
eventType: firebase.extensions.storage-resize-images.v1.complete
channel: projects/${param:PROJECT_ID}/locations/${param:LOCATION}/channels/${param:EVENTARC_CHANNEL_NAME}