了解 2023 年 Google I/O 大会上介绍的 Firebase 亮点。了解详情

प्रारंभ करें: अपने पहले कार्यों को लिखें, परीक्षण करें और परिनियोजित करें


क्लाउड फ़ंक्शंस के साथ आरंभ करने के लिए, इस ट्यूटोरियल के माध्यम से काम करने का प्रयास करें, जो आवश्यक सेटअप कार्यों से शुरू होता है और दो संबंधित कार्यों को बनाने, परीक्षण करने और तैनात करने के माध्यम से काम करता है:

  • एक "संदेश जोड़ें" फ़ंक्शन जो एक URL को उजागर करता है जो एक पाठ मान को स्वीकार करता है और इसे क्लाउड फायरस्टोर पर लिखता है।
  • एक "अपरकेस बनाएं" फ़ंक्शन जो Cloud Firestore राइट पर ट्रिगर होता है और टेक्स्ट को अपरकेस में बदल देता है।

हमने इस नमूने के लिए आंशिक रूप से क्लाउड फायरस्टोर और HTTP-ट्रिगर जावास्क्रिप्ट कार्यों को चुना है क्योंकि इन पृष्ठभूमि ट्रिगर्स को फायरबेस स्थानीय एमुलेटर सूट के माध्यम से पूरी तरह से परीक्षण किया जा सकता है। यह टूलसेट रीयलटाइम डेटाबेस, पबसब, प्रामाणिक और HTTP कॉल करने योग्य ट्रिगर्स का भी समर्थन करता है। अन्य प्रकार के बैकग्राउंड ट्रिगर्स जैसे कि रिमोट कॉन्फिग, टेस्टलैब, और एनालिटिक्स ट्रिगर्स सभी का इस पृष्ठ में वर्णित नहीं किए गए टूलसेट का उपयोग करके अंतःक्रियात्मक रूप से परीक्षण किया जा सकता है।

इस ट्यूटोरियल के निम्नलिखित खंड नमूने के निर्माण, परीक्षण और परिनियोजन के लिए आवश्यक चरणों का विवरण देते हैं। यदि आप केवल कोड चलाना चाहते हैं और उसका निरीक्षण करना चाहते हैं, तो संपूर्ण नमूना कोड की समीक्षा पर जाएं।

एक फायरबेस प्रोजेक्ट बनाएं

  1. Firebase कंसोल में, प्रोजेक्ट जोड़ें पर क्लिक करें।

    • किसी मौजूदा Google क्लाउड प्रोजेक्ट में Firebase संसाधन जोड़ने के लिए, उसका प्रोजेक्ट नाम दर्ज करें या ड्रॉपडाउन मेनू से उसका चयन करें।

    • एक नया प्रोजेक्ट बनाने के लिए, वांछित प्रोजेक्ट का नाम दर्ज करें। आप प्रोजेक्ट नाम के नीचे प्रदर्शित प्रोजेक्ट आईडी को वैकल्पिक रूप से संपादित भी कर सकते हैं।

  2. संकेत मिलने पर, Firebase शर्तों की समीक्षा करें और उन्हें स्वीकार करें.

  3. जारी रखें पर क्लिक करें।

  4. (वैकल्पिक) अपने प्रोजेक्ट के लिए Google Analytics सेट अप करें, जो आपको निम्न में से किसी भी Firebase उत्पाद का उपयोग करने का एक इष्टतम अनुभव प्रदान करने में सक्षम बनाता है:

    या तो किसी मौजूदा Google Analytics खाते का चयन करें या एक नया खाता बनाने के लिए।

    यदि आप एक नया खाता बनाते हैं, तो अपना Analytics रिपोर्टिंग स्थान चुनें, फिर अपने प्रोजेक्ट के लिए डेटा साझाकरण सेटिंग और Google Analytics शर्तें स्वीकार करें।

  5. यदि आप किसी मौजूदा Google क्लाउड प्रोजेक्ट का उपयोग कर रहे हैं, तो प्रोजेक्ट बनाएं (या Firebase जोड़ें ) पर क्लिक करें।

फायरबेस स्वचालित रूप से आपके फायरबेस प्रोजेक्ट के लिए संसाधनों का प्रावधान करता है। जब प्रक्रिया पूरी हो जाती है, तो आपको Firebase कंसोल में आपके Firebase प्रोजेक्ट के अवलोकन पृष्ठ पर ले जाया जाएगा।

Node.js और Firebase CLI सेट अप करें

कार्यों को लिखने के लिए आपको Node.js परिवेश की आवश्यकता होगी, और क्लाउड फ़ंक्शंस रनटाइम में फ़ंक्शंस को परिनियोजित करने के लिए आपको Firebase CLI की आवश्यकता होगी। Node.js और npm को स्थापित करने के लिए, नोड संस्करण प्रबंधक की अनुशंसा की जाती है।

एक बार आपके पास Node.js और npm स्थापित हो जाने के बाद, अपने पसंदीदा तरीके से Firebase CLI स्थापित करें । सीएलआई को एनपीएम के माध्यम से स्थापित करने के लिए, उपयोग करें:

npm install -g firebase-tools

यह विश्व स्तर पर उपलब्ध फायरबेस कमांड को स्थापित करता है। यदि आदेश विफल रहता है, तो आपको npm अनुमतियाँ बदलने की आवश्यकता हो सकती है। firebase-tools के नवीनतम संस्करण में अद्यतन करने के लिए, उसी कमांड को फिर से चलाएँ।

अपने प्रोजेक्ट को इनिशियलाइज़ करें

जब आप क्लाउड फ़ंक्शंस के लिए फायरबेस एसडीके को इनिशियलाइज़ करते हैं, तो आप एक खाली प्रोजेक्ट बनाते हैं जिसमें निर्भरताएँ और कुछ न्यूनतम नमूना कोड होते हैं, और आप फ़ंक्शंस बनाने के लिए टाइपस्क्रिप्ट या जावास्क्रिप्ट चुनते हैं। इस ट्यूटोरियल के प्रयोजनों के लिए, आपको क्लाउड फायरस्टोर को इनिशियलाइज़ करने की भी आवश्यकता होगी।

अपने प्रोजेक्ट को इनिशियलाइज़ करने के लिए:

  1. ब्राउज़र के माध्यम से लॉग इन करने के लिए firebase login चलाएँ और फायरबेस सीएलआई को प्रमाणित करें।
  2. अपनी फायरबेस परियोजना निर्देशिका पर जाएं।
  3. firebase init firestore चलाएं। इस ट्यूटोरियल के लिए, फायरस्टार नियमों और इंडेक्स फ़ाइलों के लिए संकेत दिए जाने पर आप डिफ़ॉल्ट मानों को स्वीकार कर सकते हैं। यदि आपने अभी तक इस प्रोजेक्ट में Cloud Firestore का उपयोग नहीं किया है, तो आपको Firestore के लिए स्टार्टिंग मोड और स्थान का चयन करना होगा, जैसा कि Get Start with Cloud Firestore में बताया गया है।
  4. firebase init functions चलाएं। सीएलआई आपको एक मौजूदा कोडबेस चुनने या आरंभ करने और एक नया नाम देने के लिए प्रेरित करता है। जब आप अभी शुरुआत कर रहे हों, तो डिफ़ॉल्ट स्थान में एक ही कोडबेस पर्याप्त होता है; बाद में, जैसे-जैसे आपका कार्यान्वयन विस्तृत होता है, हो सकता है कि आप फ़ंक्शन को कोडबेस में व्यवस्थित करना चाहें।
  5. सीएलआई आपको भाषा समर्थन के लिए दो विकल्प देता है:

    इस ट्यूटोरियल के लिए, जावास्क्रिप्ट चुनें।

  6. सीएलआई आपको एनपीएम के साथ निर्भरताओं को स्थापित करने का विकल्प देता है। यदि आप किसी अन्य तरीके से निर्भरताओं को प्रबंधित करना चाहते हैं तो इसे अस्वीकार करना सुरक्षित है, हालांकि यदि आप अस्वीकार करते हैं तो आपको अपने कार्यों का अनुकरण या परिनियोजन करने से पहले npm install चलाने की आवश्यकता होगी।

इन आदेशों के सफलतापूर्वक पूर्ण होने के बाद, आपकी परियोजना संरचना इस तरह दिखती है:

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

प्रारंभिकरण के दौरान बनाई गई package.json फ़ाइल में एक महत्वपूर्ण कुंजी है: "engines": {"node": "16"} यह कार्यों को लिखने और परिनियोजित करने के लिए आपके Node.js संस्करण को निर्दिष्ट करता है। आप अन्य समर्थित संस्करणों का चयन कर सकते हैं।

आवश्यक मॉड्यूल आयात करें और एक ऐप को इनिशियलाइज़ करें

सेटअप कार्यों को पूरा करने के बाद, आप स्रोत निर्देशिका खोल सकते हैं और कोड जोड़ना शुरू कर सकते हैं जैसा कि निम्नलिखित अनुभागों में बताया गया है। इस नमूने के लिए, आपकी परियोजना को नोड require कथनों का उपयोग करके क्लाउड फ़ंक्शंस और व्यवस्थापक SDK मॉड्यूल आयात करना होगा। अपनी index.js फ़ाइल में निम्न पंक्तियां जोड़ें:

// The Cloud Functions for Firebase SDK to create Cloud Functions and set up triggers.
const functions = require("firebase-functions");

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

ये लाइनें firebase-functions और firebase-admin मॉड्यूल को लोड करती हैं, और एक admin ऐप इंस्टेंस को इनिशियलाइज़ करती हैं जिससे क्लाउड फायरस्टोर में बदलाव किए जा सकते हैं। जहाँ भी व्यवस्थापक SDK समर्थन उपलब्ध है, जैसा कि FCM, प्रमाणीकरण और Firebase रीयलटाइम डेटाबेस के लिए है, यह क्लाउड फ़ंक्शंस का उपयोग करके Firebase को एकीकृत करने का एक शक्तिशाली तरीका प्रदान करता है।

जब आप अपने प्रोजेक्ट को प्रारंभ करते हैं तो फायरबेस सीएलआई स्वचालित रूप से क्लाउड फ़ंक्शंस नोड मॉड्यूल के लिए फायरबेस और फायरबेस एसडीके स्थापित करता है। अपने प्रोजेक्ट में तृतीय पक्ष लाइब्रेरी जोड़ने के लिए, आप package.json संशोधित कर सकते हैं और npm install चला सकते हैं। अधिक जानकारी के लिए, हैंडल डिपेंडेंसी देखें।

addMessage() फ़ंक्शन जोड़ें

addMessage() फ़ंक्शन के लिए, इन पंक्तियों को index.js में जोड़ें:

// Take the text parameter passed to this HTTP endpoint and insert it into
// Firestore under the path /messages/:documentId/original
exports.addMessage = functions.https.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 admin
    .firestore()
    .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.` });
});

addMessage() फ़ंक्शन एक HTTP समापन बिंदु है। समापन बिंदु के लिए किसी भी अनुरोध के परिणामस्वरूप ExpressJS- शैली अनुरोध और प्रतिक्रिया ऑब्जेक्ट onRequest() कॉलबैक में पारित हो जाते हैं।

HTTP फ़ंक्शंस सिंक्रोनस ( कॉल करने योग्य फ़ंक्शंस के समान) हैं, इसलिए आपको जितनी जल्दी हो सके प्रतिक्रिया भेजनी चाहिए और क्लाउड फायरस्टार का उपयोग करके काम को स्थगित करना चाहिए। addMessage() HTTP फ़ंक्शन HTTP एंडपॉइंट के लिए टेक्स्ट मान पास करता है और इसे /messages/:documentId/original पथ के अंतर्गत डेटाबेस में सम्मिलित करता है।

makeUppercase() फ़ंक्शन जोड़ें

makeUppercase() फ़ंक्शन के लिए, इन पंक्तियों को index.js में जोड़ें:

// Listens for new messages added to /messages/:documentId/original and creates an
// uppercase version of the message to /messages/:documentId/uppercase
exports.makeUppercase = functions.firestore
  .document("/messages/{documentId}")
  .onCreate((snap, context) => {
    // Grab the current value of what was written to Firestore.
    const original = snap.data().original;

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

    const uppercase = original.toUpperCase();

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

makeUppercase() फ़ंक्शन तब निष्पादित होता है जब Cloud Firestore को लिखा जाता है। ref.set फ़ंक्शन दस्तावेज़ को सुनने के लिए परिभाषित करता है। प्रदर्शन कारणों से, आपको यथासंभव विशिष्ट होना चाहिए।

ब्रेसिज़—उदाहरण के लिए, {documentId} —चारों ओर "पैरामीटर," वाइल्डकार्ड जो कॉलबैक में उनके मिलान किए गए डेटा को प्रदर्शित करते हैं।

जब भी नए संदेश जोड़े जाते हैं, क्लाउड फायरस्टोर onCreate() कॉलबैक को ट्रिगर करता है।

इवेंट-संचालित फ़ंक्शन जैसे कि क्लाउड फायरस्टोर ईवेंट एसिंक्रोनस हैं। कॉलबैक फ़ंक्शन या तो एक null , एक वस्तु, या एक वादा वापस करना चाहिए। यदि आप कुछ भी वापस नहीं करते हैं, तो फ़ंक्शन टाइम आउट हो जाता है, एक त्रुटि का संकेत देता है, और पुनः प्रयास किया जाता है। सिंक, एसिंक्स और प्रॉमिस देखें।

अपने कार्यों के निष्पादन का अनुकरण करें

फायरबेस लोकल एमुलेटर सूट आपको फायरबेस प्रोजेक्ट पर तैनात करने के बजाय अपनी स्थानीय मशीन पर ऐप बनाने और परीक्षण करने की अनुमति देता है। विकास के दौरान स्थानीय परीक्षण की जोरदार अनुशंसा की जाती है, आंशिक रूप से क्योंकि यह कोडिंग त्रुटियों से जोखिम को कम करता है जो संभावित रूप से उत्पादन वातावरण में खर्च कर सकता है (उदाहरण के लिए, एक अनंत लूप)।

अपने कार्यों का अनुकरण करने के लिए:

  1. firebase emulators:start और जांचें। यह लोकलहोस्ट के लिए डिफॉल्ट करता है: 4000 , लेकिन आपकी मशीन पर एक अलग पोर्ट पर होस्ट किया जा सकता है। एम्यूलेटर सूट यूआई खोलने के लिए उस यूआरएल को अपने ब्राउज़र में दर्ज करें।

  2. HTTP फ़ंक्शन addMessage() के यूआरएल के लिए firebase emulators:start कमांड के आउटपुट की जांच करें। यह http://localhost:5001/MY_PROJECT/us-central1/addMessage के समान दिखेगा, इसके अलावा:

    1. MY_PROJECT आपकी प्रोजेक्ट आईडी से बदल दिया जाएगा।
    2. आपकी स्थानीय मशीन पर पोर्ट अलग हो सकता है।
  3. फ़ंक्शन के URL के अंत में क्वेरी स्ट्रिंग ?text=uppercaseme जोड़ें। यह कुछ इस तरह दिखना चाहिए: http://localhost:5001/MY_PROJECT/us-central1/addMessage?text=uppercaseme वैकल्पिक रूप से, आप संदेश "अपरकेसमे" को एक कस्टम संदेश में बदल सकते हैं।

  4. अपने ब्राउज़र में एक नए टैब में URL खोलकर एक नया संदेश बनाएँ।

  5. एम्यूलेटर सूट यूआई में कार्यों के प्रभाव देखें:

    1. लॉग्स टैब में, आपको नए लॉग देखने चाहिए जो यह दर्शाता है कि फ़ंक्शन addMessage() और makeUppercase() चलाए गए हैं:

      i functions: Beginning execution of "addMessage"

      i functions: Beginning execution of "makeUppercase"

    2. फायरस्टोर टैब में, आपको अपने मूल संदेश के साथ-साथ अपने संदेश के अपरकेस संस्करण वाला एक दस्तावेज़ देखना चाहिए (यदि यह मूल रूप से "अपरकेसमे" था, तो आपको "अपरकेसमे" दिखाई देगा)।

उत्पादन वातावरण में कार्यों को तैनात करें

एक बार जब आपके कार्य एम्यूलेटर में वांछित के रूप में काम कर रहे हैं, तो आप उत्पादन वातावरण में उन्हें तैनात करने, परीक्षण करने और चलाने के लिए आगे बढ़ सकते हैं। ध्यान रखें कि अनुशंसित Node.js 14 रनटाइम वातावरण में परिनियोजित करने के लिए, आपकी परियोजना ब्लेज़ मूल्य निर्धारण योजना पर होनी चाहिए। क्लाउड फ़ंक्शंस मूल्य निर्धारण देखें।

ट्यूटोरियल को पूरा करने के लिए, अपने कार्यों को तैनात करें और फिर makeUppercase() ट्रिगर करने के लिए addMessage() निष्पादित करें।

  1. अपने कार्यों को तैनात करने के लिए यह कमांड चलाएँ:

     firebase deploy --only functions
     

    आपके द्वारा इस कमांड को चलाने के बाद, Firebase CLI किसी भी HTTP फ़ंक्शन एंडपॉइंट के लिए URL को आउटपुट करता है। अपने टर्मिनल में, आपको निम्न की तरह एक रेखा दिखाई देनी चाहिए:

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

    URL में आपकी प्रोजेक्ट आईडी के साथ-साथ HTTP फ़ंक्शन के लिए एक क्षेत्र भी शामिल है। हालांकि अब आपको इसके बारे में चिंता करने की आवश्यकता नहीं है, कुछ उत्पादन HTTP कार्यों को नेटवर्क विलंबता को कम करने के लिए एक स्थान निर्दिष्ट करना चाहिए।

    यदि आप "प्रोजेक्ट तक पहुंच को अधिकृत करने में असमर्थ" जैसी पहुंच त्रुटियों का सामना करते हैं, तो अपने प्रोजेक्ट अलियासिंग की जांच करने का प्रयास करें।

  2. CLI द्वारा addMessage() URL आउटपुट का उपयोग करके, एक टेक्स्ट क्वेरी पैरामीटर जोड़ें, और इसे एक ब्राउज़र में खोलें:

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

    फ़ंक्शन निष्पादित करता है और डेटाबेस स्थान पर फायरबेस कंसोल पर ब्राउज़र को पुनर्निर्देशित करता है जहां पाठ स्ट्रिंग संग्रहीत है। यह राइट इवेंट makeUppercase() को ट्रिगर करता है, जो स्ट्रिंग के अपरकेस संस्करण को लिखता है।

कार्यों को परिनियोजित और निष्पादित करने के बाद, आप Google क्लाउड कंसोल में लॉग देख सकते हैं। यदि आपको विकास या उत्पादन में कार्यों को हटाने की आवश्यकता है, तो फायरबेस सीएलआई का उपयोग करें।

उत्पादन में, आप चलाने के लिए न्यूनतम और अधिकतम संख्या में इंस्टेंस सेट करके फ़ंक्शन प्रदर्शन और नियंत्रण लागत को अनुकूलित करना चाह सकते हैं। इन रनटाइम विकल्पों पर अधिक जानकारी के लिए नियंत्रण स्केलिंग व्यवहार देखें।

पूर्ण नमूना कोड की समीक्षा करें

यहां पूर्ण किए गए functions/index.js हैं जिनमें फ़ंक्शन addMessage() और makeUppercase() शामिल हैं। ये फ़ंक्शन आपको एक HTTP एंडपॉइंट के लिए एक पैरामीटर पास करने की अनुमति देते हैं जो क्लाउड फायरस्टोर के लिए एक मान लिखता है, और फिर स्ट्रिंग में सभी वर्णों को अपरकेस करके इसे बदल देता है।

// The Cloud Functions for Firebase SDK to create Cloud Functions and set up triggers.
const functions = require("firebase-functions");

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

// Take the text parameter passed to this HTTP endpoint and insert it into
// Firestore under the path /messages/:documentId/original
exports.addMessage = functions.https.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 admin
    .firestore()
    .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 creates an
// uppercase version of the message to /messages/:documentId/uppercase
exports.makeUppercase = functions.firestore
  .document("/messages/{documentId}")
  .onCreate((snap, context) => {
    // Grab the current value of what was written to Firestore.
    const original = snap.data().original;

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

    const uppercase = original.toUpperCase();

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

अगले कदम

इस दस्तावेज़ में, आप क्लाउड फ़ंक्शंस के कार्यों को प्रबंधित करने के तरीके के साथ-साथ क्लाउड फ़ंक्शंस द्वारा समर्थित सभी ईवेंट प्रकारों को प्रबंधित करने के तरीके के बारे में अधिक जान सकते हैं।

क्लाउड फ़ंक्शंस के बारे में अधिक जानने के लिए, आप निम्न कार्य भी कर सकते हैं: