Google is committed to advancing racial equity for Black communities. See how.
Bu sayfa, Cloud Translation API ile çevrilmiştir.
Switch to English

Firebase için Cloud Functions

Bu kod laboratuarında, bir Chat Web uygulamasını iyileştirmek üzere Google Cloud Functions için Firebase SDK'sını ve Chat uygulaması kullanıcılarına bildirim göndermek için Cloud Functions'ı nasıl kullanacağınızı öğreneceksiniz.

3b1284f5144b54f6.png

Ne öğreneceksin

  • Firebase SDK'yı kullanarak Google Cloud Functions oluşturun.
  • Auth, Cloud Storage ve Cloud Firestore etkinliklerine göre Cloud Functions'ı tetikleyin.
  • Firebase Cloud Messaging desteğini web uygulamanıza ekleyin.

Neye ihtiyacın olacak

  • WebStorm , Atom veya Sublime gibi seçtiğiniz IDE / metin düzenleyicisi.
  • NodeJS v8 kurulu olarak kabuk komutlarını çalıştırmak için bir terminal.
  • Chrome gibi bir tarayıcı.
  • Örnek kod. Bunun için bir sonraki adıma bakın.

GitHub deposunu komut satırından klonlayın:

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 örnek kod dizinindeki cloud-functions-start dizini. Bu dizin, tamamen işlevsel bir Sohbet Web Uygulamasından oluşan kod laboratuvarı için başlangıç ​​kodunu içerir.

Proje oluştur

Firebase konsolunda Proje Ekle'yi tıklayın ve buna FriendlyChat adını verin .

Proje Oluştur'u tıklayın.

Google Auth'u etkinleştirin

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 Geliştirme bölümü> Kimlik Doğrulama > OTURUM AÇMA YÖNTEMİ sekmesini açın (veya oraya gitmek için burayı tıklayın ) Google Oturum Açma Sağlayıcısını etkinleştirmeniz 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 uygulamanızın herkese açık adını Friendly Chat olarak ayarlamaktan çekinmeyin:

8290061806aacb46.png

Bulut Depolamayı Etkinleştir

Uygulama, resimleri yüklemek için Bulut Depolamayı kullanır. Firebase projenizde Bulut Depolamayı etkinleştirmek için Depolama bölümünü ziyaret edin ve Başlayın düğmesini tıklayın. Ardından, güvenlik kurallarıyla ilgili sorumluluk reddi beyanını aldığınızda Anladım seçeneğine tıklayın.

842ad84821323ef5.png

Firebase Komut Satırı Arayüzü (CLI), web uygulamasını yerel olarak sunmanıza ve web uygulamanızı ve Cloud Functions'ı dağıtmanıza olanak tanır.

CLI'yi yüklemek 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 ç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, yukarıda gösterildiği gibi yükseltmek için npm install -g firebase-tools çalıştırın.

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

firebase login

cloud-functions-start dizininde olduğunuzdan emin olun ve ardından Firebase Projenizi kullanmak için Firebase CLI'yi kurun:

firebase use --add

Ardından Proje Kimliğinizi seçin ve talimatları izleyin. İstendiğinde, örneğin codelab gibi herhangi bir Takma Ad seçebilirsiniz.

Artık projenizi içe aktardığınıza ve yapılandırdığınıza göre, web uygulamasını ilk kez çalıştırmaya hazırsınız. cloud-functions-start klasöründe bir konsol açın ve firebase deploy --except functions çalıştırın - firebase deploy --except functions bu, web uygulamasını yalnızca firebase deploy --except functions :

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'sini göstermelidir. Web uygulaması şimdi https: // <proje-kimliği> .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.

GOOGLE İLE OTURUM AÇ düğmesini kullanarak uygulamada oturum açın ve bazı mesajlar eklemekten ve resim göndermekten çekinmeyin:

3b1284f5144b54f6.png

Uygulamada yeni bir tarayıcıda ilk kez oturum açarsanız, sorulduğunda bildirimlere izin verdiğinizden emin olun: 8b9d0c66dc36153d.png

Daha sonraki bir noktada bildirimleri etkinleştirmeniz gerekecek.

Yanlışlıkla Engelle'yi tıkladıysanız, Chrome Omnibar'da URL'nin solundaki 🔒 Güvenli düğmesini tıklayıp Bu Sitede Bildirimler> Her Zaman İzin Ver'i seçerek bu ayarı değiştirebilirsiniz:

e926868b0546ed71.png

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

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

Cloud Functions için Firebase SDK'yı kullanırken, Functions kodunuz functions dizininin altında yer alır (varsayılan olarak). Functions kodunuz aynı zamanda bir Node.js uygulamasıdır ve bu nedenle uygulamanız hakkında bazı bilgiler veren ve bağımlılıkları listeleyen bir package.json ihtiyaç duyar.

İşinizi kolaylaştırmak için, kodunuzun gideceği yere functions/index.js dosyasını zaten oluşturduk. İlerlemeden önce bu dosyayı incelemekten çekinmeyin.

cd functions
ls

Node.js hakkında bilgi sahibi değilseniz, kod laboratuvarına devam etmeden önce bu konuda daha fazla bilgi edinmenize yardımcı olacaktır.

Package.json dosyası zaten iki gerekli bağımlılığı listeliyor: Cloud Functions için Firebase SDK ve Firebase Admin SDK . Bunları yerel olarak npm install için functions klasöründen npm install çalıştırın:

npm install

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

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. Öncelikle gerekli Node modüllerini içeri aktaralım.

Bu codelab sırasında iki modül gerekli olacak; firebase-functions modülü, Cloud Functions tetikleme kurallarını firebase-admin izin verirken firebase-admin modülü, firebase-admin platformunu yönetici erişimine sahip bir sunucuda kullanmamıza izin verir, örneğin Cloud Firestore veya FCM bildirimleri gönderin.

index.js dosyasında, ilk TODO aşağıdakilerle değiştirin:

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ında veya diğer Google Cloud Platform kapsayıcılarında dağıtıldığında otomatik olarak yapılandırılabilir. admin.initializeApp(); çağırırken yukarıda yaptığımız şey 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ı ekleyelim.

Sohbet mesajları yapısı

FriendlyChat sohbet akışına gönderilen mesajlar, Cloud Firestore'da saklanır. 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

Firebase uygulama konsolunuzda, Geliştirme bölümünün altındaki Veritabanı'nı tıklayın. Mesaj koleksiyonunu ve yazdığınız mesajı içeren bir belgeyi görmelisiniz:

442c9c10b5e2b245.png

Gördüğünüz gibi, sohbet mesajları Cloud Firestore'da messages koleksiyonuna eklenen name , profilePicUrl , text ve timestamp özellikleriyle bir belge olarak saklanır.

Karşılama mesajları eklemek

İlk Bulut İşlevi, sohbete yeni kullanıcıları karşılayan bir mesaj ekler. Bunun için, bir kullanıcı Firebase uygulamanızda ilk kez oturum açtığında işlevi çalıştıran tetik functions.auth().onCreate kullanabiliriz. addWelcomeMessages işlevini index.js dosyanıza ekleyin:

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

Bu işlevi özel exports nesnesine eklemek, Node'un işlevi geçerli dosyanın dışında erişilebilir hale getirme yoludur ve Cloud Functions için gereklidir.

Yukarıdaki işlevde, sohbet mesajları listesine "Firebase Bot" tarafından yayınlanan yeni bir karşılama mesajı ekliyoruz. Bunu, sohbetin mesajlarının depolandığı Cloud Firestore'daki messages koleksiyonunda add yöntemini kullanarak yapıyoruz.

Bu eşzamansız bir işlem olduğundan, Functions'ın yürütmeden çok erken çıkmaması için Cloud Firestore yazma işleminin ne zaman bittiğini belirten Promise'ı döndürmemiz gerekir.

İşlevi Dağıtın

İşlev, yalnızca onu konuşlandırdıktan sonra etkin olacaktır. Komut satırında firebase deploy --only functions komutunu çalıştırın:

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

İşlevi test edin

İşlev başarıyla dağıtıldıktan sonra, ilk kez oturum açan bir kullanıcıya sahip olmanız gerekir.

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

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 resmi yükleyebilir ve özellikle genel sosyal platformlarda rahatsız edici resimleri denetlemek her zaman önemlidir. FriendlyChat'te sohbette yayınlanan görüntüler Google Cloud Storage'da saklanır.

Cloud Functions ile functions.storage().onFinalize tetikleyicisini kullanarak yeni görüntü yüklemelerini tespit edebilirsiniz. Bu, Cloud Storage'da her yeni dosya yüklendiğinde veya değiştirildiğinde çalışır.

Görüntüleri denetlemek için aşağıdaki süreci uygulayacağız:

  1. Cloud Vision API kullanılarak görüntünün Yetişkin veya Şiddet içerikli olarak işaretlenip işaretlenmediğini kontrol edin
  2. Görüntü işaretlenmişse, onu çalışan Functions örneğine indirin
  3. ImageMagick'i kullanarak görüntüyü bulanıklaştırın
  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ız için, firebase projenizde API'yi etkinleştirmeniz gerekir. Bu bağlantıyı izleyin, Firebase projenizi seçin ve API'yi etkinleştirin:

5c77fee51ec5de49.png

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

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

  • Node.js için Google Cloud Vision İstemci Kitaplığı: @ google-cloud / vision , uygunsuz görüntüleri algılamak üzere görüntüyü Cloud Vision API aracılığıyla çalıştırmak için
  • İşlemleri çalıştırmamıza izin veren bir Node.js kitaplığı: ImageMagick komut satırı aracı tüm Fonksiyon örneklerine önceden yüklenmiş olarak geldiğinden, alt işlem- ImageMagick'i çalıştırma sözü .

Bu iki paketi Cloud Functions uygulamanıza npm install --save için aşağıdaki npm install --save komutunu çalıştırın. Bunu functions dizininden yaptığınızdan emin olun.

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

Bu, iki paketi yerel olarak kuracak ve bunları package.json dosyanıza bildirilen bağımlılıklar olarak ekleyecektir.

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

Yüklenen iki bağımlılığı ve bu bölümde ihtiyaç duyacağımız bazı Node.js çekirdek modüllerini ( path , os ve fs ) içe aktarmak için aşağıdaki satırları index.js dosyanızın üstüne ekleyin:

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

Bir Cloud Storage paketinde bir dosya veya klasör oluşturulur ya da değiştirilir yapılmaz kodunuzu çalıştıran functions.storage.onChange Cloud Functions tetikleyicisini kullanacaksınız. blurOffensiveImages İşlevini index.js dosyanıza ekleyin:

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'}) ile işlevi çalıştıracak Cloud Functions örneğinin bazı yapılandırmalarını eklediğimizi unutmayın, örneğin varsayılan yerine 2 GB bellek almasını istiyoruz, bu yardımcı olacaktır. işlev bellek yoğun.

İşlev tetiklendiğinde görüntü, yetişkin veya şiddet içerikli olarak işaretlenip işaretlenmediğini tespit etmek için Cloud Vision API üzerinden çalıştırılır. Görüntü bu kriterlere göre uygunsuz olarak algılanırsa, daha sonra blurImage işlevinde yapılan görüntüyü bulanıklaştırıyoruz.

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. Daha sonra, ImageMagick'in convert aracı kullanılarak görüntü bulanıklaştırılır ve bulanık sürüm Depolama Kovasına yeniden yüklenir. Ardından, bir miktar disk alanı boşaltmak için Cloud Functions örneğindeki dosyayı siliyoruz, bunu yapıyoruz çünkü aynı Cloud Functions örneği yeniden kullanılabilir ve dosyalar temizlenmezse disk tükenebilir. Son olarak, sohbet mesajına resmin denetlendiğini belirten bir boole ekliyoruz, bu, istemcide mesajın yenilenmesini tetikleyecektir.

İşlevi Dağıtın

İşlev, yalnızca onu konuşlandırdıktan sonra etkin olacaktır. Komut satırında firebase deploy --only functions komutunu çalıştırın:

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

İşlevi test edin

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

  1. Barındırma URL'sini kullanarak uygulamanızı tarayıcınızda açın ( https://<project-id>.firebaseapp.com ).
  2. Uygulamada oturum açtıktan sonra bir resim yükleyin: 4db9fdab56703e4a.png
  3. Yüklemek için en iyi saldırgan resminizi seçin (veya bu eti yiyen Zombie'yi kullanabilirsiniz!) Ve birkaç dakika sonra yayınınızın resmin bulanık bir versiyonuyla yenilendiğini görmelisiniz: 83dd904fbaf97d2b.png

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

Firebase Cloud Messaging (FCM) kullanarak, kullanıcılarınıza çapraz platform ve güvenilir bir şekilde bildirim gönderebilirsiniz. Bir kullanıcıya bildirim göndermek için FCM cihaz jetonuna ihtiyacınız vardır. Kullanmakta olduğumuz sohbet web uygulaması, uygulamayı yeni bir tarayıcıda veya cihazda ilk kez açtıklarında kullanıcılardan cihaz jetonları topluyor. Bu belirteçler, fcmTokens koleksiyonundaki Cloud Firestore'da saklanır.

Bir web uygulamasında FCM cihaz jetonlarını nasıl edineceğinizi öğrenmek istiyorsanız, Firebase Web Codelab'i inceleyebilirsiniz .

Bildirim gönder

Yeni mesajların ne zaman yayınlandığını tespit etmek için, Cloud Firestore'un belirli bir yolunda yeni bir nesne oluşturulduğunda kodunuzu çalıştıran functions.firestore.document().onCreate Cloud Functions tetikleyicisini kullanacaksınız. sendNotifications işlevini index.js dosyanıza ekleyin:

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

Yukarıdaki admin.messaging().sendToDevice , Cloud Firestore Veritabanından tüm kullanıcıların cihaz jetonlarını topluyoruz ve admin.messaging().sendToDevice işlevini kullanarak bunların her birine bir bildirim gönderiyoruz.

Jetonları temizleyin

Son olarak, artık geçerli olmayan jetonları kaldırmak istiyoruz. Bu, bir zamanlar kullanıcıdan aldığımız jeton artık tarayıcı veya cihaz tarafından kullanılmadığında gerçekleşir. Örneğin, kullanıcı tarayıcı oturumu için bildirim iznini iptal ettiğinde bu gerçekleşir. Bunu yapmak için index.js dosyanıza aşağıdaki cleanupTokens işlevini ekleyin:

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

İşlevi Dağıtın

İşlev, yalnızca onu konuşlandırdıktan sonra etkin olacaktır. Komut satırında firebase deploy --only functions komutunu çalıştırın:

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

İşlevi test edin

  1. İşlev başarıyla dağıtıldıktan sonra, uygulamanızı barındırma URL'sini kullanarak tarayıcınızda açın ( https://<project-id>.firebaseapp.com ).
  2. Uygulamada ilk kez oturum açarsanız, sorulduğunda 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üntülenir. Uygulamanız ön plandayken nasıl mesaj alacağınızı öğrenmek istiyorsanız, belgelerimize bir göz atın.
  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'yı kullandınız ve bir sohbet uygulamasına sunucu tarafı bileşenleri eklediniz.

Neleri ele aldık

  • Cloud Functions için Firebase SDK'yı kullanarak Cloud Functions'ı yazma.
  • Auth, Cloud Storage ve Cloud Firestore etkinliklerine göre Cloud Functions'ı tetikleyin.
  • Firebase Cloud Messaging desteğini web uygulamanıza ekleyin.
  • Firebase CLI kullanılarak Cloud Functions dağıtıldı.

Sonraki adımlar

Daha fazla bilgi edin