כתיבת Cloud Functions לתוסף

כשיוצרים תוסף, כותבים את הלוגיקה שלו באמצעות Cloud Functions, בדומה מאוד לכתיבת פונקציה שתשמש רק בפרויקט שלכם. מצהירים על הפונקציות בקובץ extension.yaml, וכשהמשתמשים מתקינים את התוסף, הפונקציות האלה נפרסות בפרויקט שלהם.

למידע כללי על השימוש ב-Cloud Functions, אפשר לעיין בתיעוד של Cloud Functions.

דור ראשון ודור שני של Cloud Functions

פלטפורמת Firebase תומכת ב-1st-generation וב-2nd-generation Cloud Functions. עם זאת, יש כרגע הגבלות מסוימות על השימוש בתוספים של Firebase עם דורות מסוימים של פונקציות בענן ועם סוגים מסוימים של טריגרים. לכן, תוספים רבים כוללים שילוב של פונקציות מהדור הראשון ומהדור השני.

בהמשך מפורטות תכונות שנתמכות בכל סוג של טריגר.

שיקולים מיוחדים

  • חלק מהגדרות הפונקציות מחייבות לציין מידע שמופיע גם בקובץ extension.yaml. לדוגמה, ל-Cloud Firestore יש שיטה document() שמציינת את תבנית המסמך למעקב, וההצהרה התואמת שלה ב-extension.yaml כוללת שדה resource שמציין את אותה תבנית.

    במקרים כאלה, נעשה שימוש בהגדרה שצוינה בקובץ extension.yaml, וההגדרה שצוינה בהגדרת הפונקציה מתעלמת.

    מקובל לציין את הערך שהוגדר בהגדרת הפונקציה בכל מקרה, לצורך תיעוד. הדוגמאות בדף הזה פועלות לפי התבנית הזו.

  • ב-SDK מדור ראשון יש מתודה Cloud Functions ופקודת CLI‏ functions:config:set שאפשר להשתמש בהן כדי לעבוד עם ערכים עם פרמטרים בפונקציות מדור ראשון.functions.config() הטכניקה הזו הוצאה משימוש בגרסה Cloud Functions ולא תפעל בכלל בתוסף. במקום זאת, אפשר להשתמש במודול functions.params (מומלץ) או ב-process.env.

שימוש ב-TypeScript

רוב התיעוד לפיתוח תוסף משלכם מתאר תהליכי עבודה באמצעות JavaScript ל-Cloud Functions for Firebase. עם זאת, אפשר לכתוב את הפונקציות באמצעות TypeScript.

למעשה, כל התוספים הרשמייםFirebase כתובים ב-TypeScript. כדאי לעיין בתוספים האלה כדי לקבל כמה שיטות מומלצות לשימוש ב-TypeScript בתוסף.

אם כותבים את הפונקציות של התוסף ב-TypeScript, צריך לבצע את הפעולות הבאות לפני התקנת התוסף:

  1. קומפילציה של קוד המקור של הפונקציות של התוסף ל-JavaScript.

    הפקודה firebase ext:dev:init command מאפשרת לכם לבחור ב-TypeScript כדי לכתוב את הפונקציות. הפקודה מספקת תוסף מלא שניתן להתקנה וכן סקריפט build שאפשר להריץ באמצעות npm run build.

  2. בקובץ package.json, מוודאים שהשדה main מצביע על קובץ ה-JavaScript שנוצר.

  3. אם אתם מתקינים או מעלים את התוסף ממקור מקומי, צריך קודם לקמפל את קובצי ה-TypeScript.

טריגרים נתמכים של פונקציות

טריגרים של HTTP

פונקציה שמופעלת על ידי HTTP נפרסת בנקודת קצה (endpoint) ציבורית https ומופעלת כשניגשים לנקודת הקצה.

מידע על כתיבת פונקציות שמופעלות על ידי HTTP מופיע במאמר קריאה לפונקציות באמצעות בקשות HTTP במסמכי התיעוד של Cloud Functions.

הגדרת הפונקציה (רק בדור הראשון)

import { https } from "firebase-functions/v1";

export const yourFunctionName = https.onRequest(async (req, resp) => {
  // ...
});

הצהרת משאבים (extension.yaml)

resources:
  - name: yourFunctionName
    type: firebaseextensions.v1beta.function
    properties:
      runtime: nodejs16
      httpsTrigger: {}
  - name: anotherFunction
    type: ...

פונקציות שאפשר להפעיל

פונקציות שאפשר להפעיל דומות לפונקציות שמופעלות על ידי HTTP, אבל הן מטמיעות פרוטוקול שמאפשר להפעיל אותן בקלות מקוד בצד הלקוח.

במסמכי התיעוד של Cloud Functions אפשר לקרוא על שימוש בפונקציות שאפשר להפעיל.

הגדרת הפונקציה (רק בדור הראשון)

import { https } from "firebase-functions/v1";

export const yourFunctionName = https.onCall(async (data, context) => {
  // ...
});

הצהרת משאבים (extension.yaml)

resources:
  - name: yourFunctionName
    type: firebaseextensions.v1beta.function
    properties:
      runtime: nodejs16
      httpsTrigger: {}
  - name: anotherFunction
    type: ...

טריגרים מתוזמנים של פונקציות

פונקציה מתוזמנת פועלת שוב ושוב על סמך לוח זמנים שניתן להתאמה אישית.

במאמר תזמון פונקציות במסמכי התיעוד של Cloud Functions יש מידע על כתיבת פונקציות מתוזמנות.

הגדרת הפונקציה (רק בדור הראשון)

import { pubsub } from "firebase-functions/v1";

export const yourFunctionName = pubsub.schedule("every 6 hours").onRun((context) => {
  // ...
});

הצהרת משאבים (extension.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 Tasks במסמכי התיעוד של Cloud Functions.

הגדרת הפונקציה (רק בדור הראשון)

import { tasks } from "firebase-functions/v1";

export const yourFunctionName = tasks.taskQueue().onDispatch(async (data, context) => {
  // ...
});

הצהרת משאבים (extension.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 נרשם ביומן.

במסמכי Cloud Functions אפשר למצוא מידע על כתיבת פונקציות שמופעלות על ידי Analytics.

הגדרת הפונקציה (רק בדור הראשון)

import { analytics } from "firebase-functions/v1";

export const yourFunctionName = analytics.event("event_name").onLog((event, context) => {
  // ...
});

הצהרת משאבים (extension.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 אפשר לקרוא מידע על כתיבת פונקציות שמופעלות על ידי אימות.

הגדרת הפונקציה (רק בדור הראשון)

import { auth } from "firebase-functions/v1";

export const yourFunctionName = auth.user().onCreate((user, context) => {
  // ...
});

export const yourFunctionName2 = auth.user().onDelete((user, context) => {
  // ...
});

הצהרת משאבים (extension.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 פועלת כשמסמך נוצר, מעודכן או נמחק.

מידע על כתיבת פונקציות שמופעלות על ידי Firestore זמין במאמר טריגרים של Cloud Firestore במסמכי התיעוד של Cloud Functions.

הגדרת הפונקציה (רק בדור הראשון)

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.
    // ...
  });

הצהרת משאבים (extension.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 Google Analytics:

טריגר לאירוע (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 במסמכי התיעוד של Cloud Functions מוסבר איך לכתוב פונקציות שמופעלות על ידי Pub/Sub.

הגדרת הפונקציה (רק בדור הראשון)

import { pubsub } from "firebase-functions/v1";

export const yourFunctionName = pubsub.topic("topic_name").onPublish((message, context) => {
  // ...
});

הצהרת משאבים (extension.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

פונקציה שמופעלת על ידי Realtime Database פועלת כשנוצר, מעודכן או נמחק נתיב שתואם לתבנית שצוינה.

מידע על כתיבת פונקציות שמופעלות על ידי RTDB זמין במאמר בנושא טריגרים של Realtime Database במסמכי התיעוד של Cloud Functions.

הגדרת הפונקציה (רק בדור הראשון)

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.
    // ...
  });

הצהרת משאבים (extension.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 Google Analytics:

טריגר לאירוע (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 פועלת כשמעדכנים תבנית פרמטרים של פרויקט.

במאמר טריגרים של הגדרת תצורה מרחוק במסמכי התיעוד של Cloud Functions מוסבר איך לכתוב פונקציות שמופעלות על ידי הגדרת תצורה מרחוק.

הגדרת הפונקציה (רק בדור הראשון)

import { remoteConfig } from "firebase-functions/v1";

export const yourFunctionName = remoteConfig.onUpdate((version, context) => {
  // ...
});

הצהרת משאבים (extension.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 פועלת כשיוצרים, מעבירים לארכיון או מוחקים אובייקט, או כשמשנים את המטא-נתונים שלו.

מידע על כתיבת פונקציות שמופעלות על ידי Storage מופיע במאמר בנושא טריגרים של Cloud Storage במסמכי התיעוד של Cloud Functions.

הגדרת הפונקציה (רק בדור הראשון)

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) => {
  // ...
});

הצהרת משאבים (extension.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 Google Analytics:

טריגר לאירוע (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 פועלת כשמטריצת בדיקות מסיימת את הבדיקות שלה.

מידע על כתיבת פונקציות שמופעלות על ידי Test Lab זמין במאמר טריגרים של Firebase Test Lab במסמכי התיעוד של Cloud Functions.

הגדרת הפונקציה (רק בדור הראשון)

import { testLab } from "firebase-functions/v1";

export const yourFunctionName = testLab.testMatrix().onComplete((matrix, context) => {
  // ...
});

הצהרת משאבים (extension.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 יש מידע על כתיבת פונקציות שמופעלות על ידי התראות.

הגדרת הפונקציה (רק בדור השני)

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) => {
  // ...
});

הצהרת משאבים (extension.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 יש מידע על כתיבת פונקציות שמופעלות על ידי התראות.

הגדרת הפונקציה (רק בדור השני)

import { onThresholdAlertPublished } from "firebase-functions/v2/alerts/performance";

export const yourFunctionName = onThresholdAlertPublished((event) => {
  // ...
});

הצהרת משאבים (extension.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 יש מידע על כתיבת פונקציות שמופעלות על ידי התראות.

הגדרת הפונקציה (רק בדור השני)

import {
  onNewTesterIosDevicePublished,
  onInAppFeedbackPublished
} from "firebase-functions/v2/alerts/appDistribution";

export const yourFunctionName = onNewTesterIosDevicePublished((event) => {
  // ...
});

export const yourFunctionName2 = onInAppFeedbackPublished((event) => {
  // ...
});

הצהרת משאבים (extension.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 פועלת כשסוג אירוע ספציפי מתפרסם בערוץ ספציפי.

במאמר יצירה וטיפול בטריגרים של אירועים בהתאמה אישית במסמכי התיעוד של Cloud Functions אפשר לקרוא מידע על כתיבת פונקציות שמופעלות על ידי Eventarc.

אפשר גם לפרסם אירועים מהתוספים כדי לאפשר למשתמשים להוסיף לוגיקה מותאמת אישית לתוסף. אפשר לעיין במאמר בנושא שימוש בלוגיקה מותאמת אישית שסופקה על ידי מפתח בתוסף.

הגדרת הפונקציה (רק בדור השני)

import { onCustomEventPublished } from "firebase-functions/v2/eventarc";

export const yourFunctionName = onCustomEventPublished((event) => {
  // ...
});

הצהרת משאבים (extension.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: ...

הערוץ צריך כבר להתקיים כשמתקינים את התוסף. לדוגמה, אם אתם מסתמכים על אירועים מותאמים אישית מתוסף אחר שיוצר את הערוץ, אתם צריכים להנחות את המשתמשים להתקין את התוסף הזה קודם.

בדוגמה שלמעלה, נוצר אירוע מותאם אישית להפעלת המעקב עבור הערוץ 'default' ב-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}