توابع ابر برای Firebase

در این Codelab ، نحوه استفاده از Firebase SDK برای Google Cloud Functions برای بهبود برنامه وب چت و نحوه استفاده از عملکردهای ابر برای ارسال اعلانات به کاربران برنامه Chat را خواهید آموخت.

3b1284f5144b54f6.png

آنچه یاد خواهید گرفت

  • عملکردهای Google Cloud را با استفاده از Firebase SDK ایجاد کنید.
  • فعال کردن عملکردهای ابری براساس رویدادهای Auth ، Cloud Storage و Cloud Firestore.
  • پشتیبانی برنامه پیام رسانی ابر Firebase را به برنامه وب خود اضافه کنید.

آنچه شما نیاز دارید

  • یک کارت اعتباری. عملکردهای ابری برای Firebase به طرح Firebase Blaze نیاز دارد ، به این معنی که باید صورتحساب پروژه Firebase خود را با استفاده از کارت اعتباری فعال کنید.
  • ویرایشگر IDE / متن انتخابی خود را مانند WebStorm ، اتم یا بلندمرتبه .
  • پایانه ای برای اجرای دستورات پوسته با نصب NodeJS v8.
  • مرورگری مانند Chrome.
  • نمونه کد. برای این کار مرحله بعدی را ببینید.

کلون مخزن گیتهاب از خط فرمان:

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

برنامه استارت را وارد کنید

با استفاده از IDE خود ، کد را باز یا وارد کنید android_studio_folder.png cloud-functions-start دایرکتوری را از دایرکتوری کد نمونه. این فهرست شامل کد شروع کد زبان است که از یک برنامه وب کاملاً کاربردی Chat تشکیل شده است.

ایجاد پروژه

در فایربیس کنسول با کلیک بر روی اضافه کردن پروژه و پاسخ آن را FriendlyChat.

کلیک کنید ایجاد پروژه.

به طرح Blaze ارتقا دهید

به منظور استفاده از توابع Cloud برای فایربیس شما باید به upgade پروژه فایربیس خود را به طرح صدور صورت حساب فروغ . برای این کار باید از کارت اعتباری یا ابزار صورتحساب دیگری به حساب Google Cloud خود استفاده کنید.

همه پروژه های Firebase ، از جمله پروژه های Blaze ، هنوز به سهمیه استفاده رایگان برای عملکردهای Cloud دسترسی دارند. مراحل ذکر شده در این کد در محدوده استفاده از لایه رایگان قرار می گیرد. با این حال شما خواهد اتهامات کوچک (نگاه کنید به مورد 0.03 $ ) از ذخیره سازی ابر استفاده شده است که برای میزبانی ابر تصاویر توابع ساخت خود را.

اگر شما دسترسی به یک کارت اعتباری نیست و یا ناراحت کننده ادامه با طرح فروغ هستند، در نظر با استفاده از فایربیس شبیه ساز سوئیت که به شما اجازه به تقلید توابع ابر به صورت رایگان بر روی دستگاه محلی خود را.

Google Auth را فعال کنید

برای اینکه کاربران بتوانند به برنامه وارد شوند ، از Google author استفاده می کنیم که باید فعال باشد.

در کنسول فایربیس باز کردن توسعه بخش> احراز هویت> ثبت نام تب در روش (یا اینجا کلیک کنید برای رفتن وجود دارد) شما نیاز به فعال کردن Google وارد شوید ارائه دهنده و ذخیره را کلیک کنید. این به کاربران امکان می دهد با حساب های Google خود وارد برنامه وب شوند.

همچنین در صورت تمایل مجموعه ای به نام روبرو عمومی از برنامه خود را به دوستانه چت احساس:

8290061806aacb46.png

ذخیره سازی ابری را فعال کنید

این برنامه از Cloud Storage برای بارگذاری عکس ها استفاده می کند. برای فعال کردن ذخیره سازی ابر در سفر پروژه Firebase خود بخش ذخیره سازی و کلیک بر روی دکمه شروع. پس از آن رو آن زمانی که شما سلب مسئولیت در مورد قوانین امنیتی دریافت کلیک کنید.

842ad84821323ef5.png

رابط خط فرمان Firebase (CLI) به شما این امکان را می دهد که برنامه وب را به صورت محلی ارائه کرده و برنامه وب و عملکردهای Cloud خود را مستقر کنید.

برای نصب یا ارتقاء CLI دستور npm زیر را اجرا کنید:

npm -g install firebase-tools

برای تأیید اینکه CLI به درستی نصب شده است ، یک کنسول را باز کرده و اجرا کنید:

firebase --version

اطمینان حاصل کنید که نسخه ای از فایربیس CLI بالاتر از 4.0.0 به طوری که آن را تا تمام شدن امکانات را برای توابع ابر مورد نیاز است. اگر نه، اجرا npm install -g firebase-tools به روز رسانی در بالا نشان داده.

با اجرای دستور Firebase CLI مجوز دهید:

firebase login

اطمینان حاصل کنید که شما را در می cloud-functions-start دایرکتوری سپس راه اندازی فایربیس CLI به استفاده از پروژه Firebase خود:

firebase use --add

سپس شناسه پروژه خود را انتخاب کرده و دستورالعمل ها را دنبال کنید. وقتی از شما خواسته، شما می توانید هر نام مستعار، مانند انتخاب کنید codelab به عنوان مثال.

اکنون که پروژه خود را وارد و پیکربندی کرده اید ، آماده اجرای برنامه وب برای اولین بار هستید. یک کنسول باز کردن در cloud-functions-start پوشه و اجرا 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 میزبانی نشان می دهد. اکنون باید برنامه وب از این نشانی اینترنتی ارائه شود که باید به شکل https: // <project-id> .firebaseapp.com باشد. بازش کن. باید رابط کاربری یک برنامه چت را مشاهده کنید.

ورود به سیستم به برنامه با استفاده از دکمه ورود به سیستم با گوگل و در صورت تمایل به اضافه کردن برخی از پیام ها و تصاویر ارسال:

3b1284f5144b54f6.png

اگر برای اولین بار در یک مرورگر جدید وارد برنامه شدید ، مطمئن شوید که در صورت درخواست اعلان ها را مجاز می دانید: 8b9d0c66dc36153d.png

ما باید بعداً اعلان ها را فعال کنید.

اگر شما به طور تصادفی بلوک کلیک شما می توانید این تنظیمات را با کلیک کردن بر روی دکمه 🔒 امن در سمت چپ از URL در Omnibar Chrome و انتخاب اعلانها تغییر دهید> همیشه در این سایت اجازه:

e926868b0546ed71.png

اکنون ما برخی از قابلیت ها را با استفاده از Firebase SDK for Cloud Functions اضافه می کنیم.

عملکردهای ابری به شما امکان می دهد بدون نیاز به راه اندازی سرور ، کدی را که در Cloud اجرا می شود داشته باشید. ما به شما نحوه ایجاد توابع را نشان می دهیم که به رویدادهای Firebase Auth ، Cloud Storage و Firebase Reatime Database واکنش نشان می دهند. بیایید با Auth شروع کنیم.

هنگام استفاده از فایربیس SDK برای توابع ابر، کد توابع خود را در زیر زندگی functions دایرکتوری (به طور پیش فرض). کد توابع خود را نیز از Node.js برنامه و در نتیجه نیاز به یک package.json است که به برخی از اطلاعات در مورد برنامه شما و لیست وابستگیها.

برای اینکه آن را برای شما راحت تر ما در حال حاضر ایجاد functions/index.js فایل که در آن کد خود را خواهد رفت. با خیال راحت این فایل را قبل از حرکت به جلو بررسی کنید.

cd functions
ls

اگر شما با آن آشنا هستند Node.js و آن کمک خواهد کرد برای کسب اطلاعات بیشتر در مورد آن پیش از ادامه codelab.

فایل package.json در حال حاضر لیست دو وابستگی های مورد نیاز: در فایربیس SDK برای توابع ابر و فایربیس محیط مدیریت 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 ها می نویسیم. ابتدا اجازه دهید ماژول های Node مورد نیاز را وارد کنیم.

دو ماژول خواهد شد در طول این codelab مورد نیاز، firebase-functions ماژول ما اجازه می دهد به ارسال توابع ابر باعث قوانین، در حالی که firebase-admin ماژول ما اجازه می دهد تا با استفاده از پلت فرم فایربیس در سرور با دسترسی مدیر، به عنوان مثال برای نوشتن به Cloud Firestore یا اعلان های 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.

SDK سرپرست Firebase وقتی در محیط Cloud Functions یا سایر ظروف Google Cloud Platform مستقر شود می تواند به طور خودکار پیکربندی شود. این چیزی است که ما در بالا در هنگام فراخوانی انجام admin.initializeApp();

حالا بیایید یک تابع را اضافه کنیم که وقتی کاربر برای اولین بار در برنامه چت شما وارد سیستم می شود اجرا شود و برای استقبال از کاربر یک پیام چت اضافه می کنیم.

ساختار پیام های چت

پیامهای ارسال شده به فید چت FriendlyChat در Cloud Firestore ذخیره می شوند. بیایید نگاهی به ساختار داده ای که برای پیام استفاده می کنیم بیندازیم. برای انجام این کار ، یک پیام جدید به چت ارسال کنید که روی آن نوشته شده است "سلام جهان":

11f5a676fbb1a69a.png

این باید به صورت زیر ظاهر شود:

fe6d1c020d0744cf.png

در کنسول برنامه Firebase خود با کلیک بر روی پایگاه در بخش توسعه. شما باید مجموعه پیامها و یک سند حاوی پیامی که نوشته اید را مشاهده کنید:

442c9c10b5e2b245.png

همانطور که می بینید، پیام های چت در ابر Firestore به عنوان یک سند با ذخیره شده name ، profilePicUrl ، text و timestamp ویژگی به اضافه messages مجموعه است.

افزودن پیامهای خوش آمد گویی

اولین تابع ابر می افزاید: یک پیام است که کاربران جدید استقبال به چت. برای این که ما می توانید ماشه استفاده 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 شی راه گره از ساخت تابع خارج از قابل دسترسی تصویر فعلی است و برای توابع ابر مورد نیاز است.

در عملکرد بالا ما یک پیام خوش آمدگویی جدید ارسال شده توسط "Firebase Bot" را به لیست پیام های چت اضافه می کنیم. ما این کار را با استفاده از 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. با یک کاربر جدید، ثبت نام در برای اولین بار در برنامه شما با استفاده از دکمه ورود به سیستم.
  • اگر شما در حال حاضر در برنامه امضا شما می توانید برای باز کردن بخش فایربیس کنسول تایید و حذف حساب خود را از لیست کاربران. سپس دوباره وارد سیستم شوید.

262535d1b1223c65.png

  1. پس از ورود به سیستم ، پیام خوش آمدگویی باید به طور خودکار نمایش داده شود:

1c70e0d64b23525b.png

کاربران می توانند همه نوع تصویر را در چت بارگذاری کنند ، و همیشه تعدیل تصاویر توهین آمیز ، به ویژه در بسترهای اجتماعی عمومی مهم است. در FriendlyChat تصاویری که در حال به چت منتشر شده به ذخیره شده گوگل ابر ذخیره سازی .

با استفاده از توابع ابر، شما می توانید ارسال تصویر جدید با استفاده از تشخیص functions.storage().onFinalize ماشه. این کار هر بار که یک فایل جدید در Cloud Storage بارگذاری یا اصلاح می شود اجرا می شود.

برای تعدیل تصاویر ، مراحل زیر را طی می کنیم:

  1. بررسی کنید که آیا تصویر به عنوان بزرگسالان شناخته و یا خشونت آمیز با استفاده از API ابر چشم انداز
  2. اگر تصویر پرچم گذاری شده است ، آن را در نمونه عملکردهای در حال اجرا بارگیری کنید
  3. تاری تصویر را با استفاده از ImageMagick
  4. تصویر تار را در Cloud Storage بارگذاری کنید

API Cloud Vision را فعال کنید

از آنجایی که در این تابع از Google Cloud Vision API استفاده می کنیم ، باید API را در پروژه Firebase خود فعال کنید. دنبال این لینک ، پروژه Firebase خود را انتخاب کنید و فعال کردن API:

5c77fee51ec5de49.png

وابستگی ها را نصب کنید

برای تعدیل تصاویر به چند بسته Node.js نیاز داریم:

  • کتابخانه کلاینت گوگل ابر چشم انداز برای Node.js.: @ گوگل-ابر / چشم انداز برای اجرای تصویر از طریق 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');

از آنجا که عملکرد شما در محیط Google Cloud اجرا می شود ، نیازی به پیکربندی کتابخانه های Cloud Storage و Cloud Vision نیست: آنها برای استفاده از پروژه شما به طور خودکار پیکربندی می شوند.

تشخیص تصاویر نامناسب

شما می شود با استفاده از 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 Cloud Vision اجرا می شود تا تشخیص داده شود که به عنوان بزرگسال یا خشن پرچم گذاری شده است. اگر تصویر به عنوان نامناسب بر اساس این معیارها شناسایی ما در حال آلوده کردن تصویر است که در انجام 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.');
}

در عملکرد بالا ، تصویر باینری از Cloud Storage بارگیری می شود. سپس تصویر را با استفاده از ImageMagick را در تار convert ابزار و نسخه تاری دوباره آپلود بر روی سطل ذخیره سازی است. سپس فایل را در نمونه Cloud Functions حذف می کنیم تا فضای دیسک آزاد شود ، این کار را انجام می دهیم زیرا همان نمونه عملکردهای ابری می تواند دوباره مورد استفاده قرار گیرد و اگر فایل ها پاک نشوند ، ممکن است دیسک آن تمام شود. سرانجام ما یک بولین به پیام چت اضافه می کنیم که نشان می دهد تصویر تعدیل شده است ، این باعث تازه شدن پیام در سرویس گیرنده می شود.

تابع را مستقر کنید

تابع فقط پس از استقرار فعال می شود. در خط فرمان اجرا 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

در این بخش شما یک تابع Cloud اضافه می کنید که هنگام ارسال یک پیام جدید ، اعلانات را برای شرکت کنندگان در چت ارسال می کند.

با استفاده از فایربیس ابر پیام (FCM) شما می توانید اطلاعیه به کاربران خود را در یک پلت فرم متقابل و راه قابل اعتماد ارسال. برای ارسال اعلان به کاربر ، شما نیاز به رمز دستگاه FCM او دارید. برنامه وب چت که ما از آن استفاده می کنیم ، قبلاً علامت دستگاه را از کاربران هنگامی که برنامه را برای اولین بار در مرورگر یا دستگاه جدید باز می کنند ، جمع آوری می کند. این نشانه ها در ابر Firestore در ذخیره شده fcmTokens مجموعه است.

اگر شما می خواهم به یاد بگیرند که چگونه برای به دست آوردن نشانه دستگاه FCM در یک برنامه وب شما می توانید از طریق رفتن فایربیس وب 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.

مراحل بعدی

بیشتر بدانید