Firebase için Bulut İşlevleri

Bu kod laboratuvarında, bir Chat Web uygulamasını geliştirmek için Firebase SDK for Google Cloud Functions'ın nasıl kullanılacağını ve Chat uygulamasının kullanıcılarına bildirim göndermek için Cloud Functions'ın nasıl kullanılacağını öğreneceksiniz.

3b1284f5144b54f6.png

ne öğreneceksin

  • Firebase SDK'sını kullanarak Google Cloud Functions oluşturun.
  • Auth, Cloud Storage ve Cloud Firestore etkinliklerine dayalı olarak Bulut İşlevlerini tetikleyin.
  • Web uygulamanıza Firebase Bulut Mesajlaşma desteği ekleyin.

Neye ihtiyacın olacak

  • Kredi kartı. Firebase için Cloud Functions, Firebase Blaze planını gerektirir; bu, bir kredi kartı kullanarak Firebase projenizde faturalandırmayı etkinleştirmeniz gerekeceği anlamına gelir.
  • Gibi seçtiğiniz IDE / metin editörü WebStorm , Atom veya Sublime .
  • NodeJS v8 kurulu olarak kabuk komutlarını çalıştırmak için bir terminal.
  • Chrome gibi bir tarayıcı.
  • Örnek kod. Bunun için sonraki adıma bakın.

Klon GitHub depo komut satırından:

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

Başlangıç ​​uygulamasını içe aktarın

IDE'nizi kullanarak açın veya içe aktarın. android_studio_folder.png cloud-functions-start örnek kod dizinden dizin. Bu dizin, tamamen işlevsel bir Sohbet Web Uygulamasından oluşan kod laboratuvarı için başlangıç ​​kodunu içerir.

Proje oluştur

In Firebase konsoluna tıklayın Project ekleyin ve FriendlyChat diyoruz.

Proje oluşturma tıklayın.

Blaze planına yükseltin

Firebase için Bulut İşlevleri kullanmak için Size Firebase projeyi upgade zorunda kalacak Blaze faturalandırma planı . Bu, Google Cloud hesabınıza bir kredi kartı veya başka bir faturalandırma aracı eklemenizi gerektirir.

Blaze planındakiler de dahil olmak üzere tüm Firebase projeleri, Bulut İşlevleri için ücretsiz kullanım kotalarına erişmeye devam eder. Bu kod laboratuvarında özetlenen adımlar, ücretsiz kullanım kullanım sınırları dahilinde olacaktır. Ancak (küçük ücretleri göreceksiniz $ 0.03 hakkında Cloud Fonksiyonlar yapı görüntüleri barındırmak için kullanılan Bulut Storage'den).

Eğer bir kredi kartına erişebilir veya kullanmayı düşünün, Blaze planı ile devam eden rahatsız etmezseniz Firebase Emulator Suite yerel makinede ücretsiz Bulut İşlevleri taklit sağlayacaktır.

Google Yetkilendirmeyi Etkinleştir

Kullanıcıların uygulamada oturum açmasına izin vermek için etkinleştirilmesi gereken Google kimlik doğrulamasını kullanacağız.

Firebase konsolunda bölümü> Yetkilendirme> SIGN USUL sekmesini geliştirin açın (veya buraya tıklayın oraya gitmek) Google Sign-in Sağlayıcı etkinleştirmek ve KAYDET'i tıklamanız gerekir. Bu, kullanıcıların Web uygulamasında Google hesaplarıyla oturum açmasına olanak tanır.

Ayrıca Dostu Sohbet için uygulama herkes tarafından görülen adını ayarlamak için çekinmeyin:

8290061806aacb46.png

Bulut Depolamayı Etkinleştir

Uygulama, resimleri yüklemek için Cloud Storage'ı kullanır. Senin Firebase proje ziyareti Depolama bölümü Bulut Depolama etkinleştirmek ve alın Started butonuna tıklayın. Güvenlik kuralları hakkında yasal uyarı aldığınızda Sonra Got It tıklayın.

842ad84821323ef5.png

Firebase Komut Satırı Arayüzü (CLI), web uygulamasını yerel olarak sunmanıza ve web uygulamanızı ve Bulut İşlevlerinizi dağıtmanıza olanak tanır.

CLI'yi kurmak veya yükseltmek için aşağıdaki npm komutunu çalıştırın:

npm -g install firebase-tools

CLI'nin doğru şekilde kurulduğunu doğrulamak için bir konsol açın ve şunu çalıştırın:

firebase --version

Hepsi son Bulut Fonksiyonlar için gerekli özellikleri vardır, böylece emin olun Firebase CLI sürümü 4.0.0 üzerindedir. Değilse, koşmak npm install -g firebase-tools yukarıda gösterildiği gibi yükseltmek.

Firebase CLI'yi aşağıdakileri çalıştırarak yetkilendirin:

firebase login

Emin olan Make cloud-functions-start sonra Firebase Project kullanmak Firebase CLI kurmak dizinde:

firebase use --add

Ardından Proje Kimliğinizi seçin ve talimatları izleyin. İstendiğinde, gibi herhangi bir takma adı, seçebilir codelab mesela.

Projenizi içe aktarıp yapılandırdığınıza göre, web uygulamasını ilk kez çalıştırmaya hazırsınız. Bir konsolunu açın cloud-functions-start klasörü ve çalıştırmak firebase deploy --except functions bu sadece Firebase barındırma web uygulamasını dağıtmak olacaktır:

firebase deploy --except functions

Bu, görmeniz gereken konsol çıktısıdır:

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

Web uygulamasını açın

Son satır Barındırma URL'yi göstermesi gerekir. Web uygulaması şimdi https://<project-id>.firebaseapp.com biçiminde olması gereken bu URL'den sunulmalıdır. Aç onu. Bir sohbet uygulamasının çalışan kullanıcı arayüzünü görmelisiniz.

SIGN-IN İLE GOOGLE düğmesini kullanarak uygulamasında Oturum açma ve bazı iletileri ve post resim eklemek için çekinmeyin:

3b1284f5144b54f6.png

Uygulamaya yeni bir tarayıcıda ilk kez giriş yapıyorsanız, istendiğinde bildirimlere izin verdiğinizden emin olun: 8b9d0c66dc36153d.png

Bildirimleri daha sonra etkinleştirmeniz gerekecek.

Yanlışlıkla Block bastıysanız Chrome Omnibar URL'nin sol ve Bildirimler seçilmesiyle ilgili 🔒 Güvenli butonuna tıklayarak bu ayarı değiştirebilirsiniz> Her zaman bu Sitede izin ver:

e926868b0546ed71.png

Şimdi, Cloud Functions için Firebase SDK'sını kullanarak bazı işlevler ekleyeceğiz.

Bulut İşlevleri, bir sunucu kurmak zorunda kalmadan Bulutta çalışan koda kolayca sahip olmanızı sağlar. Firebase Auth, Cloud Storage ve Firebase Realtime Database olaylarına tepki veren işlevlerin nasıl oluşturulacağını göstereceğiz. Auth ile başlayalım.

Bulut Fonksiyonlar için Firebase SDK kullanırken, Fonksiyonlar kodu altında yaşayacak functions (varsayılan olarak) dizinine. Kişisel Fonksiyonlar kodu da bir olduğunu node.js uygulaması ve bu nedenle ihtiyacı package.json uygulamanıza ve listeler bağımlılıkları hakkında bazı bilgiler verir.

Sizin için daha kolay hale getirmek için biz zaten oluşturduk functions/index.js kodunuzu gidecek dosyayı. İlerlemeden önce bu dosyayı incelemekten çekinmeyin.

cd functions
ls

Eğer aşina değilseniz node.js o codelab devam etmeden önce daha bu konuda bilgi edinmek için yardımcı olacaktır.

: Package.json dosyası zaten iki gerekli bağımlılıkları listeler Bulut Fonksiyonlar için Firebase SDK ve Firebase Yönetici SDK'yı . Onları yerel olarak çalıştırmak yüklemek için npm install gelen functions klasörü:

npm install

Şimdi bir göz atalım index.js dosyası:

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.

Önce gerekli modülleri içe aktaracağız ve ardından TODO'lar yerine üç İşlev yazacağız. Önce gerekli Düğüm modüllerini içe aktaralım.

İki modül bu codelab sırasında gerekli olacak, firebase-functions modülü ise Bulut Fonksiyonlar, kuralları tetikleyen yazmamızı verir firebase-admin modülü yönetici erişimi olan bir sunucuda Firebase platformu kullanmak bizi tanır için yazma için örneğin Cloud Firestore veya FCM bildirimleri gönderin.

Gelen index.js dosyası, ilk değiştirin TODO takipçinizin:

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.

Firebase Admin SDK, bir Cloud Functions ortamına veya diğer Google Cloud Platform kapsayıcılarına dağıtıldığında otomatik olarak yapılandırılabilir. Bu, çağrılırken yukarıda ne olduğunu admin.initializeApp();

Şimdi, bir kullanıcı sohbet uygulamanızda ilk kez oturum açtığında çalışan bir İşlev ekleyelim ve kullanıcıyı karşılamak için bir sohbet mesajı ekleyeceğiz.

Sohbet mesajları yapısı

FriendlyChat sohbet akışına gönderilen mesajlar Cloud Firestore'da saklanır. Bir mesaj için kullandığımız veri yapısına bir göz atalım. Bunu yapmak için sohbete "Merhaba Dünya" yazan yeni bir mesaj gönderin:

11f5a676fbb1a69a.png

Bu şu şekilde görünmelidir:

fe6d1c020d0744cf.png

Senin Firebase uygulama konsolunda geliştirin bölümünde Veritabanı tıklayın. Mesaj koleksiyonunu ve yazdığınız mesajı içeren bir belgeyi görmelisiniz:

442c9c10b5e2b245.png

Gördüğünüz gibi, sohbet iletileri ile belge olarak Bulut Firestore saklanır name , profilePicUrl , text ve timestamp nitelikleri eklenen messages koleksiyonu.

Karşılama mesajları ekleme

İlk Bulut Fonksiyon sohbet içine yeni kullanıcıları karşılıyor bir ileti ekler. Bunun için tetikleyici kullanabilirsiniz functions.auth().onCreate fonksiyonunu bir kullanıcı Firebase uygulamasında ilk defa işaretler-her zaman çalışır. Ekle addWelcomeMessages senin içine işlev index.js dosyası:

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

Özel Bu işlevi ekleme exports nesnenin geçerli dosyanın işlevi erişilebilir dışında yapma düğümü'nü yoludur ve Bulut Fonksiyonlar için gereklidir.

Yukarıdaki fonksiyonda, sohbet mesajları listesine "Firebase Bot" tarafından gönderilen yeni bir karşılama mesajı ekliyoruz. Biz kullanarak yapıyoruz add üzerinde yöntemini messages sohbet mesajları saklanır nerede Bulut Firestore içinde koleksiyonu.

Bu zaman uyumsuz bir işlem olduğundan, dönmek gerekir Promise İşlevleri çok erken yürütme çıkmamalı böylece, Bulut Firestore yazma tamamlandığında gösteren.

İşlevi Dağıt

İşlev, yalnızca siz onu dağıttıktan sonra etkin olacaktır. Komut satırı kaçak firebase deploy --only functions :

firebase deploy --only functions

Bu, görmeniz gereken konsol çıktısıdır:

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

işlevi test edin

İşlev başarıyla dağıtıldığında, ilk kez oturum açan bir kullanıcınız olması gerekir.

  1. Barındırma URL kullanarak tarayıcınızda uygulamanızı açın (biçiminde https://<project-id>.firebaseapp.com ).
  2. Yeni bir kullanıcı ile Oturum Aç düğmesini kullanarak app ilk defa oturum.

262535d1b1223c65.png

  1. Oturum açtıktan sonra, otomatik olarak bir karşılama mesajı görüntülenmelidir:

1c70e0d64b23525b.png

Kullanıcılar sohbete her tür görseli yükleyebilir ve özellikle genel sosyal platformlarda rahatsız edici görselleri ılımlı hale getirmek her zaman önemlidir. Sohbete yayınlanıyor görüntülere FriendlyChat olarak içine saklanan Google Bulut Depolama .

Bulut Fonksiyonlar ile, kullanarak yeni resim yüklemelerini algılayabilir functions.storage().onFinalize tetik. Bu, Cloud Storage'a her yeni dosya yüklendiğinde veya değiştirildiğinde çalışır.

Görüntüleri denetlemek için aşağıdaki süreçten geçeceğiz:

  1. Görüntü kullanılarak Şiddet Erişkin olarak işaretlenen veya olup olmadığını kontrol Bulut Vision API
  2. Görüntü işaretlenmişse, onu çalışan Functions örneğine indirin
  3. Kullanarak görüntüyü bulanıklaştır ImageMagick
  4. Bulanık görüntüyü Cloud Storage'a yükleyin

Cloud Vision API'yi etkinleştirin

Bu işlevde Google Cloud Vision API'yi kullanacağımızdan, firebase projenizde API'yi etkinleştirmeniz gerekir. Takip Bu bağlantıyı senin Firebase projeyi seçin ve API sağlar:

5c77fee51ec5de49.png

Bağımlılıkları yükle

Görüntüleri yönetmek için birkaç Node.js paketine ihtiyacımız olacak:

  • Node.js için Google Bulut Vizyon Müşteri Kütüphanesi: @ google-bulut / vizyon uygunsuz resimleri algılamak için Bulut Vision API üzerinden görüntü çalıştırın.
  • Bize süreçleri çalıştırmak için izin A node.js kütüphanesi: çocuk süreç söz ImageMagick komut satırı aracı beri ImageMagick çalıştırmak için tüm fonksiyonlar örneklerinde önceden yüklenmiş geliyor.

Cloud Fonksiyonlar uygulamasına bu iki paket yüklemek için çalışma aşağıdaki npm install --save komutu. Emin dan bunu emin olun functions dizininde.

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

Bu yerel olarak iki paket yüklemek ve beyan bağımlılıkları olarak katacak package.json dosyası.

Bağımlılıkları içe aktarın ve yapılandırın

Yüklenen iki bağımlılıkları ve bazı node.js çekirdek modüllerini (aktarmak için path , os ve fs seni sonra üstüne aşağıdaki satırları ekleyin bu bölümde gerekeceğini) index.js dosyası:

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

İşleviniz bir Google Cloud ortamında çalışacağından, Cloud Storage ve Cloud Vision kitaplıklarını yapılandırmanıza gerek yoktur: projenizi kullanmak için otomatik olarak yapılandırılırlar.

Uygunsuz görüntüleri algılama

Sen kullanarak olacak functions.storage.onChange bir dosya veya klasör oluşturulduğunda veya bir Cloud Storage modifiye bitmez kodunuzu çalıştırır Bulut Fonksiyonlar tetiği. Ekle blurOffensiveImages senin içine Fonksiyonu index.js dosyası:

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

Biz, işlevini çalışacak Bulut Fonksiyonlar örneğinin bazı yapılandırma ekledi Not .runWith({memory: '2GB'}) biz örneği bu şekilde öndeğer yerine belleğin bu irade yardımına 2GB aldığını isteğinde işlev bellek yoğundur.

İşlev tetiklendiğinde, yetişkin veya şiddet içeren olarak işaretlenip işaretlenmediğini algılamak için görüntü Cloud Vision API üzerinden çalıştırılır. Görüntü bu kriterlere göre uygunsuz olarak tespit edilirse biz yapılır görüntüyü bulanık ediyoruz blurImage önümüzdeki göreceğiz fonksiyonu.

Görüntüyü bulanıklaştırma

Aşağıdaki ekleyin blurImage sizin de işlevini index.js dosyası:

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

Yukarıdaki işlevde görüntü ikili dosyası Cloud Storage'dan indirilir. Sonra görüntü ImageMagick en kullanılarak bulanık convert aracı ve bulanık versiyonu yeniden yüklenen Depolama Kova üzerindedir. Ardından, bir miktar disk alanı boşaltmak için Cloud Functions örneğindeki dosyayı sileriz, bunu yapıyoruz çünkü aynı Cloud Functions örneği yeniden kullanılabilir ve dosyalar temizlenmezse diski tükenebilir. Son olarak, sohbet mesajına görüntünün denetlendiğini belirten bir boole ekliyoruz, bu, istemcide mesajın yenilenmesini tetikleyecektir.

İşlevi Dağıt

İşlev, yalnızca siz onu dağıttıktan sonra etkin olacaktır. Komut satırı kaçak firebase deploy --only functions :

firebase deploy --only functions

Bu, görmeniz gereken konsol çıktısıdır:

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

Fonksiyonu test edin

İşlev başarıyla dağıtıldıktan sonra:

  1. Barındırma URL kullanarak tarayıcınızda uygulamanızı açın (biçiminde https://<project-id>.firebaseapp.com ).
  2. Uygulamaya giriş yaptıktan sonra bir resim yükleyin: 4db9fdab56703e4a.png
  3. Yüklemesi için en iyi hücum resim seçin (veya bunu kullanabilirsiniz Zombi yeme eti !) Ve birkaç dakika sonra görüntünün bulanık sürümü ile yazılan yenileme görmelisiniz: 83dd904fbaf97d2b.png

Bu bölümde, yeni bir mesaj gönderildiğinde sohbetin katılımcılarına bildirim gönderen bir Bulut İşlevi ekleyeceksiniz.

Kullanılması Firebase Bulut Mesajlaşma Çapraz platform ve güvenilir bir şekilde kullanıcılara bildirim gönderebilir (FKM). Bir kullanıcıya bildirim göndermek için FCM cihaz belirtecine ihtiyacınız vardır. Kullandığımız sohbet web uygulaması, uygulamayı yeni bir tarayıcıda veya cihazda ilk kez açtıklarında, kullanıcılardan cihaz belirteçlerini zaten toplar. Bu simgeler Cloud Firestore saklanır fcmTokens koleksiyonu.

Eğer geçmesi bir web uygulaması üzerinde FCM cihaz belirteçleri almak öğrenmek istiyorsanız Firebase Web Codelab .

Bildirim gönder

Yeni iletiler kullandığınız olacak ne zaman yayınlanacağını algılamak için functions.firestore.document().onCreate yeni bir nesne Bulut Firestore belirli bir yolda oluşturulduğunda kodunuzu çalışan Bulut Fonksiyonlar tetik. Ekle sendNotifications senin içine işlev index.js dosyası:

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

Biz Bulut Firestore veritabanından tüm kullanıcıların cihaz belirteçleri toplama ve kullanma bunların her biri bir bildirim gönderiyor Yukarıdaki Fonksiyon olarak admin.messaging().sendToDevice fonksiyonu.

Belirteçleri temizleyin

Son olarak, artık geçerli olmayan belirteçleri kaldırmak istiyoruz. Bu, bir zamanlar kullanıcıdan aldığımız jeton artık tarayıcı veya cihaz tarafından kullanılmadığında olur. Örneğin, kullanıcı tarayıcı oturumu için bildirim iznini iptal ederse bu olur. Aşağıda bu eklenti yapmak için cleanupTokens sizin işlev index.js dosyası:

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

İşlevi Dağıt

İşlev, yalnızca siz onu dağıttıktan sonra etkin olacaktır. Komut satırı kaçak firebase deploy --only functions :

firebase deploy --only functions

Bu, görmeniz gereken konsol çıktısıdır:

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

işlevi test edin

  1. Fonksiyon başarıyla dağıtmış sonra, barındırma URL'yi kullanarak tarayıcınızda uygulamayı açıp (biçiminde https://<project-id>.firebaseapp.com ).
  2. Uygulamada ilk kez oturum açıyorsanız, istendiğinde bildirimlere izin verdiğinizden emin olun: 8b9d0c66dc36153d.png
  3. Sohbet uygulaması sekmesini kapatın veya farklı bir sekme görüntüleyin: Bildirimler yalnızca uygulama arka plandaysa görünür. Eğer uygulama ön planda iken mesaj almak öğrenmek istiyorsanız bir göz Dokümanlarımız .
  4. Farklı bir tarayıcı (veya Gizli pencere) kullanarak uygulamada oturum açın ve bir mesaj gönderin. İlk tarayıcı tarafından görüntülenen bir bildirim görmelisiniz: 45282ab12b28b926.png

Cloud Functions için Firebase SDK'sını kullandınız ve bir sohbet uygulamasına sunucu tarafı bileşenleri eklediniz.

Neyi kapsadık

  • Cloud Functions için Firebase SDK'sını kullanarak Cloud Functions Yazma.
  • Auth, Cloud Storage ve Cloud Firestore etkinliklerine dayalı olarak Bulut İşlevlerini tetikleyin.
  • Web uygulamanıza Firebase Bulut Mesajlaşma desteği ekleyin.
  • Firebase CLI'yi kullanarak Dağıtılan Bulut İşlevleri.

Sonraki adımlar

Daha fazla bilgi edin