рд╢реБрд░реВ рдХрд░реЗрдВ: рдЕрдкрдиреЗ рдкрд╣рд▓реЗ рдлрд╝рдВрдХреНрд╢рди рд▓рд┐рдЦреЗрдВ, рдЯреЗрд╕реНрдЯ рдХрд░реЗрдВ, рдФрд░ рдбрд┐рдкреНрд▓реЙрдп рдХрд░реЗрдВ

Cloud Functions рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЗрд╕ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдХреЛ рдЖрдЬрд╝рдорд╛рдПрдВ. рдЗрд╕рдореЗрдВ рдЬрд╝рд░реВрд░реА рд╕реЗрдЯрдЕрдк рдЯрд╛рд╕реНрдХ рд╕реЗ рд▓реЗрдХрд░, рджреЛ рдлрд╝рдВрдХреНрд╢рди рдмрдирд╛рдиреЗ, рдЙрдирдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ, рдФрд░ рдЙрдиреНрд╣реЗрдВ рдбрд┐рдкреНрд▓реЙрдп рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрддрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ:

  • "рдореИрд╕реЗрдЬ рдЬреЛрдбрд╝реЗрдВ" рдлрд╝рдВрдХреНрд╢рди, рдПрдХ рдРрд╕рд╛ рдпреВрдЖрд░рдПрд▓ рджрд┐рдЦрд╛рддрд╛ рд╣реИ рдЬреЛ рдЯреЗрдХреНрд╕реНрдЯ рд╡реИрд▓реНрдпреВ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЙрд╕реЗ Cloud Firestore рдореЗрдВ рд▓рд┐рдЦрддрд╛ рд╣реИ.
  • "рдХреИрдкрд┐рдЯрд▓ рд▓реЗрдЯрд░ рдореЗрдВ рдмрджрд▓реЗрдВ" рдлрд╝рдВрдХреНрд╢рди, Cloud Firestore рд▓рд┐рдЦрдиреЗ рдкрд░ рдЯреНрд░рд┐рдЧрд░ рд╣реЛрддрд╛ рд╣реИ рдФрд░ рдЯреЗрдХреНрд╕реНрдЯ рдХреЛ рдХреИрдкрд┐рдЯрд▓ рд▓реЗрдЯрд░ рдореЗрдВ рдмрджрд▓рддрд╛ рд╣реИ.

рдпрд╣рд╛рдВ рдлрд╝рдВрдХреНрд╢рди рд╡рд╛рд▓рд╛ рдкреВрд░рд╛ рд╕реИрдВрдкрд▓ рдХреЛрдб рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:

Node.js

// The Cloud Functions for Firebase SDK to create Cloud Functions and triggers.
const {logger} = require("firebase-functions");
const {onRequest} = require("firebase-functions/v2/https");
const {onDocumentCreated} = require("firebase-functions/v2/firestore");

// The Firebase Admin SDK to access Firestore.
const {initializeApp} = require("firebase-admin/app");
const {getFirestore} = require("firebase-admin/firestore");

initializeApp();

// Take the text parameter passed to this HTTP endpoint and insert it into
// Firestore under the path /messages/:documentId/original
exports.addmessage = onRequest(async (req, res) => {
  // Grab the text parameter.
  const original = req.query.text;
  // Push the new message into Firestore using the Firebase Admin SDK.
  const writeResult = await getFirestore()
      .collection("messages")
      .add({original: original});
  // Send back a message that we've successfully written the message
  res.json({result: `Message with ID: ${writeResult.id} added.`});
});

// Listens for new messages added to /messages/:documentId/original
// and saves an uppercased version of the message
// to /messages/:documentId/uppercase
exports.makeuppercase = onDocumentCreated("/messages/{documentId}", (event) => {
  // Grab the current value of what was written to Firestore.
  const original = event.data.data().original;

  // Access the parameter `{documentId}` with `event.params`
  logger.log("Uppercasing", event.params.documentId, original);

  const uppercase = original.toUpperCase();

  // You must return a Promise when performing
  // asynchronous tasks inside a function
  // such as writing to Firestore.
  // Setting an 'uppercase' field in Firestore document returns a Promise.
  return event.data.ref.set({uppercase}, {merge: true});
});

Python

# The Cloud Functions for Firebase SDK to create Cloud Functions and set up triggers.
from firebase_functions import firestore_fn, https_fn

# The Firebase Admin SDK to access Cloud Firestore.
from firebase_admin import initialize_app, firestore
import google.cloud.firestore

app = initialize_app()


@https_fn.on_request()
def addmessage(req: https_fn.Request) -> https_fn.Response:
    """Take the text parameter passed to this HTTP endpoint and insert it into
    a new document in the messages collection."""
    # Grab the text parameter.
    original = req.args.get("text")
    if original is None:
        return https_fn.Response("No text parameter provided", status=400)

    firestore_client: google.cloud.firestore.Client = firestore.client()

    # Push the new message into Cloud Firestore using the Firebase Admin SDK.
    _, doc_ref = firestore_client.collection("messages").add({"original": original})

    # Send back a message that we've successfully written the message
    return https_fn.Response(f"Message with ID {doc_ref.id} added.")


@firestore_fn.on_document_created(document="messages/{pushId}")
def makeuppercase(event: firestore_fn.Event[firestore_fn.DocumentSnapshot | None]) -> None:
    """Listens for new documents to be added to /messages. If the document has
    an "original" field, creates an "uppercase" field containg the contents of
    "original" in upper case."""

    # Get the value of "original" if it exists.
    if event.data is None:
        return
    try:
        original = event.data.get("original")
    except KeyError:
        # No "original" field, so do nothing.
        return

    # Set the "uppercase" field.
    print(f"Uppercasing {event.params['pushId']}: {original}")
    upper = original.upper()
    event.data.reference.update({"uppercase": upper})

рдЗрд╕ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА

рд╣рдордиреЗ рдЗрд╕ рд╕реИрдВрдкрд▓ рдХреЗ рд▓рд┐рдП Cloud Firestore рдФрд░ рдПрдЪрдЯреАрдЯреАрдкреА рдЯреНрд░рд┐рдЧрд░ рдХрд┐рдП рдЧрдП рдлрд╝рдВрдХреНрд╢рди рдЪреБрдиреЗ рд╣реИрдВ. рдЗрд╕рдХреА рдПрдХ рд╡рдЬрд╣ рдпрд╣ рд╣реИ рдХрд┐ рдЗрди рдмреИрдХрдЧреНрд░рд╛рдЙрдВрдб рдЯреНрд░рд┐рдЧрд░ рдХреЛ Firebase Local Emulator Suite рдХреЗ рдЬрд╝рд░рд┐рдП рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдЯреЗрд╕реНрдЯ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ. рдпрд╣ рдЯреВрд▓рд╕реЗрдЯ, Realtime Database, Cloud Storage, PubSub, Auth, рдФрд░ рдПрдЪрдЯреАрдЯреАрдкреА рдХреЙрд▓ рдХрд┐рдП рдЬрд╛ рд╕рдХрдиреЗ рд╡рд╛рд▓реЗ рдЯреНрд░рд┐рдЧрд░ рдХреЗ рд╕рд╛рде рднреА рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ. Remote Config рдФрд░ TestLab рдЯреНрд░рд┐рдЧрд░ рдЬреИрд╕реЗ рдЕрдиреНрдп рдмреИрдХрдЧреНрд░рд╛рдЙрдВрдб рдЯреНрд░рд┐рдЧрд░ рдХреА рдЗрдВрдЯрд░реИрдХреНрдЯрд┐рд╡ рддрд░реАрдХреЗ рд╕реЗ рдЬрд╛рдВрдЪ рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИ. рдЗрд╕рдХреЗ рд▓рд┐рдП, рдЗрд╕ рдкреЗрдЬ рдкрд░ рдирд╣реАрдВ рдмрддрд╛рдП рдЧрдП рдЯреВрд▓рд╕реЗрдЯ рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ.

рдЗрд╕ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдХреЗ рдЗрди рд╕реЗрдХреНрд╢рди рдореЗрдВ, рд╕реИрдВрдкрд▓ рдмрдирд╛рдиреЗ, рдЙрд╕рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ, рдФрд░ рдЙрд╕реЗ рдбрд┐рдкреНрд▓реЙрдп рдХрд░рдиреЗ рдХрд╛ рддрд░реАрдХрд╛ рдмрддрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ.

Firebase рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдмрдирд╛рдирд╛

рдХреНрдпрд╛ рдЖрдкрдиреЗ рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ Firebase рдпрд╛ Cloud рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ?

рдЕрдЧрд░ рдЖрдкрдиреЗ Firebase рдпрд╛ Google Cloud рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдкрд╣рд▓реЗ рдХрднреА рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ, рддреЛ рдпрд╣ рддрд░реАрдХрд╛ рдЕрдкрдирд╛рдПрдВ.
рдЕрдЧрд░ рдЖрдкрдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдирдпрд╛ Firebase рдкреНрд░реЛрдЬреЗрдХреНрдЯ (рдФрд░ рдЙрд╕рдХрд╛ Google Cloud рдкреНрд░реЛрдЬреЗрдХреНрдЯ) рдмрдирд╛рдирд╛ рд╣реИ, рддреЛ рдпрд╣ рддрд░реАрдХрд╛ рднреА рдЕрдкрдирд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ.

  1. Firebase console рдореЗрдВ рд╕рд╛рдЗрди рдЗрди рдХрд░реЗрдВ.
  2. рдирдпрд╛ Firebase рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдмрдЯрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ.
  3. рдЯреЗрдХреНрд╕реНрдЯ рдлрд╝реАрд▓реНрдб рдореЗрдВ, рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХрд╛ рдирд╛рдо рдбрд╛рд▓реЗрдВ.

    рдЕрдЧрд░ рдЖрдк рдХрд┐рд╕реА Google Cloud рд╕рдВрдЧрдарди рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЗ рдкрд╛рд╕ рдпрд╣ рдЪреБрдирдиреЗ рдХрд╛ рд╡рд┐рдХрд▓реНрдк рд╣реЛрддрд╛ рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рдЕрдкрдирд╛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХрд┐рд╕ рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рдмрдирд╛рдирд╛ рд╣реИ.

  4. рдЕрдЧрд░ рдЖрдкрд╕реЗ рдХрд╣рд╛ рдЬрд╛рдП, рддреЛ Firebase рдХреА рд╢рд░реНрддреЗрдВ рдкрдврд╝реЗрдВ рдФрд░ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░реЗрдВ. рдЗрд╕рдХреЗ рдмрд╛рдж, рдЬрд╛рд░реА рд░рдЦреЗрдВ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ.
  5. (рдЬрд╝рд░реВрд░реА рдирд╣реАрдВ) Firebase рдХрдВрд╕реЛрд▓ рдореЗрдВ рдПрдЖрдИ рдХреА рдорджрдж рдкрд╛рдиреЗ рдХреА рд╕реБрд╡рд┐рдзрд╛ рдЪрд╛рд▓реВ рдХрд░реЗрдВ. рдЗрд╕реЗ "Firebase рдореЗрдВ Gemini" рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ. рдЗрд╕рд╕реЗ рдЖрдкрдХреЛ рд╢реБрд░реВ рдХрд░рдиреЗ рдФрд░ рдбреЗрд╡рд▓рдкрдореЗрдВрдЯ рдкреНрд░реЛрд╕реЗрд╕ рдХреЛ рдмреЗрд╣рддрд░ рдмрдирд╛рдиреЗ рдореЗрдВ рдорджрдж рдорд┐рд▓ рд╕рдХрддреА рд╣реИ.
  6. (рдЬрд╝рд░реВрд░реА рдирд╣реАрдВ) рдЕрдкрдиреЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП Google Analytics рд╕реЗрдЯ рдЕрдк рдХрд░реЗрдВ. рдЗрд╕рд╕реЗ рдЗрди Firebase рдкреНрд░реЙрдбрдХреНрдЯ рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░рдХреЗ, рдмреЗрд╣рддрд░ рдЕрдиреБрднрд╡ рдорд┐рд▓рддрд╛ рд╣реИ: Firebase A/B Testing, Cloud Messaging, Crashlytics, In-App Messaging, рдФрд░ Remote Config (рдЗрд╕рдореЗрдВ Personalization рд╢рд╛рдорд┐рд▓ рд╣реИ).

    рдХреЛрдИ рдореМрдЬреВрджрд╛ Google Analytics рдЦрд╛рддрд╛ рдЪреБрдиреЗрдВ рдпрд╛ рдирдпрд╛ рдЦрд╛рддрд╛ рдмрдирд╛рдПрдВ. рдирдпрд╛ рдЦрд╛рддрд╛ рдмрдирд╛рдиреЗ рдХреЗ рдмрд╛рдж, Analytics рд░рд┐рдкреЛрд░реНрдЯрд┐рдВрдЧ рдХреА рдЬрдЧрд╣ рдЪреБрдиреЗрдВ. рдЗрд╕рдХреЗ рдмрд╛рдж, рдЕрдкрдиреЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП рдбреЗрдЯрд╛ рд╢реЗрдпрд░ рдХрд░рдиреЗ рдХреА рд╕реЗрдЯрд┐рдВрдЧ рдФрд░ Google Analytics рд╢рд░реНрддреЗрдВ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░реЗрдВ.

  7. рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдмрдирд╛рдПрдВ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ.

Firebase рдЖрдкрдХрд╛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдмрдирд╛рддрд╛ рд╣реИ, рдХреБрдЫ рд╢реБрд░реБрдЖрддреА рд╕рдВрд╕рд╛рдзрди рдЙрдкрд▓рдмреНрдз рдХрд░рд╛рддрд╛ рд╣реИ, рдФрд░ рдЬрд╝рд░реВрд░реА рдПрдкреАрдЖрдИ рдЪрд╛рд▓реВ рдХрд░рддрд╛ рд╣реИ. рдкреНрд░реЛрд╕реЗрд╕ рдкреВрд░реА рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж, рдЖрдкрдХреЛ Firebase рдХрдВрд╕реЛрд▓ рдореЗрдВ рдЕрдкрдиреЗ Firebase рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рдЦрд╛рд╕ рдЬрд╛рдирдХрд╛рд░реА рд╡рд╛рд▓реЗ рдкреЗрдЬ рдкрд░ рд▓реЗ рдЬрд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛.

рдореМрдЬреВрджрд╛ Cloud рдкреНрд░реЛрдЬреЗрдХреНрдЯ

рдЕрдЧрд░ рдЖрдкрдХреЛ рдХрд┐рд╕реА рдореМрдЬреВрджрд╛ Google Cloud рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рд╕рд╛рде Firebase рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рд╢реБрд░реВ рдХрд░рдирд╛ рд╣реИ, рддреЛ рдпрд╣ рддрд░реАрдХрд╛ рдЕрдкрдирд╛рдПрдВ. рдореМрдЬреВрджрд╛ Google Cloud рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ "Firebase рдЬреЛрдбрд╝рдиреЗ" рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╝реНрдпрд╛рджрд╛ рдЬрд╛рдиреЗрдВ.

  1. рдЙрд╕ рдЦрд╛рддреЗ рд╕реЗ Firebase рдХрдВрд╕реЛрд▓ рдореЗрдВ рд╕рд╛рдЗрди рдЗрди рдХрд░реЗрдВ рдЬрд┐рд╕рд╕реЗ рдЖрдкрдХреЛ рдореМрдЬреВрджрд╛ Google Cloud рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХрд╛ рдРрдХреНрд╕реЗрд╕ рдорд┐рд▓рддрд╛ рд╣реИ.
  2. рдирдпрд╛ Firebase рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдмрдЯрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ.
  3. рдкреЗрдЬ рдкрд░ рд╕рдмрд╕реЗ рдиреАрдЪреЗ, Google Cloud рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ Firebase рдЬреЛрдбрд╝реЗрдВ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ.
  4. рдЯреЗрдХреНрд╕реНрдЯ рдлрд╝реАрд▓реНрдб рдореЗрдВ, рдореМрдЬреВрджрд╛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХрд╛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХрд╛ рдирд╛рдо рдбрд╛рд▓рдирд╛ рд╢реБрд░реВ рдХрд░реЗрдВ. рдЗрд╕рдХреЗ рдмрд╛рдж, рджрд┐рдЦрд╛рдИ рдЧрдИ рд╕реВрдЪреА рдореЗрдВ рд╕реЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдЪреБрдиреЗрдВ.
  5. рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдЦреЛрд▓реЗрдВ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ.
  6. рдЕрдЧрд░ рдЖрдкрд╕реЗ рдХрд╣рд╛ рдЬрд╛рдП, рддреЛ Firebase рдХреА рд╢рд░реНрддреЗрдВ рдкрдврд╝реЗрдВ рдФрд░ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░реЗрдВ. рдЗрд╕рдХреЗ рдмрд╛рдж, рдЬрд╛рд░реА рд░рдЦреЗрдВ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ.
  7. (рдЬрд╝рд░реВрд░реА рдирд╣реАрдВ) Firebase рдХрдВрд╕реЛрд▓ рдореЗрдВ рдПрдЖрдИ рдХреА рдорджрдж рдкрд╛рдиреЗ рдХреА рд╕реБрд╡рд┐рдзрд╛ рдЪрд╛рд▓реВ рдХрд░реЗрдВ. рдЗрд╕реЗ "Firebase рдореЗрдВ Gemini" рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ. рдЗрд╕рд╕реЗ рдЖрдкрдХреЛ рд╢реБрд░реВ рдХрд░рдиреЗ рдФрд░ рдбреЗрд╡рд▓рдкрдореЗрдВрдЯ рдкреНрд░реЛрд╕реЗрд╕ рдХреЛ рдмреЗрд╣рддрд░ рдмрдирд╛рдиреЗ рдореЗрдВ рдорджрдж рдорд┐рд▓ рд╕рдХрддреА рд╣реИ.
  8. (рдЬрд╝рд░реВрд░реА рдирд╣реАрдВ) рдЕрдкрдиреЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП Google Analytics рд╕реЗрдЯ рдЕрдк рдХрд░реЗрдВ. рдЗрд╕рд╕реЗ рдЗрди Firebase рдкреНрд░реЙрдбрдХреНрдЯ рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░рдХреЗ, рдмреЗрд╣рддрд░ рдЕрдиреБрднрд╡ рдорд┐рд▓рддрд╛ рд╣реИ: Firebase A/B Testing, Cloud Messaging, Crashlytics, In-App Messaging, рдФрд░ Remote Config (рдЗрд╕рдореЗрдВ Personalization рд╢рд╛рдорд┐рд▓ рд╣реИ).

    рдХреЛрдИ рдореМрдЬреВрджрд╛ Google Analytics рдЦрд╛рддрд╛ рдЪреБрдиреЗрдВ рдпрд╛ рдирдпрд╛ рдЦрд╛рддрд╛ рдмрдирд╛рдПрдВ. рдирдпрд╛ рдЦрд╛рддрд╛ рдмрдирд╛рдиреЗ рдХреЗ рдмрд╛рдж, Analytics рд░рд┐рдкреЛрд░реНрдЯрд┐рдВрдЧ рдХреА рдЬрдЧрд╣ рдЪреБрдиреЗрдВ. рдЗрд╕рдХреЗ рдмрд╛рдж, рдЕрдкрдиреЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП рдбреЗрдЯрд╛ рд╢реЗрдпрд░ рдХрд░рдиреЗ рдХреА рд╕реЗрдЯрд┐рдВрдЧ рдФрд░ Google Analytics рд╢рд░реНрддреЗрдВ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░реЗрдВ.

  9. Firebase рдЬреЛрдбрд╝реЗрдВ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ.

Firebase рдЖрдкрдХреЗ рдореМрдЬреВрджрд╛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ Firebase рдЬреЛрдбрд╝рддрд╛ рд╣реИ. рдкреНрд░реЛрд╕реЗрд╕ рдкреВрд░реА рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж, рдЖрдкрдХреЛ Firebase рдХрдВрд╕реЛрд▓ рдореЗрдВ рдЕрдкрдиреЗ Firebase рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреА рдЦрд╛рд╕ рдЬрд╛рдирдХрд╛рд░реА рд╡рд╛рд▓реЗ рдкреЗрдЬ рдкрд░ рд▓реЗ рдЬрд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛.

рдЕрдкрдирд╛ рдПрдирд╡рд╛рдпрд░рдореЗрдВрдЯ рдФрд░ Firebase CLI рд╕реЗрдЯ рдЕрдк рдХрд░рдирд╛

Node.js

рдлрд╝рдВрдХреНрд╢рди рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ Node.js рдПрдирд╡рд╛рдпрд░рдореЗрдВрдЯ рдХреА рдЬрд╝рд░реВрд░рдд рд╣реЛрдЧреА. рд╕рд╛рде рд╣реА, рдлрд╝рдВрдХреНрд╢рди рдХреЛ Cloud Functions рд░рдирдЯрд╛рдЗрдо рдореЗрдВ рдбрд┐рдкреНрд▓реЙрдп рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ Firebase CLI рдХреА рдЬрд╝рд░реВрд░рдд рд╣реЛрдЧреА. Node.js рдФрд░ npm рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, Node Version Manager рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░рдиреЗ рдХрд╛ рд╕реБрдЭрд╛рд╡ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ.

Node.js рдФрд░ npm рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдЕрдкрдиреА рдкрд╕рдВрдж рдХреЗ рддрд░реАрдХреЗ рд╕реЗ Firebase рд╕реАрдПрд▓рдЖрдИ рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░реЗрдВ. npm рдХреЗ рдЬрд╝рд░рд┐рдП рд╕реАрдПрд▓рдЖрдИ рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдпрд╣ рдХрдорд╛рдВрдб рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░реЗрдВ:

npm install -g firebase-tools

рдЗрд╕рд╕реЗ, рджреБрдирд┐рдпрд╛ рднрд░ рдореЗрдВ рдЙрдкрд▓рдмреНрдз Firebase рдХрдорд╛рдВрдб рдЗрдВрд╕реНрдЯреЙрд▓ рд╣реЛ рдЬрд╛рддреА рд╣реИ. рдЕрдЧрд░ рдирд┐рд░реНрджреЗрд╢ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рддреЛ рдЖрдкрдХреЛ npm рдХреА рдЕрдиреБрдорддрд┐рдпрд╛рдВ рдмрджрд▓рдиреА рдкрдбрд╝ рд╕рдХрддреА рд╣реИрдВ. firebase-tools рдХреЗ рдирдП рд╡рд░реНрд╢рди рдкрд░ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЙрд╕реА рдХрдорд╛рдВрдб рдХреЛ рдлрд┐рд░ рд╕реЗ рдЪрд▓рд╛рдПрдВ.

Python

рдлрд╝рдВрдХреНрд╢рди рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ Python рдПрдирд╡рд╛рдпрд░рдореЗрдВрдЯ рдХреА рдЬрд╝рд░реВрд░рдд рд╣реЛрдЧреА. рд╕рд╛рде рд╣реА, Cloud Functions рд░рдирдЯрд╛рдЗрдо рдкрд░ рдлрд╝рдВрдХреНрд╢рди рдбрд┐рдкреНрд▓реЙрдп рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ Firebase CLI рдХреА рдЬрд╝рд░реВрд░рдд рд╣реЛрдЧреА. рд╣рдорд╛рд░рд╛ рд╕реБрдЭрд╛рд╡ рд╣реИ рдХрд┐ рдбрд┐рдкреЗрдВрдбреЗрдВрд╕реА рдХреЛ рдЕрд▓рдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, venv рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░реЗрдВ. Python рдХреЗ 3.10 рд╕реЗ 3.13 рд╡рд░реНрд╢рди рддрдХ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ. рдЗрдирдореЗрдВ 3.13 рд╡рд░реНрд╢рди рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░рдирдЯрд╛рдЗрдо рд╣реЛрддрд╛ рд╣реИ.

Python рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдЕрдкрдиреЗ рдкрд╕рдВрджреАрджрд╛ рддрд░реАрдХреЗ рд╕реЗ Firebase CLI рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░реЗрдВ.

рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╢реБрд░реВ рдХрд░рдирд╛

Firebase рдХреЗ рд▓рд┐рдП Cloud Functions рдПрд╕рдбреАрдХреЗ рдЯреВрд▓ рдХреЛ рд╢реБрд░реВ рдХрд░рдиреЗ рдкрд░, рдПрдХ рдЦрд╛рд▓реА рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдмрдирддрд╛ рд╣реИ. рдЗрд╕рдореЗрдВ рдбрд┐рдкреЗрдВрдбреЗрдВрд╕реА рдФрд░ рдХреБрдЫ рд╕реИрдВрдкрд▓ рдХреЛрдб рд╣реЛрддрд╛ рд╣реИ. рдЕрдЧрд░ Node.js рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ, рддреЛ рдлрд╝рдВрдХреНрд╢рди рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП TypeScript рдпрд╛ JavaScript рдореЗрдВ рд╕реЗ рдХрд┐рд╕реА рдПрдХ рдХреЛ рдЪреБрдирд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ. рдЗрд╕ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ Cloud Firestore рдХреЛ рднреА рд╢реБрд░реВ рдХрд░рдирд╛ рд╣реЛрдЧрд╛.

рдЕрдкрдиреЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЛ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП:

  1. рдмреНрд░рд╛рдЙрдЬрд╝рд░ рд╕реЗ рд▓реЙрдЧ рдЗрди рдХрд░рдиреЗ рдФрд░ Firebase CLI рдХреА рдкреБрд╖реНрдЯрд┐ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, firebase login рдЪрд▓рд╛рдПрдВ.
  2. рдЕрдкрдиреЗ Firebase рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреА рдбрд╛рдпрд░реЗрдХреНрдЯреНрд░реА рдкрд░ рдЬрд╛рдПрдВ.
  3. firebase init firestore рд░рди рдХрд░реЗрдВ. рдЗрд╕ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдХреЗ рд▓рд┐рдП, Firestore рдХреЗ рдирд┐рдпрдореЛрдВ рдФрд░ рдЗрдВрдбреЗрдХреНрд╕ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рд▓рд┐рдП рдкреНрд░реЙрдореНрдкреНрдЯ рдорд┐рд▓рдиреЗ рдкрд░, рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╡реИрд▓реНрдпреВ рд╕реНрд╡реАрдХрд╛рд░ рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИрдВ. рдЕрдЧрд░ рдЖрдкрдиреЗ рдЗрд╕ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рдЕрдм рддрдХ Cloud Firestore рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ, рддреЛ рдЖрдкрдХреЛ Firestore рдХреЗ рд▓рд┐рдП рд╢реБрд░реБрдЖрддреА рдореЛрдб рдФрд░ рдЬрдЧрд╣ рднреА рдЪреБрдирдиреА рд╣реЛрдЧреА. рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ Cloud Firestore рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рд╢реБрд░реВ рдХрд░рдирд╛ рд▓реЗрдЦ рдореЗрдВ рдмрддрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ.
  4. firebase init functions рд░рди рдХрд░реЗрдВ. рд╕реАрдПрд▓рдЖрдИ, рдЖрдкрд╕реЗ рдореМрдЬреВрджрд╛ рдХреЛрдбрдмреЗрд╕ рдЪреБрдирдиреЗ рдпрд╛ рдирдпрд╛ рдХреЛрдбрдмреЗрд╕ рд╢реБрд░реВ рдХрд░рдиреЗ рдФрд░ рдЙрд╕рдХрд╛ рдирд╛рдо рдбрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣рддрд╛ рд╣реИ. рд╢реБрд░реБрдЖрдд рдореЗрдВ, рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдЬрдЧрд╣ рдкрд░ рдореМрдЬреВрдж рдПрдХ рдХреЛрдбрдмреЗрд╕ рдХрд╛рдлрд╝реА рд╣реЛрддрд╛ рд╣реИ. рд╣рд╛рд▓рд╛рдВрдХрд┐, рдмрд╛рдж рдореЗрдВ рдЬрдм рдЖрдкрдХрд╛ рдХреЛрдбрдмреЗрд╕ рдмрдбрд╝рд╛ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рддрдм рдЖрдкрдХреЛ рдХреЛрдбрдмреЗрд╕ рдореЗрдВ рдлрд╝рдВрдХреНрд╢рди рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░рдиреЗ рдХреА рдЬрд╝рд░реВрд░рдд рдкрдбрд╝ рд╕рдХрддреА рд╣реИ.
  5. рд╕реАрдПрд▓рдЖрдИ рдореЗрдВ, рднрд╛рд╖рд╛ рд╕реЗ рдЬреБрдбрд╝реА рд╕рд╣рд╛рдпрддрд╛ рдХреЗ рд▓рд┐рдП рдпреЗ рд╡рд┐рдХрд▓реНрдк рдорд┐рд▓рддреЗ рд╣реИрдВ:

    • JavaScript
    • TypeScript
    • Python

    рдЗрд╕ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдХреЗ рд▓рд┐рдП, JavaScript рдпрд╛ Python рдЪреБрдиреЗрдВ. TypeScript рдореЗрдВ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП, TypeScript рдХреА рдорджрдж рд╕реЗ рдлрд╝рдВрдХреНрд╢рди рд▓рд┐рдЦрдирд╛ рд▓реЗрдЦ рдкрдврд╝реЗрдВ.

  6. рд╕реАрдПрд▓рдЖрдИ рдХреА рдорджрдж рд╕реЗ, рдбрд┐рдкреЗрдВрдбреЗрдВрд╕реА рдЗрдВрд╕реНрдЯреЙрд▓ рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИрдВ. рдЕрдЧрд░ рдЖрдкрдХреЛ рдбрд┐рдкреЗрдВрдбреЗрдВрд╕реА рдХреЛ рдХрд┐рд╕реА рджреВрд╕рд░реЗ рддрд░реАрдХреЗ рд╕реЗ рдореИрдиреЗрдЬ рдХрд░рдирд╛ рд╣реИ, рддреЛ рдЗрд╕ рдЕрдиреБрд░реЛрдз рдХреЛ рдЕрд╕реНрд╡реАрдХрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ.

рдЗрди рдХрдорд╛рдВрдб рдХреЗ рдкреВрд░рд╛ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж, рдЖрдкрдХреЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХрд╛ рд╕реНрдЯреНрд░рдХреНрдЪрд░ рдРрд╕рд╛ рджрд┐рдЦреЗрдЧрд╛:

Node.js

myproject
+- .firebaserc    # Hidden file that helps you quickly switch between
|                 # projects with `firebase use`
|
+- firebase.json  # Describes properties for your project
|
+- functions/     # Directory containing all your functions code
      |
      +- .eslintrc.json  # Optional file containing rules for JavaScript linting.
      |
      +- package.json  # npm package file describing your Cloud Functions code
      |
      +- index.js      # Main source file for your Cloud Functions code
      |
      +- node_modules/ # Directory where your dependencies (declared in
                        # package.json) are installed

Node.js рдХреЗ рд▓рд┐рдП, рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рджреМрд░рд╛рди рдмрдирд╛рдИ рдЧрдИ package.json рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдПрдХ рдЬрд╝рд░реВрд░реА рдХреБрдВрдЬреА рд╣реЛрддреА рд╣реИ: "engines": {"node": "18"}. рдЗрд╕рд╕реЗ рдлрд╝рдВрдХреНрд╢рди рд▓рд┐рдЦрдиреЗ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдбрд┐рдкреНрд▓реЙрдп рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, Node.js рдХреЗ рд╡рд░реНрд╢рди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ. рдХрд╛рдо рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдЕрдиреНрдп рд╡рд░реНрд╢рди рдЪреБрдиреЗ рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ.

Python

myproject
+- .firebaserc    # Hidden file that helps you quickly switch between
|                 # projects with `firebase use`
|
+- firebase.json  # Describes properties for your project
|
+- functions/     # Directory containing all your functions code
      |
      +- main.py      # Main source file for your Cloud Functions code
      |
      +- requirements.txt  #  List of the project's modules and packages 
      |
      +- venv/ # Directory where your dependencies are installed

рдЬрд╝рд░реВрд░реА рдореЙрдбреНрдпреВрд▓ рдЗрдВрдкреЛрд░реНрдЯ рдХрд░реЗрдВ рдФрд░ рдРрдкреНрд▓рд┐рдХреЗрд╢рди рд╢реБрд░реВ рдХрд░реЗрдВ

рд╕реЗрдЯрдЕрдк рдХреЗ рдЯрд╛рд╕реНрдХ рдкреВрд░реЗ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рд╕реЛрд░реНрд╕ рдбрд╛рдпрд░реЗрдХреНрдЯреНрд░реА рдЦреЛрд▓реА рдЬрд╛ рд╕рдХрддреА рд╣реИ. рд╕рд╛рде рд╣реА, рдпрд╣рд╛рдВ рджрд┐рдП рдЧрдП рд╕реЗрдХреНрд╢рди рдореЗрдВ рдмрддрд╛рдП рдЧрдП рддрд░реАрдХреЗ рд╕реЗ рдХреЛрдб рдЬреЛрдбрд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ. рдЗрд╕ рд╕реИрдВрдкрд▓ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЛ Cloud Functions рдФрд░ Admin SDK рдореЙрдбреНрдпреВрд▓ рдЗрдВрдкреЛрд░реНрдЯ рдХрд░рдиреЗ рд╣реЛрдВрдЧреЗ. рдЕрдкрдиреА рд╕реЛрд░реНрд╕ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ, рдЗрд╕ рддрд░рд╣ рдХреА рд▓рд╛рдЗрдиреЗрдВ рдЬреЛрдбрд╝реЗрдВ:

Node.js

// The Cloud Functions for Firebase SDK to create Cloud Functions and triggers.
const {logger} = require("firebase-functions");
const {onRequest} = require("firebase-functions/v2/https");
const {onDocumentCreated} = require("firebase-functions/v2/firestore");

// The Firebase Admin SDK to access Firestore.
const {initializeApp} = require("firebase-admin/app");
const {getFirestore} = require("firebase-admin/firestore");

initializeApp();

Python

# The Cloud Functions for Firebase SDK to create Cloud Functions and set up triggers.
from firebase_functions import firestore_fn, https_fn

# The Firebase Admin SDK to access Cloud Firestore.
from firebase_admin import initialize_app, firestore
import google.cloud.firestore

app = initialize_app()

рдЗрди рд▓рд╛рдЗрдиреЛрдВ рд╕реЗ рдЬрд╝рд░реВрд░реА рдореЙрдбреНрдпреВрд▓ рд▓реЛрдб рд╣реЛрддреЗ рд╣реИрдВ. рд╕рд╛рде рд╣реА, admin рдРрдкреНрд▓рд┐рдХреЗрд╢рди рдЗрдВрд╕реНрдЯреЗрдВрд╕ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ Cloud Firestore рдмрджрд▓рд╛рд╡ рдХрд┐рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ. Admin SDK рдХреА рд╕реБрд╡рд┐рдзрд╛ рдЬрд╣рд╛рдВ рднреА рдЙрдкрд▓рдмреНрдз рд╣реИ рд╡рд╣рд╛рдВ рдЗрд╕рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ. рдЬреИрд╕реЗ, FCM, Authentication, рдФрд░ Firebase Realtime Database рдХреЗ рд▓рд┐рдП рдпрд╣ рд╕реБрд╡рд┐рдзрд╛ рдЙрдкрд▓рдмреНрдз рд╣реИ. рдпрд╣ Cloud Functions рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░рдХреЗ Firebase рдХреЛ рдЗрдВрдЯрд┐рдЧреНрд░реЗрдЯ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдмреЗрд╣рддрд░реАрди рддрд░реАрдХрд╛ рд╣реИ.

рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╢реБрд░реВ рдХрд░рдиреЗ рдкрд░, Firebase CLI рдЯреВрд▓, Firebase Admin SDK рдФрд░ Firebase SDK рдХреЛ Cloud Functions рдореЙрдбреНрдпреВрд▓ рдХреЗ рд▓рд┐рдП рдЕрдкрдиреЗ-рдЖрдк рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░ рджреЗрддрд╛ рд╣реИ. рдЕрдкрдиреЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рддреАрд╕рд░реЗ рдкрдХреНрд╖ рдХреА рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдЬреЛрдбрд╝рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╝реНрдпрд╛рджрд╛ рдЬрд╛рдирдиреЗ рдХреЗ рд▓рд┐рдП, рдбрд┐рдкреЗрдВрдбреЗрдВрд╕реА рдореИрдиреЗрдЬ рдХрд░рдирд╛ рд▓реЗрдЦ рдкрдврд╝реЗрдВ.

"рдореИрд╕реЗрдЬ рдЬреЛрдбрд╝реЗрдВ" рдлрд╝рдВрдХреНрд╢рди рдЬреЛрдбрд╝рдирд╛

"add message" рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд▓рд┐рдП, рдЕрдкрдиреА рд╕реЛрд░реНрд╕ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдпреЗ рд▓рд╛рдЗрдиреЗрдВ рдЬреЛрдбрд╝реЗрдВ:

Node.js

// Take the text parameter passed to this HTTP endpoint and insert it into
// Firestore under the path /messages/:documentId/original
exports.addmessage = onRequest(async (req, res) => {
  // Grab the text parameter.
  const original = req.query.text;
  // Push the new message into Firestore using the Firebase Admin SDK.
  const writeResult = await getFirestore()
      .collection("messages")
      .add({original: original});
  // Send back a message that we've successfully written the message
  res.json({result: `Message with ID: ${writeResult.id} added.`});
});

Python

@https_fn.on_request()
def addmessage(req: https_fn.Request) -> https_fn.Response:
    """Take the text parameter passed to this HTTP endpoint and insert it into
    a new document in the messages collection."""
    # Grab the text parameter.
    original = req.args.get("text")
    if original is None:
        return https_fn.Response("No text parameter provided", status=400)

    firestore_client: google.cloud.firestore.Client = firestore.client()

    # Push the new message into Cloud Firestore using the Firebase Admin SDK.
    _, doc_ref = firestore_client.collection("messages").add({"original": original})

    # Send back a message that we've successfully written the message
    return https_fn.Response(f"Message with ID {doc_ref.id} added.")

"рдореИрд╕реЗрдЬ рдЬреЛрдбрд╝реЗрдВ" рдлрд╝рдВрдХреНрд╢рди рдПрдХ рдПрдЪрдЯреАрдЯреАрдкреА рдПрдВрдбрдкреЙрдЗрдВрдЯ рд╣реИ. рдПрдВрдбрдкреЙрдЗрдВрдЯ рдкрд░ рдХрд┐рдП рдЧрдП рдХрд┐рд╕реА рднреА рдЕрдиреБрд░реЛрдз рдХреЗ рдирддреАрдЬреЗ рдХреЗ рддреМрд░ рдкрд░, рдЕрдиреБрд░реЛрдз рдФрд░ рдЬрд╡рд╛рдм рдХреЗ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдЖрдкрдХреЗ рдкреНрд▓реИрдЯрдлрд╝реЙрд░реНрдо рдХреЗ рдЕрдиреБрд░реЛрдз рд╣реИрдВрдбрд▓рд░ (onRequest() рдпрд╛ on_request) рдХреЛ рдкрд╛рд╕ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ.

рдПрдЪрдЯреАрдЯреАрдкреА рдлрд╝рдВрдХреНрд╢рди, рд╕рд┐рдВрдХреНрд░реЛрдирд╕ рд╣реЛрддреЗ рд╣реИрдВ. рдпреЗ рдХреЙрд▓ рдХрд┐рдП рдЬрд╛ рд╕рдХрдиреЗ рд╡рд╛рд▓реЗ рдлрд╝рдВрдХреНрд╢рди рдХреА рддрд░рд╣ рд╣реА рд╣реЛрддреЗ рд╣реИрдВ. рдЗрд╕рд▓рд┐рдП, рдЖрдкрдХреЛ рдЬрд╡рд╛рдм рдЬрд┐рддрдиреА рдЬрд▓реНрджреА рд╣реЛ рд╕рдХреЗ рднреЗрдЬрдирд╛ рдЪрд╛рд╣рд┐рдП. рд╕рд╛рде рд╣реА, Cloud Firestore рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░рдХреЗ рдХрд╛рдо рдХреЛ рдмрд╛рдж рдХреЗ рд▓рд┐рдП рд╢реЗрдбреНрдпреВрд▓ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП. "add message" рдПрдЪрдЯреАрдЯреАрдкреА рдлрд╝рдВрдХреНрд╢рди, рдПрдЪрдЯреАрдЯреАрдкреА рдПрдВрдбрдкреЙрдЗрдВрдЯ рдХреЛ рдЯреЗрдХреНрд╕реНрдЯ рд╡реИрд▓реНрдпреВ рдкрд╛рд╕ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЙрд╕реЗ /messages/:documentId/original рдкрд╛рде рдХреЗ рддрд╣рдд рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдбрд╛рд▓рддрд╛ рд╣реИ.

"make uppercase" рдлрд╝рдВрдХреНрд╢рди рдЬреЛрдбрд╝рдирд╛

"make uppercase" рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд▓рд┐рдП, рдЕрдкрдиреА рд╕реЛрд░реНрд╕ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдпреЗ рд▓рд╛рдЗрдиреЗрдВ рдЬреЛрдбрд╝реЗрдВ:

Node.js

// Listens for new messages added to /messages/:documentId/original
// and saves an uppercased version of the message
// to /messages/:documentId/uppercase
exports.makeuppercase = onDocumentCreated("/messages/{documentId}", (event) => {
  // Grab the current value of what was written to Firestore.
  const original = event.data.data().original;

  // Access the parameter `{documentId}` with `event.params`
  logger.log("Uppercasing", event.params.documentId, original);

  const uppercase = original.toUpperCase();

  // You must return a Promise when performing
  // asynchronous tasks inside a function
  // such as writing to Firestore.
  // Setting an 'uppercase' field in Firestore document returns a Promise.
  return event.data.ref.set({uppercase}, {merge: true});
});

Python

@firestore_fn.on_document_created(document="messages/{pushId}")
def makeuppercase(event: firestore_fn.Event[firestore_fn.DocumentSnapshot | None]) -> None:
    """Listens for new documents to be added to /messages. If the document has
    an "original" field, creates an "uppercase" field containg the contents of
    "original" in upper case."""

    # Get the value of "original" if it exists.
    if event.data is None:
        return
    try:
        original = event.data.get("original")
    except KeyError:
        # No "original" field, so do nothing.
        return

    # Set the "uppercase" field.
    print(f"Uppercasing {event.params['pushId']}: {original}")
    upper = original.upper()
    event.data.reference.update({"uppercase": upper})

"make uppercase" рдлрд╝рдВрдХреНрд╢рди рддрдм рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдЬрдм Cloud Firestore рдореЗрдВ рд▓рд┐рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИ. рдЗрд╕рд╕реЗ рдпрд╣ рддрдп рд╣реЛрддрд╛ рд╣реИ рдХрд┐ рдХрд┐рд╕ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдХреЛ рд╕реБрдирд╛ рдЬрд╛рдирд╛ рд╣реИ. рдмреЗрд╣рддрд░ рдкрд░рдлрд╝реЙрд░реНрдореЗрдВрд╕ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдЬрд╝реНрдпрд╛рджрд╛ рд╕реЗ рдЬрд╝реНрдпрд╛рджрд╛ рд╕рдЯреАрдХ рдЬрд╛рдирдХрд╛рд░реА рджреЗрдиреА рдЪрд╛рд╣рд┐рдП.

рдмреНрд░реЗрд╕рд┐рдЬрд╝тАФрдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, {documentId}тАФ"рдкреИрд░рд╛рдореАрдЯрд░" рдХреЛ рдШреЗрд░рддреЗ рд╣реИрдВ. рдпреЗ рд╡рд╛рдЗрд▓реНрдбрдХрд╛рд░реНрдб рд╣реЛрддреЗ рд╣реИрдВ, рдЬреЛ рдХреЙрд▓рдмреИрдХ рдореЗрдВ рдореИрдЪ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдбреЗрдЯрд╛ рджрд┐рдЦрд╛рддреЗ рд╣реИрдВ. Cloud Firestore, рдирдП рдореИрд╕реЗрдЬ рдЬреЛрдбрд╝реЗ рдЬрд╛рдиреЗ рдкрд░ рд╣рд░ рдмрд╛рд░ рдХреЙрд▓рдмреИрдХ рдХреЛ рдЯреНрд░рд┐рдЧрд░ рдХрд░рддрд╛ рд╣реИ.

Node.js рдореЗрдВ, рдЗрд╡реЗрдВрдЯ-рдбреНрд░рд┐рд╡рди рдлрд╝рдВрдХреНрд╢рди рдЬреИрд╕реЗ рдХрд┐ Cloud Firestore рдЗрд╡реЗрдВрдЯ рдПрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рд╣реЛрддреЗ рд╣реИрдВ. рдХреЙрд▓рдмреИрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЛ null, рдХреЛрдИ рдСрдмреНрдЬреЗрдХреНрдЯ рдпрд╛ Promise рдореЗрдВ рд╕реЗ рдХреЛрдИ рдПрдХ рд╡реИрд▓реНрдпреВ рджрд┐рдЦрд╛рдиреА рдЪрд╛рд╣рд┐рдП. рдЕрдЧрд░ рдЖрдкрдиреЗ рдХреЛрдИ рд╡реИрд▓реНрдпреВ рдирд╣реАрдВ рджрд┐рдЦрд╛рдИ рд╣реИ, рддреЛ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рд╕рдордп рдЦрддреНрдо рд╣реЛ рдЬрд╛рдПрдЧрд╛. рдЗрд╕рд╕реЗ рдЧрдбрд╝рдмрдбрд╝реА рдХрд╛ рдкрддрд╛ рдЪрд▓реЗрдЧрд╛ рдФрд░ рдлрд┐рд░ рд╕реЗ рдХреЛрд╢рд┐рд╢ рдХреА рдЬрд╛рдПрдЧреА. рд╕рд┐рдВрдХ, рдПрд╕рд┐рдВрдХ, рдФрд░ рдкреНрд░реЙрдорд┐рд╕ рджреЗрдЦреЗрдВ.

рдЕрдкрдиреЗ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдПрдХреНрдЬрд╝реАрдХреНрдпреВрд╢рди рдХрд╛ рд╕рд┐рдореНрдпреБрд▓реЗрд╢рди рдХрд░рдирд╛

Firebase Local Emulator Suite рдХреА рдорджрдж рд╕реЗ, рдРрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ Firebase рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рдбрд┐рдкреНрд▓реЙрдп рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп, рдЕрдкрдиреА рд▓реЛрдХрд▓ рдорд╢реАрди рдкрд░ рдмрдирд╛рдпрд╛ рдФрд░ рдЯреЗрд╕реНрдЯ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ. рд╣рдорд╛рд░рд╛ рд╕реБрдЭрд╛рд╡ рд╣реИ рдХрд┐ рдбреЗрд╡рд▓рдкрдореЗрдВрдЯ рдХреЗ рджреМрд░рд╛рди, рд╕реНрдерд╛рдиреАрдп рддреМрд░ рдкрд░ рдЯреЗрд╕реНрдЯрд┐рдВрдЧ рдЬрд╝рд░реВрд░ рдХрд░реЗрдВ. рдЗрд╕рдХреА рдПрдХ рд╡рдЬрд╣ рдпрд╣ рд╣реИ рдХрд┐ рдЗрд╕рд╕реЗ рдХреЛрдбрд┐рдВрдЧ рдХреА рдЧрдбрд╝рдмрдбрд╝рд┐рдпреЛрдВ рдХрд╛ рдЬреЛрдЦрд┐рдо рдХрдо рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ. рдЗрди рдЧрдбрд╝рдмрдбрд╝рд┐рдпреЛрдВ рдХреА рд╡рдЬрд╣ рд╕реЗ, рдкреНрд░реЛрдбрдХреНрд╢рди рдПрдирд╡рд╛рдпрд░рдореЗрдВрдЯ рдореЗрдВ рд▓рд╛рдЧрдд рд▓рдЧ рд╕рдХрддреА рд╣реИ. рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЗрдирдлрд╝рд┐рдирд┐рдЯ рд▓реВрдк.

рдЕрдкрдиреЗ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рд╕рд┐рдореНрдпреБрд▓реЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП:

  1. firebase emulators:start рдЪрд▓рд╛рдПрдВ рдФрд░ Emulator Suite UI рдХреЗ рдпреВрдЖрд░рдПрд▓ рдХреЗ рд▓рд┐рдП рдЖрдЙрдЯрдкреБрдЯ рджреЗрдЦреЗрдВ. рдпрд╣ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ localhost:4000 рдкрд░ рд╣реЛрддрд╛ рд╣реИ. рд╣рд╛рд▓рд╛рдБрдХрд┐, рдЗрд╕реЗ рдЖрдкрдХреЗ рдХрдВрдкреНрдпреВрдЯрд░ рдкрд░ рдХрд┐рд╕реА рджреВрд╕рд░реЗ рдкреЛрд░реНрдЯ рдкрд░ рд╣реЛрд╕реНрдЯ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ. Emulator Suite UI рдЦреЛрд▓рдиреЗ рдХреЗ рд▓рд┐рдП, рдЙрд╕ рдпреВрдЖрд░рдПрд▓ рдХреЛ рдЕрдкрдиреЗ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рдбрд╛рд▓реЗрдВ.

  2. рдПрдЪрдЯреАрдЯреАрдкреА рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдпреВрдЖрд░рдПрд▓ рдХреЗ рд▓рд┐рдП, firebase emulators:start рдХрдорд╛рдВрдб рдХрд╛ рдЖрдЙрдЯрдкреБрдЯ рджреЗрдЦреЗрдВ. рдпрд╣ http://localhost:5001/MY_PROJECT/us-central1/addMessage рдЬреИрд╕рд╛ рджрд┐рдЦреЗрдЧрд╛. рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЗрд╕рдореЗрдВ рдпреЗ рдЕрдВрддрд░ рд╣реЛрдВрдЧреЗ:

    1. MY_PROJECT рдХреА рдЬрдЧрд╣ рдЖрдкрдХрд╛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдЖрдИрдбреА рджрд┐рдЦреЗрдЧрд╛.
    2. рдЖрдкрдХреА рд▓реЛрдХрд▓ рдорд╢реАрди рдкрд░ рдкреЛрд░реНрдЯ рдЕрд▓рдЧ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ.
  3. рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдпреВрдЖрд░рдПрд▓ рдХреЗ рдЖрдЦрд┐рд░ рдореЗрдВ рдХреНрд╡реЗрд░реА рд╕реНрдЯреНрд░рд┐рдВрдЧ ?text=uppercaseme рдЬреЛрдбрд╝реЗрдВ. рдпрд╣ рдХреБрдЫ рдРрд╕рд╛ рджрд┐рдЦрдирд╛ рдЪрд╛рд╣рд┐рдП: http://localhost:5001/MY_PROJECT/us-central1/addMessage?text=uppercaseme. рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, "uppercaseme" рдореИрд╕реЗрдЬ рдХреЛ рдЕрдкрдиреА рдкрд╕рдВрдж рдХреЗ рдореБрддрд╛рдмрд┐рдХ рдореИрд╕реЗрдЬ рдореЗрдВ рдмрджрд▓рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ.

  4. рдЕрдкрдиреЗ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рдпреВрдЖрд░рдПрд▓ рдХреЛ рдирдП рдЯреИрдм рдореЗрдВ рдЦреЛрд▓рдХрд░, рдирдпрд╛ рдореИрд╕реЗрдЬ рдмрдирд╛рдПрдВ.

  5. Emulator Suite UI рдореЗрдВ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдЕрд╕рд░ рджреЗрдЦреЗрдВ:

    1. рд▓реЙрдЧ рдЯреИрдм рдореЗрдВ, рдЖрдкрдХреЛ рдирдП рд▓реЙрдЧ рджрд┐рдЦреЗрдВрдЧреЗ. рдЗрдирд╕реЗ рдкрддрд╛ рдЪрд▓реЗрдЧрд╛ рдХрд┐ рдЖрдкрдХреЗ рдПрдЪрдЯреАрдЯреАрдкреА рдлрд╝рдВрдХреНрд╢рди рд╕рд╣реА рддрд░реАрдХреЗ рд╕реЗ рдХрд╛рдо рдХрд░ рд░рд╣реЗ рд╣реИрдВ:

      i functions: Beginning execution of "addMessage"

      i functions: Beginning execution of "makeUppercase"

    2. Firestore рдЯреИрдм рдореЗрдВ, рдЖрдкрдХреЛ рдПрдХ рдРрд╕рд╛ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рджрд┐рдЦреЗрдЧрд╛ рдЬрд┐рд╕рдореЗрдВ рдЖрдкрдХрд╛ рдУрд░рд┐рдЬрдирд▓ рдореИрд╕реЗрдЬ рдФрд░ рдореИрд╕реЗрдЬ рдХрд╛ рдЕрдкрд░рдХреЗрд╕ рд╡рд░реНрд╢рди рд╣реЛрдЧрд╛. рдЕрдЧрд░ рдЖрдкрдХрд╛ рдУрд░рд┐рдЬрдирд▓ рдореИрд╕реЗрдЬ "uppercaseme" рдерд╛, рддреЛ рдЖрдкрдХреЛ "UPPERCASEME" рджрд┐рдЦреЗрдЧрд╛.

рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдкреНрд░реЛрдбрдХреНрд╢рди рдПрдирд╡рд╛рдпрд░рдореЗрдВрдЯ рдореЗрдВ рдбрд┐рдкреНрд▓реЙрдп рдХрд░рдирд╛

рдЬрдм рдЖрдкрдХреЗ рдлрд╝рдВрдХреНрд╢рди, рдПрдореНрдпреБрд▓реЗрдЯрд░ рдореЗрдВ рдЖрдкрдХреА рдЬрд╝рд░реВрд░рдд рдХреЗ рд╣рд┐рд╕рд╛рдм рд╕реЗ рдХрд╛рдо рдХрд░рдиреЗ рд▓рдЧреЗрдВ, рддрдм рдЙрдиреНрд╣реЗрдВ рдкреНрд░реЛрдбрдХреНрд╢рди рдПрдирд╡рд╛рдпрд░рдореЗрдВрдЯ рдореЗрдВ рдбрд┐рдкреНрд▓реЙрдп, рдЯреЗрд╕реНрдЯ, рдФрд░ рдЪрд▓рд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ. рдзреНрдпрд╛рди рд░рдЦреЗрдВ рдХрд┐ рдкреНрд░реЛрдбрдХреНрд╢рди рдореЗрдВ рдбрд┐рдкреНрд▓реЙрдп рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХрд╛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ Blaze рдкреНрд░рд╛рдЗрд╕рд┐рдВрдЧ рдкреНрд▓рд╛рди рдкрд░ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП. Cloud Functions рдХреАрдордд рджреЗрдЦреЗрдВ.

рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЕрдкрдиреЗ рдлрд╝рдВрдХреНрд╢рди рдбрд┐рдкреНрд▓реЙрдп рдХрд░реЗрдВ. рдЗрд╕рдХреЗ рдмрд╛рдж, рдЙрдиреНрд╣реЗрдВ рд▓рд╛рдЧреВ рдХрд░реЗрдВ.

  1. рдЕрдкрдиреЗ рдлрд╝рдВрдХреНрд╢рди рдбрд┐рдкреНрд▓реЙрдп рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдпрд╣ рдХрдорд╛рдВрдб рдЪрд▓рд╛рдПрдВ:

     firebase deploy --only functions
     

    рдЗрд╕ рдХрдорд╛рдВрдб рдХреЛ рдЪрд▓рд╛рдиреЗ рдХреЗ рдмрд╛рдж, Firebase рд╕реАрдПрд▓рдЖрдИ, рдХрд┐рд╕реА рднреА рдПрдЪрдЯреАрдЯреАрдкреА рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдПрдВрдбрдкреЙрдЗрдВрдЯ рдХреЗ рд▓рд┐рдП рдпреВрдЖрд░рдПрд▓ рджрд┐рдЦрд╛рддрд╛ рд╣реИ. рдЖрдкрдХреЛ рдЕрдкрдиреЗ рдЯрд░реНрдорд┐рдирд▓ рдореЗрдВ, рдпрд╣рд╛рдВ рджреА рдЧрдИ рд▓рд╛рдЗрди рдХреА рддрд░рд╣ рдПрдХ рд▓рд╛рдЗрди рджрд┐рдЦреЗрдЧреА:

    Function URL (addMessage): https://us-central1-MY_PROJECT.cloudfunctions.net/addMessage
    

    рдпреВрдЖрд░рдПрд▓ рдореЗрдВ рдЖрдкрдХрд╛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдЖрдИрдбреА рдФрд░ HTTP рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рдХреНрд╖реЗрддреНрд░ рдХреА рдЬрд╛рдирдХрд╛рд░реА рд╢рд╛рдорд┐рд▓ рд╣реЛрддреА рд╣реИ. рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЖрдкрдХреЛ рдЕрднреА рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЪрд┐рдВрддрд╛ рдХрд░рдиреЗ рдХреА рдЬрд╝рд░реВрд░рдд рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдХреБрдЫ рдкреНрд░реЛрдбрдХреНрд╢рди рдПрдЪрдЯреАрдЯреАрдкреА рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд▓рд┐рдП location рддрдп рдХрд░рдирд╛ рдЬрд╝рд░реВрд░реА рд╣реИ, рддрд╛рдХрд┐ рдиреЗрдЯрд╡рд░реНрдХ рдХреА рд▓реЗрдЯреЗрдиреНрд╕реА рдХреЛ рдХрдо рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗ.

    рдЕрдЧрд░ рдЖрдкрдХреЛ рдРрдХреНрд╕реЗрд╕ рд╕реЗ рдЬреБрдбрд╝реА рдЧрдбрд╝рдмрдбрд╝рд┐рдпрд╛рдВ рдорд┐рд▓рддреА рд╣реИрдВ, рдЬреИрд╕реЗ рдХрд┐ "рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЛ рдРрдХреНрд╕реЗрд╕ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреА рдЬрд╛ рд╕рдХрддреА," рддреЛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП рдЙрдкрдирд╛рдо рдХреА рдЬрд╛рдВрдЪ рдХрд░реЗрдВ.

  2. рд╕реАрдПрд▓рдЖрдИ рд╕реЗ рдорд┐рд▓реЗ рдпреВрдЖрд░рдПрд▓ рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░рдХреЗ, рдЯреЗрдХреНрд╕реНрдЯ рдХреНрд╡реЗрд░реА рдкреИрд░рд╛рдореАрдЯрд░ рдЬреЛрдбрд╝реЗрдВ рдФрд░ рдЙрд╕реЗ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рдЦреЛрд▓реЗрдВ:

    https://us-central1-MY_PROJECT.cloudfunctions.net/addMessage?text=uppercasemetoo
    

    рдпрд╣ рдлрд╝рдВрдХреНрд╢рди, рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреЛ рдЙрд╕ рдбреЗрдЯрд╛рдмреЗрд╕ рдХреА рдЬрдЧрд╣ рдкрд░ рдореМрдЬреВрдж Firebase рдХрдВрд╕реЛрд▓ рдкрд░ рд░реАрдбрд╛рдпрд░реЗрдХреНрдЯ рдХрд░рддрд╛ рд╣реИ рдЬрд╣рд╛рдВ рдЯреЗрдХреНрд╕реНрдЯ рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╕реЗрд╡ рдХреА рдЧрдИ рд╣реИ. рдпрд╣ рд░рд╛рдЗрдЯ рдЗрд╡реЗрдВрдЯ, "make uppercase" рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдЯреНрд░рд┐рдЧрд░ рдХрд░рддрд╛ рд╣реИ. рдпрд╣ рдлрд╝рдВрдХреНрд╢рди, рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХрд╛ рдЕрдкрд░рдХреЗрд╕ рд╡рд░реНрд╢рди рд▓рд┐рдЦрддрд╛ рд╣реИ.

рдлрд╝рдВрдХреНрд╢рди рдбрд┐рдкреНрд▓реЙрдп рдФрд░ рдПрдХреНрдЬрд╝реАрдХреНрдпреВрдЯ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, Google Cloud рдХрдВрд╕реЛрд▓ рдореЗрдВ рд▓реЙрдЧ рджреЗрдЦреЗ рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ. рдЕрдЧрд░ рдЖрдкрдХреЛ рдбреЗрд╡рд▓рдкрдореЗрдВрдЯ рдпрд╛ рдкреНрд░реЛрдбрдХреНрд╢рди рдореЗрдВ рдлрд╝рдВрдХреНрд╢рди рдорд┐рдЯрд╛рдиреЗ рд╣реИрдВ, рддреЛ Firebase CLI рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░реЗрдВ.

рдкреНрд░реЛрдбрдХреНрд╢рди рдореЗрдВ, рдлрд╝рдВрдХреНрд╢рди рдХреА рдкрд░рдлрд╝реЙрд░реНрдореЗрдВрд╕ рдХреЛ рдСрдкреНрдЯрд┐рдорд╛рдЗрдЬрд╝ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ. рд╕рд╛рде рд╣реА, рдХрдо рд╕реЗ рдХрдо рдФрд░ рдЬрд╝реНрдпрд╛рджрд╛ рд╕реЗ рдЬрд╝реНрдпрд╛рджрд╛ рдЗрдВрд╕реНрдЯреЗрдВрд╕ рд╕реЗрдЯ рдХрд░рдХреЗ рд▓рд╛рдЧрдд рдХреЛ рдХрдВрдЯреНрд░реЛрд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ. рдЗрди рд░рдирдЯрд╛рдЗрдо рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╝реНрдпрд╛рджрд╛ рдЬрд╛рдирдиреЗ рдХреЗ рд▓рд┐рдП, рд╕реНрдХреЗрд▓рд┐рдВрдЧ рдХреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдХрдВрдЯреНрд░реЛрд▓ рдХрд░рдирд╛ рд▓реЗрдЦ рдкрдврд╝реЗрдВ.

рдЕрдЧрд▓реЗ рдЪрд░рдг

рдЗрд╕ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдореЗрдВ, Cloud Functions рдХреЗ рд▓рд┐рдП рдлрд╝рдВрдХреНрд╢рди рдореИрдиреЗрдЬ рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╝реНрдпрд╛рджрд╛ рдЬрд╛рдиреЗрдВ. рд╕рд╛рде рд╣реА, Cloud Functions рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд╕рднреА рдЗрд╡реЗрдВрдЯ рдЯрд╛рдЗрдк рдХреЛ рд╣реИрдВрдбрд▓ рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рднреА рдЬрд╛рдиреЗрдВ.

Cloud Functions рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╝реНрдпрд╛рджрд╛ рдЬрд╛рдирдиреЗ рдХреЗ рд▓рд┐рдП, рдпрд╣ рднреА рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ: