Save the date - Google I/O returns May 18-20. Register to get the most out of the digital experience: Build your schedule, reserve space, participate in Q&As, earn Google Developer profile badges, and more. Register now
इस पेज का अनुवाद Cloud Translation API से किया गया है.
Switch to English

फायरबेस के लिए क्लाउड फ़ंक्शंस

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

3b1284f5144b54f6.png

आप क्या सीखेंगे

  • फायरबेस एसडीके का उपयोग करके Google क्लाउड फ़ंक्शंस बनाएं।
  • ट्रिगर क्लाउड कार्य, प्रामाणिक, क्लाउड स्टोरेज और क्लाउड फायरस्टोर घटनाओं पर आधारित है।
  • अपने वेब ऐप में फायरबेस क्लाउड मैसेजिंग सपोर्ट जोड़ें।

आपको किस चीज़ की ज़रूरत पड़ेगी

  • एक क्रेडिट कार्ड। Firebase के लिए क्लाउड फ़ंक्शंस के लिए Firebase Blaze योजना की आवश्यकता होती है, जिसका अर्थ है कि आपको क्रेडिट कार्ड का उपयोग करके अपने Firebase प्रोजेक्ट पर बिलिंग सक्षम करनी होगी।
  • जैसे अपनी पसंद के आईडीई / पाठ संपादक WebStorm , एटम या उदात्त
  • NodeJS v8 स्थापित के साथ शेल कमांड चलाने के लिए एक टर्मिनल।
  • क्रोम जैसे ब्राउज़र।
  • नमूना कोड। इसके लिए अगला चरण देखें।

कमांड लाइन से GitHub रिपॉजिटरी को क्लोन करें:

git clone https://github.com/firebase/friendlychat

स्टार्टर ऐप आयात करें

अपनी IDE का उपयोग करके, खोलें या आयात करें android_studio_folder.png नमूना कोड निर्देशिका से cloud-functions-start निर्देशिका। इस निर्देशिका में कोडेलैब के लिए शुरुआती कोड होता है जिसमें पूरी तरह कार्यात्मक चैट वेब ऐप शामिल होता है।

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

Firebase कंसोल में Add Project पर क्लिक करें और इसे FriendlyChat कहें।

प्रोजेक्ट बनाएँ पर क्लिक करें

ब्लेज़ प्लान में अपग्रेड करें

फायरबेस के लिए क्लाउड फ़ंक्शंस का उपयोग करने के लिए आपको ब्लेज़ बिलिंग योजना के लिए अपने फायरबेस प्रोजेक्ट को अपग्रेड करना होगा। इसके लिए आपको अपने Google क्लाउड खाते में एक क्रेडिट कार्ड या अन्य बिलिंग साधन जोड़ना होगा।

ब्लेज़ प्लान पर उन सभी फायरबेस परियोजनाओं को अभी भी क्लाउड फ़ंक्शंस के लिए मुफ्त उपयोग कोटा तक पहुंच प्राप्त है। इस कोडलैब में उल्लिखित चरण मुक्त स्तरीय उपयोग सीमाओं के भीतर आएंगे। हालाँकि आप क्लाउड स्टोरेज से छोटे चार्ज ( लगभग $ 0.03 ) देखेंगे जो कि आपके क्लाउड फ़ंक्शंस को बनाने के लिए छवियों का निर्माण करने के लिए उपयोग किया जाता है।

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

Google प्रमाण सक्षम करें

उपयोगकर्ताओं को एप्लिकेशन में साइन-इन करने के लिए हम Google को उपयोग करेंगे जिसे सक्षम करने की आवश्यकता है।

Firebase कंसोल में डेवलप सेक्शन> ऑथेंटिकेशन > SIGN IN METHOD टैब खोलें (या वहां जाने के लिए यहां क्लिक करें ) आपको Google साइन-इन प्रदाता को सक्षम करने और SAVE पर क्लिक करने की आवश्यकता है। यह उपयोगकर्ताओं को अपने Google खातों के साथ वेब ऐप में साइन-इन करने की अनुमति देगा।

फ्रेंडली चैट में अपने ऐप का सार्वजनिक सामना करने वाले नाम को सेट करने के लिए स्वतंत्र महसूस करें:

8290061806aacb46.png

क्लाउड स्टोरेज सक्षम करें

पिक्स अपलोड करने के लिए ऐप क्लाउड स्टोरेज का इस्तेमाल करता है। अपने फायरबेस प्रोजेक्ट पर क्लाउड स्टोरेज को सक्षम करने के लिए स्टोरेज सेक्शन पर जाएं और गेट स्टार्टेड बटन पर क्लिक करें। जब आप सुरक्षा नियमों के बारे में अस्वीकरण प्राप्त करते हैं तो इसे क्लिक करें।

842ad84821323ef5.png

फायरबेस कमांड लाइन इंटरफ़ेस (सीएलआई) आपको स्थानीय स्तर पर वेब ऐप की सेवा और अपने वेब ऐप और क्लाउड फ़ंक्शंस को तैनात करने की अनुमति देगा।

CLI स्थापित या अपग्रेड करने के लिए निम्नलिखित npm कमांड चलाएँ:

02 बी 7580 ए 90

यह सत्यापित करने के लिए कि CLI सही ढंग से स्थापित किया गया है, एक कंसोल खोलें और चलाएँ:

firebase --version

सुनिश्चित करें कि फायरबेस सीएलआई का संस्करण 4.0.0 से ऊपर है, ताकि इसमें क्लाउड फ़ंक्शंस के लिए आवश्यक सभी नवीनतम सुविधाएँ हों। यदि नहीं, तो ऊपर दिखाए अनुसार अपग्रेड करने के लिए npm install -g firebase-tools चलाएं।

फायरबेस सीएलआई को चालू करके अधिकृत करें:

firebase login

सुनिश्चित करें कि आप cloud-functions-start डायरेक्टरी में हैं फिर अपने फायरबेस प्रोजेक्ट का उपयोग करने के लिए फायरबेस सीएलआई स्थापित करें:

firebase use --add

फिर अपनी प्रोजेक्ट आईडी चुनें और निर्देशों का पालन करें। जब संकेत दिया जाता है, तो आप उदाहरण के लिए कोई भी उपनाम चुन सकते हैं, जैसे codelab

अब जब आपने अपनी परियोजना को आयात और कॉन्फ़िगर कर लिया है तो आप पहली बार वेब ऐप चलाने के लिए तैयार हैं। cloud-functions-start फ़ोल्डर में एक कंसोल खोलें और firebase deploy --except functions यह केवल firebase deploy --except functions होस्टिंग के लिए वेब ऐप को तैनात करेगा:

firebase deploy --except functions

यह कंसोल आउटपुट है जिसे आपको देखना चाहिए:

i deploying database, storage, hosting
✔  database: rules ready to deploy.
i  storage: checking rules for compilation errors...
✔  storage: rules file compiled successfully
i  hosting: preparing ./ directory for upload...
✔  hosting: ./ folder uploaded successfully
✔ storage: rules file compiled successfully
✔ hosting: 8 files uploaded successfully
i starting release process (may take several minutes)...

✔ Deploy complete!

Project Console: https://console.firebase.google.com/project/friendlychat-1234/overview
Hosting URL: https://friendlychat-1234.firebaseapp.com

वेब ऐप खोलें

अंतिम पंक्ति में होस्टिंग URL प्रदर्शित होना चाहिए इस URL से अब वेब ऐप को सेव किया जाना चाहिए जो फॉर्म https: // <project-id> .firebaseapp.com का होना चाहिए। खोलो इसे। आपको चैट ऐप की कार्यप्रणाली यूआई देखनी चाहिए।

GOOGLE बटन के साथ साइन-इन का उपयोग करके ऐप में साइन-इन करें और कुछ संदेश जोड़ने और चित्र पोस्ट करने के लिए स्वतंत्र महसूस करें:

3b1284f5144b54f6.png

यदि आप किसी नए ब्राउज़र पर पहली बार साइन-इन करते हैं, तो सुनिश्चित करें कि संकेत दिए जाने पर आप सूचनाएं देने की अनुमति देते हैं: 8b9d0c66dc36153d.png

बाद में आपको सूचनाओं को सक्षम करने की आवश्यकता होगी।

यदि आपने गलती से ब्लॉक किया है तो आप क्रोम ओम्निबार में URL के बाईं ओर button सिक्योर बटन पर क्लिक करके और इस साइट पर हमेशा नोटिफ़िकेशन की अनुमति दें को चुनकर इस सेटिंग को बदल सकते हैं:

e926868b0546ed71.png

अब हम क्लाउड फ़ंक्शंस के लिए फायरबेस एसडीके का उपयोग करके कुछ कार्यक्षमता जोड़ेंगे।

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

क्लाउड फ़ंक्शंस के लिए फायरबेस एसडीके का उपयोग करते समय, आपका फ़ंक्शंस कोड functions डायरेक्टरी (डिफ़ॉल्ट रूप से) के नीचे रहेगा। आपका फ़ंक्शंस कोड भी एक Node.js ऐप है और इसलिए एक package.json ज़रूरत है जो आपके ऐप और सूचियों की निर्भरता के बारे में कुछ जानकारी देता है।

आपके लिए इसे आसान बनाने के लिए हमने पहले ही functions/index.js फ़ाइल बना ली है जहाँ आपका कोड जाएगा। आगे बढ़ने से पहले इस फ़ाइल का निरीक्षण करने के लिए स्वतंत्र महसूस करें।

cd functions
ls

यदि आप Node.js से परिचित नहीं हैं, तो कोडेलैब जारी रखने से पहले इसके बारे में अधिक जानने में मदद मिलेगी।

Package.json फ़ाइल पहले से ही दो आवश्यक निर्भरताओं को सूचीबद्ध करती है: क्लाउड फ़ंक्शंस के लिए Firebase SDK और Firebase व्यवस्थापक SDK । उन्हें स्थानीय रूप से चलाने के लिए npm install functions फ़ोल्डर से npm install :

098 बी 3 डी 1470

आइए अब index.js फ़ाइल पर एक नज़र डालें:

index.js

/**
 * Copyright 2017 Google Inc. All Rights Reserved.
 * ...
 */

// TODO(DEVELOPER): Import the Cloud Functions for Firebase and the Firebase Admin modules here.

// TODO(DEVELOPER): Write the addWelcomeMessage Function here.

// TODO(DEVELOPER): Write the blurImages Function here.

// TODO(DEVELOPER): Write the sendNotification Function here.

हम पहले आवश्यक मॉड्यूल आयात करेंगे और फिर TODOs के स्थान पर तीन कार्य लिखेंगे। पहले चलो आवश्यक नोड मॉड्यूल आयात करते हैं।

इस कोडलैब के दौरान दो मॉड्यूल की आवश्यकता होगी, फायरबेस firebase-functions मॉड्यूल हमें क्लाउड फ़ंक्शंस ट्रिगर नियमों को लिखने की अनुमति देता है, जबकि firebase-admin मॉड्यूल हमें व्यवस्थापक एक्सेस के साथ सर्वर पर फायरबेस प्लेटफॉर्म का उपयोग करने की अनुमति देता है, उदाहरण के लिए लिखने के लिए। क्लाउड फायरस्टार या एफसीएम सूचनाएं भेजें।

index.js फ़ाइल में, पहले TODO को निम्नलिखित के साथ बदलें:

index.js

/**
 * Copyright 2017 Google Inc. All Rights Reserved.
 * ...
 */

// Import the Firebase SDK for Google Cloud Functions.
const functions = require('firebase-functions');
// Import and initialize the Firebase Admin SDK.
const admin = require('firebase-admin');
admin.initializeApp();

// TODO(DEVELOPER): Write the addWelcomeMessage Function here.

// TODO(DEVELOPER): Write the blurImages Function here.

// TODO(DEVELOPER): Write the sendNotification Function here.

फायरबेस व्यवस्थापक एसडीके को क्लाउड फ़ंक्शंस वातावरण या अन्य Google क्लाउड प्लेटफ़ॉर्म कंटेनर पर तैनात किए जाने पर स्वचालित रूप से कॉन्फ़िगर किया जा सकता है। जब हम admin.initializeApp(); कॉल करते हैं, तो यह ऊपर होता है admin.initializeApp();

अब आइए एक फ़ंक्शन जोड़ें जो आपके चैट ऐप में पहली बार उपयोगकर्ता द्वारा साइन इन करने पर चलता है और हम उपयोगकर्ता का स्वागत करने के लिए चैट संदेश जोड़ेंगे।

संदेश संरचना चैट करें

फ्रेंडशिपचैट चैट फीड में पोस्ट किए गए संदेश क्लाउड फायरस्टार में संग्रहीत किए जाते हैं। आइए एक संदेश के लिए हमारे द्वारा उपयोग की जाने वाली डेटा संरचना पर एक नज़र डालें। ऐसा करने के लिए, "हैलो वर्ल्ड" पढ़ने वाले चैट पर एक नया संदेश पोस्ट करें:

11f5a676fbb1a69a.png

यह इस प्रकार दिखाई देना चाहिए:

fe6d1c020d0744cf.png

अपने फायरबेस ऐप कंसोल में डेवलपमेंट सेक्शन के तहत डेटाबेस पर क्लिक करें। आपको संदेश संग्रह और एक दस्तावेज देखना चाहिए जिसमें आपके द्वारा लिखा गया संदेश हो:

442c9c10b5e2b245.png

जैसा कि आप देख सकते हैं, क्लाउड फायरस्टार में चैट संदेशों को name साथ एक दस्तावेज के रूप में संग्रहित किया जाता है, messages संग्रह में जोड़े messages profilePicUrl , text और timestamp विशेषताओं को जोड़ा जाता है।

स्वागत संदेश जोड़ रहे हैं

पहला क्लाउड फ़ंक्शन एक संदेश जोड़ता है जो नए उपयोगकर्ताओं का चैट में स्वागत करता है। इसके लिए हम ट्रिगर functions.auth().onCreate उपयोग कर सकते हैं functions.auth().onCreate जो हर बार आपके साइन-इन ऐप के उपयोगकर्ता द्वारा साइन-इन करने के बाद फ़ंक्शन चलाता है। addWelcomeMessages फ़ंक्शन को अपनी index.js फ़ाइल में जोड़ें:

index.js

// Adds a message that welcomes new users into the chat.
exports.addWelcomeMessages = functions.auth.user().onCreate(async (user) => {
  console.log('A new user signed in for the first time.');
  const fullName = user.displayName || 'Anonymous';

  // Saves the new welcome message into the database
  // which then displays it in the FriendlyChat clients.
  await admin.firestore().collection('messages').add({
    name: 'Firebase Bot',
    profilePicUrl: '/images/firebase-logo.png', // Firebase logo
    text: `${fullName} signed in for the first time! Welcome!`,
    timestamp: admin.firestore.FieldValue.serverTimestamp(),
  });
  console.log('Welcome message written to database.');
});

इस फ़ंक्शन को विशेष exports ऑब्जेक्ट में जोड़ना वर्तमान फ़ाइल के बाहर फ़ंक्शन को सुलभ बनाने का नोड का तरीका है और क्लाउड फ़ंक्शंस के लिए आवश्यक है।

उपरोक्त फ़ंक्शन में हम चैट संदेशों की सूची में "फायरबेस बॉट" द्वारा पोस्ट किया गया एक नया स्वागत संदेश जोड़ रहे हैं। हम क्लाउड फायरस्टार में messages संग्रह पर add पद्धति का उपयोग करके ऐसा कर रहे हैं, जहां चैट के संदेश संग्रहीत हैं।

चूंकि यह एक अतुल्यकालिक ऑपरेशन है, इसलिए हमें यह संकेत देने के लिए वादा करना होगा कि क्लाउड फायरस्टार लेखन समाप्त हो गया है, ताकि कार्य निष्पादन से बहुत जल्दी बाहर न निकलें।

समारोह तैनात करें

आपके द्वारा इसे तैनात करने के बाद ही फ़ंक्शन सक्रिय होगा। कमांड लाइन पर firebase deploy --only functions :

firebase deploy --only functions

यह कंसोल आउटपुट है जिसे आपको देखना चाहिए:

i  deploying functions
i  functions: ensuring necessary APIs are enabled...
⚠  functions: missing necessary APIs. Enabling now...
i  env: ensuring necessary APIs are enabled...
⚠  env: missing necessary APIs. Enabling now...
i  functions: waiting for APIs to activate...
i  env: waiting for APIs to activate...
✔  env: all necessary APIs are enabled
✔  functions: all necessary APIs are enabled
i  functions: preparing functions directory for uploading...
i  functions: packaged functions (X.XX KB) for uploading
✔  functions: functions folder uploaded successfully
i  starting release process (may take several minutes)...
i  functions: creating function addWelcomeMessages...
✔  functions[addWelcomeMessages]: Successful create operation. 
✔  functions: all functions deployed successfully!

✔  Deploy complete!

Project Console: https://console.firebase.google.com/project/friendlypchat-1234/overview

फ़ंक्शन का परीक्षण करें

एक बार फ़ंक्शन को सफलतापूर्वक तैनात करने के बाद आपको पहली बार साइन इन करने वाले उपयोगकर्ता की आवश्यकता होगी।

  1. होस्टिंग URL ( https://<project-id>.firebaseapp.com ) का उपयोग करके अपने ब्राउज़र में अपना ऐप खोलें।
  2. नए उपयोगकर्ता के साथ, साइन इन बटन का उपयोग करके पहली बार अपने ऐप में साइन इन करें।

262535d1b1223c65.png

  1. आपके द्वारा साइन इन करने के बाद, एक स्वागत संदेश अपने आप प्रदर्शित होना चाहिए:

1c70e0d64b23525b.png

उपयोगकर्ता चैट में सभी प्रकार की छवियां अपलोड कर सकते हैं, और आक्रामक छवियों को मॉडरेट करना हमेशा महत्वपूर्ण होता है, खासकर सार्वजनिक सामाजिक प्लेटफार्मों में। FriendlyChat में जो चित्र चैट में प्रकाशित किए जा रहे हैं वे Google क्लाउड स्टोरेज में संग्रहीत हैं।

क्लाउड फ़ंक्शंस के साथ, आप functions.storage().onFinalize ट्रिगर का उपयोग करके नई छवि अपलोड का पता लगा सकते हैं। यह हर बार क्लाउड स्टोरेज में एक नई फ़ाइल अपलोड या संशोधित होने पर चलेगा।

छवियों को मॉडरेट करने के लिए हम निम्नलिखित प्रक्रिया से गुजरेंगे:

  1. क्लाउड विजन एपीआई का उपयोग करके जांचें कि क्या छवि को वयस्क या हिंसक के रूप में चिह्नित किया गया है
  2. यदि छवि को ध्वजांकित किया गया है, तो इसे चल रहे कार्य उदाहरण पर डाउनलोड करें
  3. ImageMagick का उपयोग करके छवि को धुंधला करें
  4. धुंधली छवि को क्लाउड स्टोरेज पर अपलोड करें

क्लाउड विजन एपीआई सक्षम करें

चूंकि हम इस फ़ंक्शन में Google क्लाउड विज़न एपीआई का उपयोग कर रहे हैं, इसलिए आपको अपने फायरबेस प्रोजेक्ट पर एपीआई को सक्षम करना होगा। इस लिंक का पालन करें , अपने फायरबेस प्रोजेक्ट का चयन करें और एपीआई को सक्षम करें:

5c77fee51ec5de49.png

निर्भरता स्थापित करें

छवियों को मॉडरेट करने के लिए हमें कुछ Node.js पैकेजों की आवश्यकता होगी:

  • Node.js के लिए Google क्लाउड विज़न क्लाइंट लाइब्रेरी: अनुचित चित्रों का पता लगाने के लिए क्लाउड विज़न एपीआई के माध्यम से छवि को चलाने के लिए Google-क्लाउड / विज़न
  • Node.js लाइब्रेरी हमें प्रक्रियाओं को चलाने की अनुमति देती है: ImageMagick कमांड-लाइन टूल के बाद से ImageMagick को चलाने के लिए चाइल्ड-प्रोसेस-वादा सभी फंक्शंस इंस्टेंसेस पर पहले से इंस्टॉल आता है।

अपने क्लाउड फ़ंक्शंस ऐप में इन दो पैकेजों को स्थापित करने के लिए, निम्नलिखित npm install --save कमांड npm install --save । सुनिश्चित करें कि आप यह functions निर्देशिका से करते functions

npm install --save @google-cloud/vision@0.12.0 child-process-promise@2.2.1

यह दो पैकेजों को स्थानीय रूप से स्थापित करेगा और उन्हें आपके package.json में घोषित निर्भरता के रूप में जोड़ेगा। package.json फ़ाइल।

आयात और कॉन्फ़िगर निर्भरताएँ

स्थापित की गई दो निर्भरताएँ और कुछ Node.js कोर मॉड्यूल ( path , os और fs ) को आयात करने के लिए, जिनकी हमें इस अनुभाग में आवश्यकता होगी, निम्नलिखित पंक्तियों को अपनी index.js फ़ाइल के शीर्ष पर जोड़ें:

index.js

const Vision = require('@google-cloud/vision');
const vision = new Vision();
const spawn = require('child-process-promise').spawn;

const path = require('path');
const os = require('os');
const fs = require('fs');

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

अनुचित छवियों का पता लगाना

आप functions.storage.onChange का उपयोग कर रहे होंगे ।storage.onChange क्लाउड फ़ंक्शंस ट्रिगर जो आपके कोड को चलाता है जैसे ही फ़ाइल या फ़ोल्डर क्लाउड स्टोरेज बाल्टी में बनाया या संशोधित किया जाता है। blurOffensiveImages फ़ंक्शन को अपनी index.js फ़ाइल में जोड़ें:

index.js

// Checks if uploaded images are flagged as Adult or Violence and if so blurs them.
exports.blurOffensiveImages = functions.runWith({memory: '2GB'}).storage.object().onFinalize(
    async (object) => {
      const image = {
        source: {imageUri: `gs://${object.bucket}/${object.name}`},
      };

      // Check the image content using the Cloud Vision API.
      const batchAnnotateImagesResponse = await vision.safeSearchDetection(image);
      const safeSearchResult = batchAnnotateImagesResponse[0].safeSearchAnnotation;
      const Likelihood = Vision.types.Likelihood;
      if (Likelihood[safeSearchResult.adult] >= Likelihood.LIKELY ||
          Likelihood[safeSearchResult.violence] >= Likelihood.LIKELY) {
        console.log('The image', object.name, 'has been detected as inappropriate.');
        return blurImage(object.name);
      }
      console.log('The image', object.name, 'has been detected as OK.');
    });

ध्यान दें कि हमने क्लाउड फ़ंक्शंस उदाहरण के कुछ कॉन्फ़िगरेशन को जोड़ा है जो .runWith({memory: '2GB'}) साथ फ़ंक्शन को .runWith({memory: '2GB'}) , हम अनुरोध कर रहे हैं कि उदाहरण डिफ़ॉल्ट के बजाय 2GB मेमोरी प्राप्त करता है, यह इस रूप में मदद करेगा समारोह स्मृति गहन है।

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

छवि को धूमिल करना

अपनी index.js फ़ाइल में निम्नलिखित blurImage फ़ंक्शन जोड़ें:

index.js

// Blurs the given image located in the given bucket using ImageMagick.
async function blurImage(filePath) {
  const tempLocalFile = path.join(os.tmpdir(), path.basename(filePath));
  const messageId = filePath.split(path.sep)[1];
  const bucket = admin.storage().bucket();

  // Download file from bucket.
  await bucket.file(filePath).download({destination: tempLocalFile});
  console.log('Image has been downloaded to', tempLocalFile);
  // Blur the image using ImageMagick.
  await spawn('convert', [tempLocalFile, '-channel', 'RGBA', '-blur', '0x24', tempLocalFile]);
  console.log('Image has been blurred');
  // Uploading the Blurred image back into the bucket.
  await bucket.upload(tempLocalFile, {destination: filePath});
  console.log('Blurred image has been uploaded to', filePath);
  // Deleting the local file to free up disk space.
  fs.unlinkSync(tempLocalFile);
  console.log('Deleted local file.');
  // Indicate that the message has been moderated.
  await admin.firestore().collection('messages').doc(messageId).update({moderated: true});
  console.log('Marked the image as moderated in the database.');
}

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

समारोह तैनात करें

आपके द्वारा इसे तैनात करने के बाद ही फ़ंक्शन सक्रिय होगा। कमांड लाइन पर firebase deploy --only functions :

firebase deploy --only functions

यह कंसोल आउटपुट है जिसे आपको देखना चाहिए:

i  deploying functions
i  functions: ensuring necessary APIs are enabled...
✔  functions: all necessary APIs are enabled
i  functions: preparing functions directory for uploading...
i  functions: packaged functions (X.XX KB) for uploading
✔  functions: functions folder uploaded successfully
i  starting release process (may take several minutes)...
i  functions: updating function addWelcomeMessages...
i  functions: creating function blurOffensiveImages...
✔  functions[addWelcomeMessages]: Successful update operation.
✔  functions[blurOffensiveImages]: Successful create operation.
✔  functions: all functions deployed successfully!

✔  Deploy complete!

Project Console: https://console.firebase.google.com/project/friendlychat-1234/overview

फ़ंक्शन का परीक्षण करें

एक बार समारोह सफलतापूर्वक तैनात होने के बाद:

  1. होस्टिंग URL ( https://<project-id>.firebaseapp.com ) का उपयोग करके अपने ब्राउज़र में अपना ऐप खोलें।
  2. एक बार साइन इन करने के बाद ऐप एक छवि अपलोड करता है: 4db9fdab56703e4a.png
  3. अपलोड करने के लिए अपनी सर्वश्रेष्ठ आक्रामक छवि चुनें (या आप इस मांस खाने वाले ज़ोंबी का उपयोग कर सकते हैं!) और कुछ क्षणों के बाद आपको अपनी पोस्ट को छवि के धुंधले संस्करण के साथ ताज़ा करना चाहिए: 83dd904fbaf97d2b.png

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

फायरबेस क्लाउड मैसेजिंग (एफसीएम) का उपयोग करके आप अपने उपयोगकर्ताओं को क्रॉस प्लेटफॉर्म और विश्वसनीय तरीके से सूचनाएं भेज सकते हैं। किसी उपयोगकर्ता को सूचना भेजने के लिए आपको उनके FCM उपकरण टोकन की आवश्यकता होती है। जब हम पहले से ही किसी नए ब्राउज़र या डिवाइस पर ऐप खोलते हैं, तो चैट वेब ऐप जो हम पहले से इस्तेमाल कर रहे हैं, वे उपयोगकर्ताओं से डिवाइस टोकन एकत्र करते हैं। ये टोकन fcmTokens संग्रह में क्लाउड fcmTokens में संग्रहीत हैं।

यदि आप सीखना चाहते हैं कि FCM डिवाइस टोकन को वेब ऐप पर कैसे प्राप्त करें तो आप Firebase Web Codelab के माध्यम से जा सकते हैं।

सूचनाएं भेजें

यह पता लगाने के लिए कि जब नए संदेश पोस्ट किए जाते हैं, तो आप functions.firestore.document().onCreate का उपयोग कर रहे होंगे functions.firestore.document().onCreate क्लाउड फ़ंक्शंस ट्रिगर करते हैं जो आपके कोड को तब चलाता है जब एक नया ऑब्जेक्ट क्लाउड फायरस्टार के दिए गए पथ पर बनाया जाता है। sendNotifications फ़ंक्शन को अपनी index.js फ़ाइल में जोड़ें:

index.js

02 बी डी 25 सी 860

ऊपर फ़ंक्शन में हम क्लाउड admin.messaging().sendToDevice डेटाबेस से सभी उपयोगकर्ताओं के डिवाइस टोकन इकट्ठा कर रहे हैं और इनमें से प्रत्येक के लिए एक सूचना भेज admin.messaging().sendToDevice हैं।

टोकन को साफ करें

अंत में हम उन टोकन को हटाना चाहते हैं जो अब मान्य नहीं हैं। यह तब होता है जब उपयोगकर्ता द्वारा प्राप्त किया गया टोकन अब ब्राउज़र या डिवाइस द्वारा उपयोग नहीं किया जा रहा है। उदाहरण के लिए, ऐसा तब होता है जब उपयोगकर्ता ने अपने ब्राउज़र सत्र के लिए अधिसूचना अनुमति रद्द कर दी है। ऐसा करने के लिए अपनी index.js फ़ाइल में निम्न cleanupTokens फ़ंक्शन जोड़ें:

index.js

// Cleans up the tokens that are no longer valid.
function cleanupTokens(response, tokens) {
 // For each notification we check if there was an error.
 const tokensDelete = [];
 response.results.forEach((result, index) => {
   const error = result.error;
   if (error) {
     console.error('Failure sending notification to', tokens[index], error);
     // Cleanup the tokens who are not registered anymore.
     if (error.code === 'messaging/invalid-registration-token' ||
         error.code === 'messaging/registration-token-not-registered') {
       const deleteTask = admin.firestore().collection('fcmTokens').doc(tokens[index]).delete();
       tokensDelete.push(deleteTask);
     }
   }
 });
 return Promise.all(tokensDelete);
}

समारोह तैनात करें

आपके द्वारा इसे तैनात करने के बाद ही फ़ंक्शन सक्रिय होगा। कमांड लाइन पर firebase deploy --only functions :

firebase deploy --only functions

यह कंसोल आउटपुट है जिसे आपको देखना चाहिए:

i  deploying functions
i  functions: ensuring necessary APIs are enabled...
✔  functions: all necessary APIs are enabled
i  functions: preparing functions directory for uploading...
i  functions: packaged functions (X.XX KB) for uploading
✔  functions: functions folder uploaded successfully
i  starting release process (may take several minutes)...
i  functions: updating function addWelcomeMessages...
i  functions: updating function blurOffensiveImages...
i  functions: creating function sendNotifications...
✔  functions[addWelcomeMessages]: Successful update operation.
✔  functions[blurOffensiveImages]: Successful updating operation.
✔  functions[sendNotifications]: Successful create operation.
✔  functions: all functions deployed successfully!

✔  Deploy complete!

Project Console: https://console.firebase.google.com/project/friendlychat-1234/overview

फ़ंक्शन का परीक्षण करें

  1. एक बार फ़ंक्शन सफलतापूर्वक लागू होने के बाद, अपने ब्राउज़र को होस्टिंग URL ( https://<project-id>.firebaseapp.com ) का उपयोग करके अपने ब्राउज़र में खोलें।
  2. यदि आप पहली बार ऐप में साइन-इन करते हैं तो सुनिश्चित करें कि जब आप संकेत दें तो सूचनाएं दें: 8b9d0c66dc36153d.png
  3. चैट ऐप टैब बंद करें या एक अलग टैब प्रदर्शित करें: सूचनाएं केवल तभी दिखाई देती हैं जब ऐप पृष्ठभूमि में हो। यदि आप यह जानना चाहते हैं कि आपके एप्लिकेशन को अग्रभूमि में रहते हुए संदेश कैसे प्राप्त करना है तो हमारे प्रलेखन पर एक नज़र डालें।
  4. एक अलग ब्राउज़र (या एक गुप्त विंडो) का उपयोग करके, ऐप में साइन इन करें और एक संदेश पोस्ट करें। आपको पहले ब्राउज़र द्वारा प्रदर्शित अधिसूचना देखनी चाहिए: 45282ab12b28b926.png

आपने क्लाउड फ़ंक्शंस के लिए फायरबेस एसडीके का उपयोग किया है और चैट ऐप में सर्वर-साइड घटकों को जोड़ा है।

हमने जो कवर किया है

  • क्लाउड फ़ंक्शंस के लिए फायरबेस एसडीके का उपयोग करके क्लाउड फ़ंक्शंस को संलेखन।
  • ट्रिगर क्लाउड कार्य, प्रामाणिक, क्लाउड स्टोरेज और क्लाउड फायरस्टोर घटनाओं पर आधारित है।
  • अपने वेब ऐप में फायरबेस क्लाउड मैसेजिंग सपोर्ट जोड़ें।
  • फायरबेस सीएलआई का उपयोग कर तैनात क्लाउड फ़ंक्शंस।

अगला कदम

और अधिक जानें