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

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

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

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

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

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

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

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

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

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

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

שימוש ב-TypeScript

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

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

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

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

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

  2. בקובץ package.json, חשוב להפנות את השדה main אל קוד ה-JavaScript שנוצר.

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

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

טריגרים של HTTP

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

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

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

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 מתועד ביומן.

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

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

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

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:

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

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

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

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:

טריגר של אירוע 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.

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

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

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

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

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:

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

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

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

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

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

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

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: ...

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

בדוגמה שלמעלה, ייווצר טריגר אירוע בהתאמה אישית לערוץ 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}