اجرای توابع به‌صورت محلی

واسط خط فرمان Firebase شامل شبیه‌ساز Cloud Functions است که می‌تواند انواع تابع زیر را شبیه‌سازی کند:

  • عملکردهای HTTPS
  • توابع قابل‌فراخوانی
  • توابع صف تکلیف
  • توابع پس‌زمینه‌ای که از Firebase Authentication، Realtime Database، Cloud Firestore، Cloud Storage، هشدارهای Firebase پشتیبانی‌شده، و Cloud Pub/Sub راه‌اندازی شده‌اند.

می‌توانید توابع را به‌صورت محلی اجرا کنید تا قبل‌از استقرار در تولید، آن‌ها را آزمایش کنید.

نصب کردن «واسط خط فرمان Firebase»

برای استفاده از شبیه‌ساز Cloud Functions، ابتدا «واسط خط فرمان Firebase» را نصب کنید:

npm install -g firebase-tools

برای استفاده از شبیه‌ساز محلی، Cloud Functions شما باید به موارد زیر وابسته باشد:

  • firebase-admin نسخه 8.0.0 یا بالاتر.
  • firebase-functions نسخه 3.0.0 یا بالاتر.

راه‌اندازی اطلاعات اعتباری سرپرست (اختیاری)

اگر می‌خواهید آزمایش‌های توابع شما ازطریق کیت توسعه نرم‌افزار Firebase Admin با Google API یا دیگر Firebase API تعامل داشته باشند، ممکن است لازم باشد اعتبارنامه‌های سرپرست را راه‌اندازی کنید.

  • راه‌اندازهای Cloud Firestore و Realtime Database ازقبل اعتبارنامه کافی دارند و به راه‌اندازی اضافی نیاز ندارند.
  • همه میاناهای برنامه‌سازی کاربردی دیگر، ازجمله میاناهای برنامه‌سازی کاربردی Firebase مانند Authentication و FCM یا میاناهای برنامه‌سازی کاربردی Google مانند Cloud Translation یا Cloud Speech، به مراحل راه‌اندازی شرح‌داده‌شده در این بخش نیاز دارند. این موضوع هم برای پوسته Cloud Functions و هم برای firebase emulators:start صدق می‌کند.

برای راه‌اندازی اطلاعات کاربری سرپرست برای عملکردهای شبیه‌سازی‌شده:

  1. قاب «حساب‌های سرویس» کنسول Google Cloud را باز کنید.
  2. مطمئن شوید حساب سرویس پیش‌فرض App Engine انتخاب شده باشد و از منوِ گزینه‌ها در سمت چپ برای انتخاب ایجاد کلید استفاده کنید.
  3. وقتی از شما خواسته شد، JSON را برای نوع کلید انتخاب کنید و روی ایجاد کلیک کنید.
  4. اعتبارنامه‌های پیش‌فرض Google را طوری تنظیم کنید که به کلید بارگیری‌شده اشاره کنند:

    Unix

    export GOOGLE_APPLICATION_CREDENTIALS="path/to/key.json"
    firebase emulators:start
    

    پنجره

    set GOOGLE_APPLICATION_CREDENTIALS=path\to\key.json
    firebase emulators:start
    

پس‌از تکمیل این مراحل، آزمایش‌های توابع شما می‌توانند بااستفاده از Admin SDK به Firebase و Google API دسترسی پیدا کنند. برای مثال، هنگام آزمایش راه‌انداز Authentication، تابع شبیه‌سازی‌شده می‌تواند admin.auth().getUserByEmail(email) را فراخوانی کند.

راه‌اندازی پیکربندی توابع (اختیاری)

اگر از متغیرهای پیکربندی توابع سفارشی استفاده می‌کنید، ابتدا فرمان را اجرا کنید تا پیکربندی سفارشی‌تان را در محیط محلی‌تان دریافت کنید (این فرمان را در دایرکتوری functions اجرا کنید):

firebase functions:config:get > .runtimeconfig.json
# If using Windows PowerShell, replace the above with:
# firebase functions:config:get | ac .runtimeconfig.json

اجرای مجموعه شبیه‌ساز

برای اجرای شبیه‌ساز Cloud Functions، از فرمان emulators:start استفاده کنید:

firebase emulators:start

فرمان emulators:start شبیه‌سازها را برای Cloud Functions، Cloud Firestore، «پایگاه داده بی‌درنگ»، و «میزبانی Firebase» براساس محصولاتی که در پروژه محلی‌تان بااستفاده از firebase init مقداردهی اولیه کرده‌اید راه‌اندازی می‌کند. اگر می‌خواهید شبیه‌ساز خاصی را راه‌اندازی کنید، از پرچم --only استفاده کنید:

firebase emulators:start --only functions

اگر می‌خواهید مجموعه آزمون یا اسکریپت آزمایشی را پس‌از شروع شبیه‌سازها اجرا کنید، از فرمان emulators:exec استفاده کنید:

firebase emulators:exec "./my-test.sh"

پس‌از راه‌اندازی، شبیه‌ساز گزارش‌ها را از توابع شما به پنجره ترمینال که در آن اجرا می‌شود جاری‌سازی می‌کند. این ابزار همه خروجی‌های دستورهای console.log()، console.info()، console.error()، و console.warn() را در داخل تابع‌های شما نمایش می‌دهد.

توجه داشته باشید که خروجی شبیه‌ساز به‌طور پیش‌فرض استقرار توابع را در منطقه خاصی (us-central1) شبیه‌سازی می‌کند که ممکن است با منطقه پیش‌فرض استقرار تولید واقعی مطابقت نداشته باشد. برای اطلاعات بیشتر درباره مناطق، به مکان‌های Cloud Functions مراجعه کنید.

برنامه‌تان را برای صحبت با شبیه‌سازها آماده کنید

برای آماده‌سازی برنامه‌تان جهت تعامل با شبیه‌سازها، ممکن است لازم باشد پیکربندی‌های بیشتری انجام دهید.

برنامه‌تان را برای توابع قابل‌فراخوانی آماده کنید

اگر فعالیت‌های نمونه اولیه و آزمایشی شما شامل توابع قابل‌فراخوانی پس‌نگر است، تعامل با شبیه‌ساز Cloud Functions for Firebase را به‌این‌صورت پیکربندی کنید:

Kotlin
// 10.0.2.2 is the special IP address to connect to the 'localhost' of
// the host computer from an Android emulator.
val functions = Firebase.functions
functions.useEmulator("10.0.2.2", 5001)
Java
// 10.0.2.2 is the special IP address to connect to the 'localhost' of
// the host computer from an Android emulator.
FirebaseFunctions functions = FirebaseFunctions.getInstance();
functions.useEmulator("10.0.2.2", 5001);
Swift
Functions.functions().useEmulator(withHost: "localhost", port: 5001)
Unity
FirebaseFunctions functions = FirebaseFunctions.DefaultInstance;
// Connects to the Functions Emulator running on port 5001
functions.UseFunctionsEmulator("http://127.0.0.1:5001");

Web

import { getApp } from "firebase/app";
import { getFunctions, connectFunctionsEmulator } from "firebase/functions";

const functions = getFunctions(getApp());
connectFunctionsEmulator(functions, "127.0.0.1", 5001);

Web

firebase.functions().useEmulator("127.0.0.1", 5001);

ابزارسازی برنامه برای شبیه‌سازی کارکردهای HTTPS

هر تابع HTTPS در کد شما از شبیه‌ساز محلی بااستفاده از قالب نشانی وب زیر ارائه خواهد شد:

http://$HOST:$PORT/$PROJECT/$REGION/$NAME

برای مثال، تابع ساده helloWorld با درگاه میزبان و منطقه پیش‌فرض در نشانی زیر ارائه می‌شود:

https://localhost:5001/$PROJECT/us-central1/helloWorld

ابزارسازی برنامه برای شبیه‌سازی کارکردهای صف تکلیف

شبیه‌ساز به‌طور خودکار صف‌های تکلیف شبیه‌سازی‌شده را براساس تعاریف راه‌انداز راه‌اندازی می‌کند، و «کیت توسعه نرم‌افزار سرپرست» درخواست‌های صف‌بندی‌شده را به شبیه‌ساز هدایت می‌کند اگر تشخیص دهد که ازطریق متغیر محیطی CLOUD_TASKS_EMULATOR_HOST درحال اجرا است.

توجه داشته باشید که سیستم ارسال استفاده‌شده در تولید پیچیده‌تر از سیستم پیاده‌سازی‌شده در شبیه‌ساز است، بنابراین نباید انتظار داشته باشید که رفتار شبیه‌سازی‌شده دقیقاً محیط‌های تولید را منعکس کند. پارامترهای موجود در شبیه‌ساز، حد بالایی برای نرخی که تکالیف ارسال و دوباره امتحان می‌شوند ارائه می‌دهد.

ابزارسازی برنامه برای شبیه‌سازی توابع راه‌اندازی‌شده در پس‌زمینه

شبیه‌ساز Cloud Functions از توابع راه‌اندازی‌شده در پس‌زمینه از منابع زیر پشتیبانی می‌کند:

  • شبیه‌ساز Realtime Database
  • شبیه‌ساز Cloud Firestore
  • شبیه‌ساز Authentication
  • شبیه‌ساز Pub/Sub
  • شبیه‌ساز هشدارهای Firebase

برای راه‌اندازی رویدادهای پس‌زمینه، منابع پس‌زمینه را بااستفاده از Emulator Suite UI یا با متصل کردن برنامه یا کد آزمایشی به شبیه‌سازها بااستفاده از کیت توسعه نرم‌افزار برای پلاتفرم خود اصلاح کنید.

گرداننده‌های آزمایشی برای رویدادهای سفارشی منتشرشده توسط «افزونه‌ها»

برای توابعی که برای رسیدگی به رویدادهای سفارشی Firebase Extensions با Cloud Functions نسخه ۲ پیاده‌سازی می‌کنید، شبیه‌ساز Cloud Functions با شبیه‌ساز Eventarc جفت می‌شود تا از راه‌اندازهای Eventarc پشتیبانی کند.

برای آزمایش کردن گرداننده‌های رویداد سفارشی برای افزونه‌هایی که رویدادها را منتشر می‌کنند، باید شبیه‌سازهای Cloud Functions و Eventarc را نصب کنید.

اگر شبیه‌ساز Eventarc درحال اجرا باشد، زمان اجرای Cloud Functions متغیر محیطی EVENTARC_EMULATOR را در فرایند فعلی روی localhost:9299 تنظیم می‌کند. وقتی متغیر محیطی EVENTARC_EMULATOR تنظیم شود، Firebase Admin SDK به‌طور خودکار به شبیه‌ساز Eventarc متصل می‌شود. می‌توانید درگاه پیش‌فرض را همان‌طور که در بخش پیکربندی Local Emulator Suite توضیح داده شده است تغییر دهید.

وقتی متغیرهای محیطی به‌درستی پیکربندی شده باشند، Firebase Admin SDK به‌طور خودکار رویدادها را به شبیه‌ساز Eventarc ارسال می‌کند. به‌نوبه خود، شبیه‌ساز Eventarc با شبیه‌ساز Cloud Functions تماس می‌گیرد تا هرگونه گرداننده ثبت‌شده را راه‌اندازی کند.

برای جزئیات مربوط به اجرای گرداننده، می‌توانید گزارش‌های Functions را در Emulator Suite UI بررسی کنید.

تعامل با سرویس‌های دیگر

مجموعه شبیه‌ساز شامل چندین شبیه‌ساز است که امکان آزمایش تعاملات بین محصولات را فراهم می‌کند.

Cloud Firestore

اگر توابعی دارید که از Firebase Admin SDK برای نوشتن در Cloud Firestore استفاده می‌کنند، این نوشتن‌ها به شبیه‌ساز Cloud Firestore ارسال خواهند شد (اگر درحال اجرا باشد). اگر توابع بیشتری توسط آن نوشتن‌ها راه‌اندازی شود، در شبیه‌ساز Cloud Functions اجرا خواهند شد.

Cloud Storage

اگر توابعی دارید که از Firebase Admin SDK (نسخه ۹.۷.۰ یا بالاتر) برای نوشتن در Cloud Storage استفاده می‌کنند، این نوشتن‌ها به شبیه‌ساز Cloud Storage ارسال خواهند شد اگر درحال اجرا باشد. اگر توابع بیشتری با آن نوشتن‌ها راه‌اندازی شود، آن‌ها در شبیه‌ساز Cloud Functions اجرا خواهند شد.

Firebase Authentication

اگر توابعی دارید که از Firebase Admin SDK (نسخه ۹.۳.۰ یا بالاتر) برای نوشتن در Firebase Authentication استفاده می‌کنند، این نوشتن‌ها به شبیه‌ساز Auth ارسال خواهند شد اگر درحال اجرا باشد. اگر توابع بیشتری توسط آن نوشتن‌ها راه‌اندازی شود، در شبیه‌ساز Cloud Functions اجرا خواهند شد.

میزبانی Firebase

اگر از Cloud Functions برای تولید محتوای پویا برای Firebase Hosting استفاده می‌کنید، firebase emulators:start از عملکردهای HTTP محلی شما به‌عنوان پراکسی برای میزبانی استفاده می‌کند.

هشدارهای Firebase

در هر پروژه‌ای که حداقل یک راه‌انداز هشدار Firebase پشتیبانی‌شده داشته باشد، رابط کاربری شبیه‌ساز شامل برگه FireAlerts است. برای شبیه‌سازی راه‌انداز هشدار:

  1. برگه هشدارهای آتش‌سوزی را باز کنید. این برگه منو کرکره‌ای‌ای را نمایش می‌دهد که با انواع هشدار دارای راه‌انداز مرتبط با آن‌ها پر شده است (برای مثال، اگر راه‌انداز onNewFatalIssuePublished داشته باشید، crashlytics.newFatalIssue نمایش داده می‌شود).
  2. نوع هشدار را انتخاب کنید. فرم به‌طور خودکار با مقادیر پیش‌فرض پر می‌شود که می‌توانید آن‌ها را ویرایش کنید. می‌توانید فیلدهای رویداد را ویرایش کنید (سایر اطلاعات رویداد هشدار یا استنباط‌شده است، یا مقادیر ساختگی است، یا به‌طور تصادفی تولید شده است).
  3. ارسال هشدار را انتخاب کنید تا هشدار مصنوعی به شبیه‌ساز توابع ارسال شود، با ثبت وقایع دردسترس در هشدارها در کنسول Firebase (و همچنین در گزارش‌ها).

مراحل بعدی

برای مشاهده نمونه کاملی از استفاده از مجموعه شبیه‌ساز Firebase، به نمونه شروع سریع آزمایش مراجعه کنید.