Cloud Functions para Firebase

1. Información general

En este laboratorio de código, aprenderá a usar el SDK de Firebase para Google Cloud Functions para mejorar una aplicación web de chat y cómo usar Cloud Functions para enviar notificaciones a los usuarios de la aplicación de chat.

3b1284f5144b54f6.png

Lo que aprenderás

  • Crea funciones de Google Cloud con el SDK de Firebase.
  • Active Cloud Functions en función de los eventos de autenticación, almacenamiento en la nube y Cloud Firestore.
  • Agrega compatibilidad con Firebase Cloud Messaging a tu aplicación web.

Lo que necesitarás

  • Una tarjeta de crédito. Cloud Functions para Firebase requiere el plan Firebase Blaze, lo que significa que tendrá que habilitar la facturación en su proyecto de Firebase con una tarjeta de crédito.
  • El editor IDE / texto de su elección como WebStorm , Atom o sublime .
  • Un terminal para ejecutar comandos de shell con NodeJS v8 instalado.
  • Un navegador como Chrome.
  • El código de muestra. Vea el siguiente paso para esto.

2. Obtén el código de muestra

Clonar el repositorio GitHub desde la línea de comandos:

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

Importar la aplicación de inicio

Con su IDE, abra o importe el android_studio_folder.png cloud-functions-start directorio desde el directorio de código de ejemplo. Este directorio contiene el código de inicio para el laboratorio de código que consiste en una aplicación web de chat completamente funcional.

3. Crea un proyecto de Firebase y configura tu aplicación.

Crear proyecto

En la consola de Firebase haga clic en Agregar proyecto y lo llaman FriendlyChat.

Haga clic en Crear proyecto.

Actualice al plan Blaze

Para utilizar las funciones de la nube de Firebase tendrá que upgade su proyecto Firebase al plan de facturación Blaze . Esto requerirá que agregue una tarjeta de crédito u otro instrumento de facturación a su cuenta de Google Cloud.

Todos los proyectos de Firebase, incluidos los del plan Blaze, aún tienen acceso a las cuotas de uso gratuitas para Cloud Functions. Los pasos descritos en este codelab estarán dentro de los límites de uso del nivel gratuito. Sin embargo, verá pequeñas cargas ( aproximadamente $ 0,03 ) de almacenamiento en la nube que se utiliza para alojar sus funciones forman la nube imágenes.

Si no tiene acceso a una tarjeta de crédito o se siente incómodo de continuar con el plan de Blaze, considere el uso de la Firebase emulador suite que le permitirá emular las funciones de la nube de forma gratuita en su máquina local.

Habilitar la autenticación de Google

Para permitir que los usuarios inicien sesión en la aplicación, usaremos la autenticación de Google, que debe estar habilitada.

En la consola de Firebase abrir la sección> Autenticación> pestaña SIGNO EN FORMA Desarrollar (o haga clic aquí para ir allí) necesita habilitar el inicio de sesión en Google proveedor y haga clic en GUARDAR. Esto permitirá a los usuarios iniciar sesión en la aplicación web con sus cuentas de Google.

También se sienten libres de establecer el nombre del lado público de su aplicación a friendly chat:

8290061806aacb46.png

Habilitar almacenamiento en la nube

La aplicación usa Cloud Storage para cargar fotos. Para habilitar el almacenamiento en la nube en su visita del proyecto Firebase la sección de almacenamiento y haga clic en el botón empezar. Luego haz clic Got It cuando reciba el aviso sobre las reglas de seguridad.

842ad84821323ef5.png

4. Instale la interfaz de línea de comandos de Firebase

La interfaz de línea de comandos de Firebase (CLI) te permitirá entregar la aplicación web de forma local e implementar tu aplicación web y Cloud Functions.

Para instalar o actualizar la CLI, ejecute el siguiente comando npm:

npm -g install firebase-tools

Para verificar que la CLI se haya instalado correctamente, abra una consola y ejecute:

firebase --version

Asegúrese de que la versión de la base del fuego CLI está por encima de 4.0.0 para que tenga todas las últimas características requeridas para las funciones de la nube. Si no es así, ejecute npm install -g firebase-tools para mejorar como se muestra arriba.

Autorice Firebase CLI ejecutando:

firebase login

Asegúrese de que está en la cloud-functions-start el directorio a continuación, establecer la base del fuego CLI para utilizar su Proyecto Firebase:

firebase use --add

Luego, seleccione su ID de proyecto y siga las instrucciones. Cuando se le solicite, se puede elegir cualquier alias, como codelab por ejemplo.

5. Implementar y ejecutar la aplicación web

Ahora que ha importado y configurado su proyecto, está listo para ejecutar la aplicación web por primera vez. Abra una consola en la cloud-functions-start carpeta y ejecutar firebase deploy --except functions esto sólo se desplegará la aplicación web a Firebase de alojamiento:

firebase deploy --except functions

Esta es la salida de la consola que debería ver:

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

Abra la aplicación web

La última línea debe mostrar la URL de alojamiento. La aplicación web ahora debería servirse desde esta URL, que debería tener el formato https: // <project-id> .firebaseapp.com. Abrelo. Debería ver la interfaz de usuario en funcionamiento de una aplicación de chat.

Iniciar sesión en la aplicación utilizando el botón Iniciar sesión con GOOGLE y no dude en añadir algunos mensajes e imágenes de correos:

3b1284f5144b54f6.png

Si inicia sesión en la aplicación por primera vez en un nuevo navegador, asegúrese de permitir las notificaciones cuando se le solicite: 8b9d0c66dc36153d.png

Necesitaremos que tengas habilitadas las notificaciones en un momento posterior.

Si ha hecho clic accidentalmente bloque se puede cambiar esta configuración haciendo clic en el botón 🔒 seguro a la izquierda de la URL en la Chrome Omnibar y selección de Notificaciones> Permitir siempre en este sitio:

e926868b0546ed71.png

Ahora agregaremos algunas funciones con el SDK de Firebase para Cloud Functions.

6. El directorio de funciones

Cloud Functions le permite tener fácilmente código que se ejecuta en la nube sin tener que configurar un servidor. Le mostraremos cómo crear funciones que reaccionen a los eventos de Firebase Auth, Cloud Storage y Firebase Realtime Database. Comencemos con Auth.

Cuando se utiliza el SDK Firebase para las funciones de la nube, su código de Funciones vivirá bajo la functions de directorio (por defecto). Su código de funciones es también un Node.js aplicación y por lo tanto necesita un package.json que da alguna información sobre su aplicación y enumera las dependencias.

Para que sea más fácil para usted que ya hemos creado la functions/index.js archivo en el que el código irá. Siéntase libre de inspeccionar este archivo antes de seguir adelante.

cd functions
ls

Si no está familiarizado con Node.js que le ayudará a aprender más sobre él antes de continuar el laboratorio de programación.

El archivo package.json ya se enumera dos dependencias necesarias: el SDK Firebase para las funciones de la nube y el SDK del administrador Firebase . Para instalarlos ejecutan localmente npm install de las functions de carpetas:

npm install

Ahora vamos a echar un vistazo a la index.js archivo:

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.

Primero importaremos los módulos requeridos y luego escribiremos tres funciones en lugar de las tareas pendientes. Primero, importemos los módulos de nodo requeridos.

7. Importa los módulos de administración de Cloud Functions y Firebase

Se requerirán dos módulos durante este laboratorio de programación, la firebase-functions módulo nos permite escribir las funciones de la nube desencadenan reglas, mientras que la firebase-admin módulo nos permite usar la plataforma Firebase en un servidor con acceso de administrador, por ejemplo, escribir en el Cloud Firestore o envía notificaciones de FCM.

En el index.js archivo, reemplace la primera TODO con lo siguiente:

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.

El SDK de Firebase Admin se puede configurar automáticamente cuando se implementa en un entorno de Cloud Functions u otros contenedores de Google Cloud Platform. Esto es lo que hacemos por encima de al llamar admin.initializeApp();

Ahora agreguemos una función que se ejecuta cuando un usuario inicia sesión por primera vez en su aplicación de chat y agregaremos un mensaje de chat para darle la bienvenida al usuario.

8. Bienvenida a nuevos usuarios

Estructura de mensajes de chat

Los mensajes publicados en el feed de chat de FriendlyChat se almacenan en Cloud Firestore. Echemos un vistazo a la estructura de datos que usamos para un mensaje. Para hacer esto, publique un nuevo mensaje en el chat que diga "Hola mundo":

11f5a676fbb1a69a.png

Esto debería aparecer como:

fe6d1c020d0744cf.png

En la consola de aplicación Firebase haga clic en Base de datos en la sección Revelado. Debería ver la colección de mensajes y un documento que contiene el mensaje que escribió:

442c9c10b5e2b245.png

Como se puede ver, los mensajes de chat se almacenan en la nube Firestore como un documento con el name , profilePicUrl , text y timestamp atributos añade a la messages colección.

Agregar mensajes de bienvenida

La primera función de la nube añade un mensaje que da la bienvenida a los nuevos usuarios en el chat. Para ello podemos utilizar el gatillo functions.auth().onCreate que se ejecuta la función cada vez que un usuario inicia sesión en por primera vez en su aplicación Firebase. Añadir los addWelcomeMessages funcionan en su index.js archivo:

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

La adición de esta función al especiales exports objeto es forma de hacer la función accesible fuera del archivo actual del nodo y se requiere para las funciones de la nube.

En la función anterior, estamos agregando un nuevo mensaje de bienvenida publicado por "Firebase Bot" a la lista de mensajes de chat. Estamos haciendo esto utilizando el add método en el messages de recogida en la nube Firestore que es donde se almacenan los mensajes de chat.

Dado que esta es una operación asíncrona, tenemos que devolver la promesa que indica cuando la escritura de la nube Firestore ha terminado, por lo que las funciones no sale de la ejecución demasiado pronto.

Implementar la función

La función solo estará activa después de que la haya implementado. En la línea de comando de marcha firebase deploy --only functions :

firebase deploy --only functions

Esta es la salida de la consola que debería ver:

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

Prueba la función

Una vez que la función se haya implementado correctamente, deberá tener un usuario que inicie sesión por primera vez.

  1. Abra su aplicación en su navegador usando el URL de alojamiento (en forma de https://<project-id>.firebaseapp.com ).
  2. Con un nuevo usuario, inicia sesión por primera vez en su aplicación utilizando el botón Iniciar sesión.

262535d1b1223c65.png

  1. Después de iniciar sesión, se debe mostrar un mensaje de bienvenida automáticamente:

1c70e0d64b23525b.png

9. Moderación de imágenes

Los usuarios pueden subir todo tipo de imágenes en el chat, y siempre es importante moderar las imágenes ofensivas, especialmente en las plataformas sociales públicas. En FriendlyChat las imágenes que se publican en el chat son almacenados en Google Cloud Storage .

Con las funciones de la nube, se puede detectar nuevos archivos de imagen utilizando el functions.storage().onFinalize gatillo. Esto se ejecutará cada vez que se cargue o modifique un archivo nuevo en Cloud Storage.

Para moderar imágenes pasaremos por el siguiente proceso:

  1. Compruebe si la imagen se marca como adulto o violenta utilizando la API de nube Visión
  2. Si la imagen se ha marcado, descárguela en la instancia de Functions en ejecución
  3. Difuminar la imagen utilizando ImageMagick
  4. Sube la imagen borrosa a Cloud Storage

Habilita la API de Cloud Vision

Dado que usaremos la API de Google Cloud Vision en esta función, debe habilitar la API en su proyecto de base de fuego. Siga este enlace , seleccione su proyecto Firebase y habilitar la API:

5c77fee51ec5de49.png

Instalar dependencias

Para moderar las imágenes, necesitaremos algunos paquetes de Node.js:

  • La biblioteca de clientes de Google Cloud Visión para Node.js: @ google-cloud / visión para ejecutar la imagen a través de la API de la nube de la visión para detectar imágenes inapropiadas.
  • Una biblioteca Node.js que nos permite ejecutar procesos: niño-proceso-promesa para ejecutar ImageMagick ya que la herramienta de línea de comandos de ImageMagick viene pre-instalado en todas las instancias funciones.

Para instalar estos dos paquetes en su aplicación Funciones Nube, ejecute el siguiente npm install --save comando. Asegúrese de que usted hace esto de la functions directorio.

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

Esto instalará los dos paquetes a nivel local y agregarlos como dependencias declaradas en su package.json archivo.

Importar y configurar dependencias

Para importar las dos dependencias que se instalaron y algunos módulos de Node.js básicos ( path , os y fs ) que necesitaremos en esta sección añadir las siguientes líneas a la parte superior de su index.js archivo:

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

Dado que su función se ejecutará dentro de un entorno de Google Cloud, no es necesario configurar las bibliotecas de Cloud Storage y Cloud Vision: se configurarán automáticamente para usar su proyecto.

Detectando imágenes inapropiadas

Usted va a utilizar el functions.storage.onChange funciones de disparo de la nube que se ejecuta el código tan pronto como se crea o modifica en un cubo de almacenamiento en la nube de un archivo o carpeta. Añadir el blurOffensiveImages Función en su index.js archivo:

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

Tenga en cuenta que hemos añadido una cierta configuración de la instancia de la nube funciones que ejecutará la función, con .runWith({memory: '2GB'}) que estamos solicitando que la instancia se pone 2 GB de memoria en lugar de la opción predeterminada, esta ayuda ya que esta voluntad la función consume mucha memoria.

Cuando se activa la función, la imagen se ejecuta a través de la API de Cloud Vision para detectar si está marcada como adulta o violenta. Si se detecta la imagen apropiada sobre la base de estos criterios que estamos borrando la imagen que se realiza en el blurImage función que veremos a continuación.

Difuminar la imagen

Agregue el siguiente blurImage función en su index.js archivo:

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

En la función anterior, la imagen binaria se descarga de Cloud Storage. A continuación, la imagen es borrosa usando ImageMagick de convert herramienta y la versión borrosa es re-cargado en el Cubo de almacenamiento. Luego borramos el archivo en la instancia de Cloud Functions para liberar algo de espacio en el disco, hacemos esto porque la misma instancia de Cloud Functions puede volver a usarse y si los archivos no se limpian, podría quedarse sin disco. Finalmente agregamos un booleano al mensaje de chat que indica que la imagen fue moderada, esto activará una actualización del mensaje en el cliente.

Implementar la función

La función solo estará activa después de que la haya implementado. En la línea de comando de marcha firebase deploy --only functions :

firebase deploy --only functions

Esta es la salida de la consola que debería ver:

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

Prueba la función

Una vez que la función se haya implementado correctamente:

  1. Abra su aplicación en su navegador usando el URL de alojamiento (en forma de https://<project-id>.firebaseapp.com ).
  2. Una vez que haya iniciado sesión en la aplicación, cargue una imagen: 4db9fdab56703e4a.png
  3. Elija su mejor imagen ofensiva para subir (o puede utilizar esta carne comer zombi !) Y después de unos momentos debe consultar a su actualización post con una versión borrosa de la imagen: 83dd904fbaf97d2b.png

10. Notificaciones de mensajes nuevos

En esta sección, agregará una función de nube que envía notificaciones a los participantes del chat cuando se publica un nuevo mensaje.

Usando Firebase mensajería en la nube (FCM), puede enviar notificaciones a los usuarios en una plataforma cruzada y de forma fiable. Para enviar una notificación a un usuario, necesita su token de dispositivo FCM. La aplicación web de chat que estamos usando ya recopila tokens de dispositivo de los usuarios cuando abren la aplicación por primera vez en un nuevo navegador o dispositivo. Estas fichas se almacenan en la nube Firestore en el fcmTokens colección.

Si usted desea aprender cómo conseguir tokens de dispositivo FCM en una aplicación web se puede ir a través de la Web de experimento de código Firebase .

Enviar notificaciones

Para detectar cuando los nuevos mensajes se publican que va a utilizar el functions.firestore.document().onCreate nube Funciones de disparo que se ejecuta su código cuando se crea un nuevo objeto en una trayectoria determinada de la nube Firestore. Añadir los sendNotifications funcionan en su index.js archivo:

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

En la función de arriba estamos reuniendo tokens de dispositivo de todos los usuarios de la base de datos de la nube Firestore y el envío de una notificación a cada uno de ellos utilizando el admin.messaging().sendToDevice función.

Limpiar las fichas

Por último, queremos eliminar los tokens que ya no son válidos. Esto sucede cuando el navegador o dispositivo ya no usa el token que una vez obtuvimos del usuario. Por ejemplo, esto sucede si el usuario ha revocado el permiso de notificación para su sesión de navegador. Para ello añadimos las siguientes cleanupTokens funcionan en su index.js archivo:

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

Implementar la función

La función solo estará activa después de que la haya implementado. En la línea de comando de marcha firebase deploy --only functions :

firebase deploy --only functions

Esta es la salida de la consola que debería ver:

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

Prueba la función

  1. Una vez que la función se ha implementado con éxito, abrir la aplicación en su navegador usando el URL de alojamiento (en forma de https://<project-id>.firebaseapp.com ).
  2. Si inicia sesión en la aplicación por primera vez, asegúrese de permitir las notificaciones cuando se le solicite: 8b9d0c66dc36153d.png
  3. Cierre la pestaña de la aplicación de chat o muestre una pestaña diferente: las notificaciones aparecen solo si la aplicación está en segundo plano. Si usted desea aprender cómo recibir mensajes mientras la aplicación está en primer plano echar un vistazo a nuestra documentación .
  4. Con un navegador diferente (o una ventana de incógnito), inicie sesión en la aplicación y publique un mensaje. Debería ver una notificación mostrada por el primer navegador: 45282ab12b28b926.png

11. ¡Felicitaciones!

Usó el SDK de Firebase para Cloud Functions y agregó componentes del lado del servidor a una aplicación de chat.

Lo que hemos cubierto

  • Creación de Cloud Functions con el SDK de Firebase para Cloud Functions.
  • Active Cloud Functions en función de los eventos de autenticación, almacenamiento en la nube y Cloud Firestore.
  • Agrega compatibilidad con Firebase Cloud Messaging a tu aplicación web.
  • Implementó Cloud Functions con Firebase CLI.

Próximos pasos

Aprende más