ফায়ারবেস জন্য মেঘ ফাংশন

এই কোডল্যাবে, আপনি শিখবেন কিভাবে চ্যাট ওয়েব অ্যাপ উন্নত করতে গুগল ক্লাউড ফাংশনের জন্য ফায়ারবেস এসডিকে ব্যবহার করবেন এবং চ্যাট অ্যাপের ব্যবহারকারীদের বিজ্ঞপ্তি পাঠানোর জন্য ক্লাউড ফাংশন কিভাবে ব্যবহার করবেন।

3b1284f5144b54f6.png

আপনি যা শিখবেন

  • Firebase SDK ব্যবহার করে গুগল ক্লাউড ফাংশন তৈরি করুন।
  • Auth, Cloud Storage এবং Cloud Firestore ইভেন্টের উপর ভিত্তি করে ক্লাউড ফাংশন ট্রিগার করুন।
  • আপনার ওয়েব অ্যাপে Firebase ক্লাউড মেসেজিং সমর্থন যোগ করুন।

আপনার যা লাগবে

  • একটি ক্রেডিট কার্ড. ফায়ারবেসের জন্য ক্লাউড ফাংশনগুলির জন্য ফায়ারবেস ব্লেজ প্ল্যান প্রয়োজন যার অর্থ হল আপনাকে ক্রেডিট কার্ড ব্যবহার করে আপনার ফায়ারবেস প্রকল্পে বিলিং সক্ষম করতে হবে।
  • যেমন আপনার পছন্দের আইডিই / টেক্সট এডিটর WebStorm , অ্যাটম বা সর্বোচ্চ
  • NodeJS v8 ইনস্টল করা শেল কমান্ড চালানোর জন্য একটি টার্মিনাল।
  • ব্রাউজার যেমন ক্রোম।
  • নমুনা কোড। এর জন্য পরবর্তী ধাপ দেখুন।

ক্লোন GitHub সংগ্রহস্থলের কম্যান্ড লাইন থেকে:

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

স্টার্টার অ্যাপ আমদানি করুন

আপনার IDE ব্যবহার করে, খুলুন বা আমদানি করুন android_studio_folder.png cloud-functions-start নমুনা কোড ডিরেক্টরি থেকে নির্দেশিকা। এই ডিরেক্টরিটিতে কোডল্যাবের জন্য প্রারম্ভিক কোড রয়েছে যা সম্পূর্ণরূপে কার্যকরী চ্যাট ওয়েব অ্যাপ নিয়ে গঠিত।

প্রকল্প তৈরি করুন

ইন Firebase কনসোল -এ ক্লিক করুন প্রকল্প যোগ এবং কল এটা FriendlyChat।

প্রকল্প তৈরি করুন ক্লিক করুন।

ব্লেজ প্ল্যানে আপগ্রেড করুন

অর্ডার Firebase জন্য মেঘ কার্যাবলী ব্যবহার করার জন্য আপনাকে আপনার Firebase প্রকল্পের upgade করতে হবে আলোকচ্ছটা বিলিং পরিকল্পনা । এর জন্য আপনাকে আপনার গুগল ক্লাউড অ্যাকাউন্টে একটি ক্রেডিট কার্ড বা অন্য বিলিং উপকরণ যুক্ত করতে হবে।

সমস্ত ফায়ারবেস প্রকল্প, যার মধ্যে রয়েছে ব্লেজ প্ল্যান, এখনও ক্লাউড ফাংশনের জন্য বিনামূল্যে ব্যবহারের কোটা অ্যাক্সেস আছে। এই কোডল্যাবে বর্ণিত পদক্ষেপগুলি বিনামূল্যে স্তরের ব্যবহারের সীমার মধ্যে পড়বে। তবে আপনি (ছোট চার্জ দেখতে হবে $ 0.03 সম্পর্কে যা আপনার ক্লাউড কার্যাবলী বিল্ড ইমেজ হোস্ট করার জন্য ব্যবহার করা হয় ক্লাউড স্টোরেজ থেকে)।

আপনি একটি ক্রেডিট কার্ড এক্সেস আছে রাখতে না পারেন বা আলোকচ্ছটা পরিকল্পনা সঙ্গে অব্যাহত বিব্রত বোধ করেন, ব্যবহারের বিষয়ে বিবেচনা Firebase এমুলেটর সুইট যা আপনার স্থানীয় মেশিনে বিনামূল্যে জন্য ক্লাউড কার্যাবলী অনুকরণ করার অনুমতি দেবে।

Google Auth সক্ষম করুন

ব্যবহারকারীদের অ্যাপে সাইন-ইন করতে দিতে আমরা Google auth ব্যবহার করব যা সক্ষম করা প্রয়োজন।

Firebase কনসোল খুলুন (অথবা অধ্যায়> প্রমাণীকরণ> সাইন ইন পদ্ধতি ট্যাব বিকাশ এখানে ক্লিক করুন সেখানে যেতে) আপনি Google সাইন-ইন প্রোভাইডার সক্ষম এবং সংরক্ষণ ক্লিক করুন করতে হবে। এটি ব্যবহারকারীদের তাদের গুগল অ্যাকাউন্ট দিয়ে ওয়েব অ্যাপে সাইন-ইন করার অনুমতি দেবে।

এছাড়াও বন্ধুত্বপূর্ণ আলাপ করার জন্য আপনার অ্যাপের সর্বজনীনভাবে দৃশ্যমান নাম সেট বিনা দ্বিধায়:

8290061806aacb46.png

ক্লাউড স্টোরেজ সক্ষম করুন

ছবি আপলোড করতে অ্যাপটি ক্লাউড স্টোরেজ ব্যবহার করে। সংগ্রহস্থল বিভাগটি আপনার Firebase প্রকল্পের দর্শন ক্লাউড স্টোরেজ সক্ষম এবং শুরু করুন বোতামে ক্লিক করুন। তারপর পেয়েছেন এটি ক্লিক যখন আপনি নিরাপত্তা নিয়ম সম্পর্কে দাবিত্যাগ গ্রহণ করুন।

842ad84821323ef5.png

ফায়ারবেস কমান্ড লাইন ইন্টারফেস (সিএলআই) আপনাকে স্থানীয়ভাবে ওয়েব অ্যাপটি পরিবেশন করতে এবং আপনার ওয়েব অ্যাপ এবং ক্লাউড ফাংশন স্থাপনের অনুমতি দেবে।

CLI ইনস্টল বা আপগ্রেড করতে নিম্নলিখিত npm কমান্ডটি চালান:

npm -g install firebase-tools

CLI সঠিকভাবে ইনস্টল করা হয়েছে তা যাচাই করতে, একটি কনসোল খুলুন এবং চালান:

firebase --version

নিশ্চিত করুন Firebase CLI সংস্করণ 4.0.0 উপরে যাতে এটা আছে সব সর্বশেষ মেঘ কার্যাবলী জন্য প্রয়োজন বোধ করা বৈশিষ্ট্যগুলিও উপস্থিত রয়েছে। যদি না হয়, চালানোর npm install -g firebase-tools উপরে দেখানো আপগ্রেড করার।

Firebase CLI চালানোর মাধ্যমে অনুমোদন করুন:

firebase login

নিশ্চিত করুন যে আপনি ঠিক আছে cloud-functions-start ডিরেক্টরির তারপর আপনার Firebase প্রকল্প ব্যবহার করতে Firebase CLI সেট আপ:

firebase use --add

তারপর আপনার প্রকল্প আইডি নির্বাচন করুন এবং নির্দেশাবলী অনুসরণ করুন। যখন বলা হবে, আপনি এই ধরনের কোন ওরফে, নির্বাচন করতে পারবেন codelab উদাহরণস্বরূপ।

এখন যেহেতু আপনি আপনার প্রকল্পটি আমদানি করেছেন এবং কনফিগার করেছেন আপনি প্রথমবারের মতো ওয়েব অ্যাপটি চালানোর জন্য প্রস্তুত। এ কনসোল খুলুন cloud-functions-start ফোল্ডার এবং চালানোর firebase deploy --except functions এই শুধুমাত্র Firebase হোস্টিং ওয়েব অ্যাপ্লিকেশন স্থাপন করা হবে:

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 টি প্রদর্শন করা উচিত। ওয়েব অ্যাপটি এখন এই ইউআরএল থেকে পরিবেশন করা উচিত যা https: // <project-id> .firebaseapp.com ফর্মের হতে হবে। ইহা খোল. আপনার একটি চ্যাট অ্যাপের কার্যকরী UI দেখা উচিত।

সাইন ইন থাকা GOOGLE এর বোতামটি ব্যবহার করে সাইন-ইন অ্যাপ্লিকেশন এবং কিছু বার্তা এবং পোস্ট ইমেজ যোগ করতে দ্বিধা বোধ করবেন:

3b1284f5144b54f6.png

আপনি যদি নতুন ব্রাউজারে অ্যাপটিতে প্রথমবার সাইন-ইন করেন তাহলে নিশ্চিত হয়ে নিন যে অনুরোধ করার সময় আপনি বিজ্ঞপ্তিকে অনুমতি দিয়েছেন: 8b9d0c66dc36153d.png

পরবর্তী সময়ে আপনাকে বিজ্ঞপ্তিগুলি সক্ষম করতে হবে।

আপনি দূর্ঘটনাক্রমে ব্লক ক্লিক করেছেন যদি আপনি Chrome- এর Omnibar URL টির বাম এবং বিজ্ঞপ্তিগুলি নির্বাচনের 🔒 সিকিউর বোতাম ক্লিক করে এই সেটিং পরিবর্তন করতে পারেন> সর্বদা এই সাইটে মঞ্জুর করুন:

e926868b0546ed71.png

এখন আমরা ক্লাউড ফাংশনের জন্য Firebase SDK ব্যবহার করে কিছু কার্যকারিতা যুক্ত করব।

ক্লাউড ফাংশনগুলি আপনাকে সহজেই একটি সার্ভার সেটআপ না করে ক্লাউডে চালানো কোড পেতে দেয়। Firebase Auth, ক্লাউড স্টোরেজ এবং ফায়ারবেস রিয়েলটাইম ডেটাবেস ইভেন্টগুলিতে প্রতিক্রিয়া দেখানোর জন্য আমরা আপনাকে এমন ফাংশন তৈরি করতে দেখাব। Auth দিয়ে শুরু করা যাক।

ক্লাউড কাজকর্মের জন্য Firebase SDK এর ব্যবহার করার সময়, আপনার কার্যাবলী কোড অধীনে বাস করবে functions ডিরেক্টরি (ডিফল্ট অনুসারে)। তোমার কার্যাবলী কোড একটি হল Node.js অ্যাপ্লিকেশন এবং সেই কারণে একটি প্রয়োজন package.json যে আপনার অ্যাপ এবং তালিকা নির্ভরতা সম্পর্কে কিছু তথ্য দেয়।

এটা আপনার জন্য সহজ করতে আমরা ইতিমধ্যে তৈরি করেছি functions/index.js ফাইল যেখানে আপনার কোড যাব। এগিয়ে যাওয়ার আগে নির্দ্বিধায় এই ফাইলটি পরিদর্শন করুন।

cd functions
ls

আপনার সাথে পরিচিত না হন, তাহলে Node.js এটা codelab চালিয়ে যাওয়ার আগে এটি সম্পর্কে আরও জানতে সাহায্য করবে।

: Package.json ফাইল আগে থেকেই দুটি প্রয়োজনীয় নির্ভরতা তালিকা ক্লাউড কাজকর্মের জন্য Firebase SDK এর এবং Firebase এডমিন SDK এর । ইনস্টল করার জন্য তাদের স্থানীয়ভাবে চালানোর npm install থেকে functions ফোল্ডার:

npm install

আসুন এখন একটি চেহারা আছে 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.

আমরা প্রথমে প্রয়োজনীয় মডিউল আমদানি করব এবং তারপর TODO- এর জায়গায় তিনটি ফাংশন লিখব। প্রথমে প্রয়োজনীয় নোড মডিউল আমদানি করা যাক।

দুই মডিউল এই codelab সময় প্রয়োজন হবে, firebase-functions মডিউল লিখতে ক্লাউড কার্যাবলী বিধি আরম্ভ, যখন আমাদের অনুমতি দেয় firebase-admin লিখতে মডিউল অ্যাডমিন অ্যাক্সেস সহ কোনো সার্ভারে Firebase প্ল্যাটফর্ম ব্যবহার করতে আমাদের অনুমতি দেয় উদাহরণস্বরূপ, ক্লাউড ফায়ারস্টোর অথবা FCM বিজ্ঞপ্তি পাঠান।

ইন 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.

ফায়ারবেস অ্যাডমিন এসডিকে স্বয়ংক্রিয়ভাবে কনফিগার করা যায় যখন ক্লাউড ফাংশন পরিবেশ বা অন্যান্য গুগল ক্লাউড প্ল্যাটফর্ম পাত্রে স্থাপন করা হয়। এটা কি আমরা যখন কলিং উপরে করতে হয় admin.initializeApp();

এখন আসুন একটি ফাংশন যোগ করি যা ব্যবহারকারী যখন আপনার চ্যাট অ্যাপে প্রথমবার সাইন ইন করে এবং আমরা ব্যবহারকারীকে স্বাগত জানাতে একটি চ্যাট বার্তা যুক্ত করব।

চ্যাট বার্তার গঠন

ফ্রেন্ডলিচ্যাট চ্যাট ফিডে পোস্ট করা বার্তাগুলি ক্লাউড ফায়ারস্টোরে সংরক্ষণ করা হয়। আসুন আমরা একটি বার্তার জন্য যে ডেটা স্ট্রাকচারটি ব্যবহার করি তার দিকে নজর দিন। এটি করার জন্য, "হ্যালো ওয়ার্ল্ড" লেখা চ্যাটে একটি নতুন বার্তা পোস্ট করুন:

11f5a676fbb1a69a.png

এই হিসাবে প্রদর্শিত হওয়া উচিত:

fe6d1c020d0744cf.png

আপনার Firebase অ্যাপ্লিকেশন কনসোলে বিকাশ ধারার অধীন ডাটাবেস এ ক্লিক করুন। আপনার লেখা বার্তা সম্বলিত বার্তা সংগ্রহ এবং একটি নথি দেখতে হবে:

442c9c10b5e2b245.png

যেহেতু আপনি দেখতে পারেন, চ্যাট বার্তা সঙ্গে একটি ডকুমেন্ট হিসেবে ক্লাউড Firestore সংরক্ষিত হয় name , profilePicUrl , text এবং timestamp বৈশিষ্ট্যাবলী যোগ করা messages সংগ্রহ।

স্বাগত বার্তা যোগ করা

প্রথম ক্লাউড ফাংশন একটি বার্তা চ্যাটে নতুন ব্যবহারকারীদের স্বাগত জানায় যোগ করা হয়েছে। এই জন্য আমরা ট্রিগার ব্যবহার করতে পারেন functions.auth().onCreate যা ফাংশন প্রত্যেক বার এক একটা ব্যবহারকারী আপনার Firebase অ্যাপ্লিকেশানে প্রথমবারের লক্ষণ-ইন চালায়। যোগ 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 বস্তুর বর্তমান ফাইলটি ফাংশন বাইরে অ্যাক্সেসযোগ্য তৈরীর নোড এর উপায় এবং ক্লাউড কার্যাবলী জন্য প্রয়োজন।

উপরের ফাংশনে আমরা চ্যাট বার্তার তালিকায় "ফায়ারবেস বট" পোস্ট করা একটি নতুন স্বাগত বার্তা যুক্ত করছি। আমরা ব্যবহার করে এই করছেন add উপর পদ্ধতি messages ক্লাউড Firestore মধ্যে সংগ্রহে যা যেখানে চ্যাট বার্তা সংরক্ষণ করা হয়।

যেহেতু এই একটি অ্যাসিঙ্ক্রোনাস অপারেশন, আমরা ফিরে প্রয়োজন প্রতিশ্রুতি যখন মেঘ Firestore লেখার সমাপ্ত হয়েছে যা নির্দেশ যাতে কার্যাবলী সম্পাদন খুব তাড়াতাড়ি প্রস্থান করে না।

ফাংশন স্থাপন করুন

আপনি এটি মোতায়েন করার পরে ফাংশনটি সক্রিয় হবে। কমান্ড লাইন চালনার 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. একটি নতুন ব্যবহারকারী, আপনার app এর মধ্যে প্রথমবার বোতামটি ব্যবহার করে সাইন ইন করার জন্য সাইন ইন করুন।
  • যদি আপনি ইতিমধ্যে অ্যাপ্লিকেশন সাইন ইন করেছেন আপনি খুলতে পারে Firebase কনসোল প্রমাণীকরণ অধ্যায় এবং ব্যবহারকারীদের তালিকা থেকে আপনার অ্যাকাউন্ট মুছে দিন। তারপর আবার সাইন ইন করুন।

262535d1b1223c65.png

  1. আপনি সাইন ইন করার পরে, একটি স্বাগত বার্তা স্বয়ংক্রিয়ভাবে প্রদর্শিত হবে:

1c70e0d64b23525b.png

ব্যবহারকারীরা চ্যাটে সব ধরনের ছবি আপলোড করতে পারে এবং আপত্তিকর ছবিগুলি বিশেষ করে পাবলিক সোশ্যাল প্ল্যাটফর্মে মাঝারি করা সবসময় গুরুত্বপূর্ণ। চিত্র চ্যাটে প্রকাশ করা হচ্ছে FriendlyChat সালে মধ্যে সংরক্ষণ করা হয় Google মেঘ সংগ্রহস্থল

ক্লাউড কার্যাবলী সঙ্গে, আপনি ব্যবহার করে নতুন চিত্র আপলোডের সনাক্ত করা সম্ভব functions.storage().onFinalize ট্রিগার। ক্লাউড স্টোরেজে নতুন ফাইল আপলোড বা সংশোধন করার সময় এটি চলবে।

চিত্রগুলি পরিমিত করার জন্য আমরা নিম্নলিখিত প্রক্রিয়ার মধ্য দিয়ে যাব:

  1. চেক চিত্র বা ব্যবহার পূর্ণবয়স্ক হিসাবে ফ্ল্যাগ করা হয়েছে হিংসাত্মক ক্লাউড ভিশন এপিআই
  2. যদি ছবিটি পতাকাঙ্কিত করা হয়েছে, চলমান ফাংশন উদাহরণে এটি ডাউনলোড করুন
  3. ব্যবহার চিত্র অস্পষ্ট করে ImageMagick
  4. ক্লাউড স্টোরেজে ঝাপসা ছবি আপলোড করুন

ক্লাউড ভিশন API সক্ষম করুন

যেহেতু আমরা এই ফাংশনে গুগল ক্লাউড ভিশন এপিআই ব্যবহার করব, তাই আপনাকে অবশ্যই আপনার ফায়ারবেস প্রকল্পে এপিআই সক্ষম করতে হবে। অনুসরণ এই লিঙ্কে , আপনার Firebase প্রকল্পের নির্বাচন করুন ও API সক্ষম:

5c77fee51ec5de49.png

নির্ভরতা ইনস্টল করুন

চিত্রগুলি পরিমিত করার জন্য আমাদের কয়েকটি Node.js প্যাকেজ লাগবে:

  • Node.js এর জন্য Google মেঘ ভিশন ক্লায়েন্ট লাইব্রেরী: @ Google এর মেঘ / দৃষ্টি অনুপযুক্ত চিত্রাবলী সনাক্ত করতে ক্লাউড ভিশন API এর মাধ্যমে ইমেজ চালানোর জন্য।
  • একজন Node.js আমাদের প্রসেস চালানোর জন্য অনুমতি গ্রন্থাগার: সন্তানের প্রক্রিয়া-প্রতিশ্রুতি করে ImageMagick কম্যান্ড-লাইন টুল যেহেতু করে ImageMagick চালানোর জন্য সব ফাংশন দৃষ্টান্ত আগে থেকে ইনস্টল আসে।

আপনার ক্লাউড কার্যাবলী অ্যাপ্লিকেশানে এই দুটি প্যাকেজগুলি ইনস্টল করতে, নিম্নলিখিত চালানোর npm install --save কমান্ড। নিশ্চিত করুন যে আপনার কাছ থেকে এই তা নিশ্চিত করুন functions ডিরেক্টরি।

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

এই দুটি প্যাকেজ স্থানীয়ভাবে ইনস্টল এবং তাদেরকে আপনার ঘোষণা নির্ভরতা যেমন যোগ হবে 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');

যেহেতু আপনার ফাংশনটি একটি গুগল ক্লাউড পরিবেশে চলবে, তাই ক্লাউড স্টোরেজ এবং ক্লাউড ভিশন লাইব্রেরি কনফিগার করার প্রয়োজন নেই: সেগুলি আপনার প্রকল্প ব্যবহার করার জন্য স্বয়ংক্রিয়ভাবে কনফিগার করা হবে।

অনুপযুক্ত ছবি সনাক্ত করা

আপনি ব্যবহার করছি functions.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'}) আমরা অনুরোধ করছি যে দৃষ্টান্ত এই বরং ডিফল্ট চেয়ে মেমরি 2GB পায়, এই ইচ্ছার সাহায্যের ফাংশন মেমরি নিবিড়।

যখন ফাংশনটি ট্রিগার করা হয়, তখন ছবিটি প্রাপ্তবয়স্ক বা হিংস্র হিসেবে চিহ্নিত করা হয় কিনা তা সনাক্ত করতে ক্লাউড ভিশন API এর মাধ্যমে চালানো হয়। ইমেজ এই মাপকাঠির ভিত্তিতে অনুপযুক্ত হিসাবে সনাক্ত করা হলে আমরা যদি ইমেজ যা মধ্যে সম্পন্ন করা হয় অস্পষ্টতা করছি blurImage ফাংশন যা আমরা পরবর্তী দেখতে পাবেন।

ইমেজ ঝাপসা করা

নিম্নলিখিত যোগ blurImage আপনার ফাংশন index.js ফাইল:

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.');
}

উপরের ফাংশনে ইমেজ বাইনারি ক্লাউড স্টোরেজ থেকে ডাউনলোড করা হয়। তারপর ইমেজ করে ImageMagick এর ব্যবহার ঝাপসা হয় 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

এই বিভাগে আপনি একটি ক্লাউড ফাংশন যুক্ত করবেন যা একটি নতুন বার্তা পোস্ট করার সময় চ্যাটের অংশগ্রহণকারীদের বিজ্ঞপ্তি পাঠায়।

ব্যবহার Firebase ক্লাউড মেসেজিং (FCM) আপনাকে একটি ক্রস প্ল্যাটফর্ম এবং নির্ভরযোগ্য উপায়ে আপনার ব্যবহারকারীদের বিজ্ঞপ্তি পাঠাতে পারেন। একটি ব্যবহারকারীকে একটি বিজ্ঞপ্তি পাঠাতে আপনার তাদের FCM ডিভাইস টোকেন প্রয়োজন। আমরা যে চ্যাট ওয়েব অ্যাপটি ব্যবহার করছি তা ইতিমধ্যে ব্যবহারকারীদের কাছ থেকে ডিভাইস টোকেন সংগ্রহ করে যখন তারা নতুন ব্রাউজার বা ডিভাইসে প্রথমবার অ্যাপ খুলবে। এই টোকেন ক্লাউড Firestore সংরক্ষিত হয় fcmTokens সংগ্রহ।

আপনি একটি ওয়েব অ্যাপ্লিকেশন আপনি মধ্য দিয়ে যেতে পারে FCM ডিভাইস টোকেন পেতে করা শিখতে চান তাহলে Firebase ওয়েব Codelab

বিজ্ঞপ্তি পাঠান

সনাক্ত করতে নতুন বার্তা আপনি ব্যবহার করা হবে পোস্ট করা হয় functions.firestore.document().onCreate ক্লাউড কার্যাবলী ট্রিগার যাতে আপনার কোডটি একটি নতুন বস্তু ক্লাউড Firestore প্রদত্ত পথ এ তৈরি করা হয় চালায়। যোগ sendNotifications আপনার মধ্যে কাজ index.js ফাইল:

index.js

// Sends a notifications to all users when a new message is posted.
exports.sendNotifications = functions.firestore.document('messages/{messageId}').onCreate(
  async (snapshot) => {
    // Notification details.
    const text = snapshot.data().text;
    const payload = {
      notification: {
        title: `${snapshot.data().name} posted ${text ? 'a message' : 'an image'}`,
        body: text ? (text.length <= 100 ? text : text.substring(0, 97) + '...') : '',
        icon: snapshot.data().profilePicUrl || '/images/profile_placeholder.png',
        click_action: `https://${process.env.GCLOUD_PROJECT}.firebaseapp.com`,
      }
    };

    // Get the list of device tokens.
    const allTokens = await admin.firestore().collection('fcmTokens').get();
    const tokens = [];
    allTokens.forEach((tokenDoc) => {
      tokens.push(tokenDoc.id);
    });

    if (tokens.length > 0) {
      // Send notifications to all tokens.
      const response = await admin.messaging().sendToDevice(tokens, payload);
      await cleanupTokens(response, tokens);
      console.log('Notifications have been sent and tokens cleaned up.');
    }
  });

ফাংশন উপরে আমরা মেঘ Firestore ডাটাবেস থেকে সব ব্যবহারকারীদের ডিভাইস টোকেন সংগ্রহ এবং এই ব্যবহার প্রতিটি একটি বিজ্ঞপ্তি পাঠানোর হয় admin.messaging().sendToDevice ফাংশন।

টোকেন পরিষ্কার করুন

পরিশেষে আমরা সেই টোকেনগুলি সরিয়ে ফেলতে চাই যা আর বৈধ নয়। এটি ঘটে যখন আমরা ব্যবহারকারীর কাছ থেকে যে টোকেনটি পেয়েছিলাম তা ব্রাউজার বা ডিভাইস দ্বারা আর ব্যবহার করা হচ্ছে না। উদাহরণস্বরূপ, এটি ঘটে যদি ব্যবহারকারী তার ব্রাউজার সেশনের জন্য বিজ্ঞপ্তি অনুমতি বাতিল করে। এই অ্যাড নিম্নলিখিত কাজের জন্য cleanupTokens আপনার কাজ index.js ফাইল:

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 that 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

আপনি ক্লাউড ফাংশনের জন্য Firebase SDK ব্যবহার করেছেন এবং একটি চ্যাট অ্যাপে সার্ভার-সাইড উপাদান যুক্ত করেছেন।

যা আমরা েকে রেখেছি

  • ক্লাউড ফাংশনের জন্য Firebase SDK ব্যবহার করে ক্লাউড ফাংশন লেখার।
  • Auth, Cloud Storage এবং Cloud Firestore ইভেন্টের উপর ভিত্তি করে ক্লাউড ফাংশন ট্রিগার করুন।
  • আপনার ওয়েব অ্যাপে Firebase ক্লাউড মেসেজিং সমর্থন যোগ করুন।
  • Firebase CLI ব্যবহার করে ক্লাউড ফাংশন স্থাপন করা হয়েছে।

পরবর্তী পদক্ষেপ

আরো জানুন