Como começar?

Agora que já sabemos o que é o Cloud Functions, vamos por as mãos nele.

Primeiramente, para utilizar o Firebase Cloud Functions temos de ter o Firebase CLI (Command-Line Interface) instalado no nosso computador. Mas o CLI requere que tenhamos o NodeJS (versão 6.3.1 ou superior) e npm instalados. Ao instalar o NodeJS, o npm é instalado automaticamente.

Só depois de ter isso instalado é que podemos instalar o Firebase CLI. Basta utilizar o comando:

npm install -g firebase-tools

Inicializar o projecto

Agora que temos o Firebase CLI, podemos utilizar o comando “firebase” no nosso computador. Vamos então criar o projecto:

  1. Crie um directório (folder) no seu computador e dê o nome do Projecto. Este directório irá conter todos os dados do projecto que depois irão para a consola (hosting e cloud functions basicamente).
  2. Abra esse directório na terminal(Command Prompt no Windows) e execute o comando: firebase login
    Esse comando irá abrir uma aba no seu browser para você entrar na sua conta Google que está conectada com o Firebase. (Para o CLI ter acesso aos seus projectos já existentes)
  3. Depois de estar autenticado, na mesma terminal, execute o comando: firebase init functions
    Esse comando irá criar alguns directórios e ficheiros no directório do seu projecto, incluindo uma pasta com o nome functions, cujo conteudo é mostrado na imagem abaixo:

Nossas primeiras funções

Agora que temos o Firebase CLI instalado, podemos começar a escrever Cloud Functions.

Para começar, vamos utilizar a base de dados criada na série Firebase Database para Desenvolvedores SQL. Se você não conhece esta série, aqui vai:

A aplicação desenvolvida na série permitia que estudantes (nossos utilizadores) participassem de grupos de estudos. Vamos então utilizar o Cloud Functions para contar o número de grupos em que um estudante está a participar.

Na nossa base de dados tinhamos algo mais ou menos assim:

Estrutura para conhecermos os grupos em que cada participante está

Para contar o número de grupos, vamos alterar um bocado a estructura actual. Temos de adicionar um nó que irá guardar o número de grupos de cada usuário:

Então temos de criar 2 funções:

  • contarGrupos — para incrementar o contador quando o estudante se junta à um novo grupo ou decrementar quando o estudante sai de um grupo;
  • recontarGrupos — para contar o número de grupos caso o contador seja apagado.

Todas as funções são escritas no ficheiro index.js que está na pasta functions. Então abra o ficheiro e você encontrará a variável do functions já declarada e alguns comentários. Você pode alterar essa variável para que seja constante e em seguida inicializar o Firebase Cloud Functions, utilizando o código:

const functions = require(‘firebase-functions’); //Constante para invocar o Firebase Cloud Functions
const admin = require(‘firebase-admin’); //Constante para invocar o Firebase Admin SDK
admin.initializeApp(functions.config().firebase); //Inicializar o Firebase com configurações do functions

Para criar uma Cloud Function, basta usarmos exports.nomeDaFuncao e indicar o evento que dispara a função:

exports.contarGrupos = functions.database.ref(“/usuarios_grupos/{uid}/grupos/{grupoid}”).onWrite((event) => {
//O evento é disparado quando há uma nova escrita no nó especificado
});

O corpo da nossa função seria o seguinte:

//O que acontece quando há uma nova escrita no nó especificado
var gruposRef = event.data.ref.parent; //Obter a referencia dos grupos
var contadorRef = gruposRef.parent.child(‘nr_grupos’); //Obter a referencia do contador
return contadorRef.transaction(function(current) { //Esta função retorna uma transaction
if (event.data.exists() && !event.data.previous.exists()) {
return (current || 0) + 1;//Adicionar um
}
else if (!event.data.exists() && event.data.previous.exists()) {
return (current || 0) — 1;//Subtrair um
}
});

E a seguinte função seria:

exports.recontarGrupos = functions.database.ref(“/usuarios_grupos/{uid}/nr_grupos”).onWrite((event) => {
if (!event.data.exists()) {
//Se o numero de grupos for removido, recontar
var contadorRef = event.data.ref;
var gruposRef = contadorRef.parent.child(‘grupos’);
return gruposRef.once(‘value’, function(grupos) {
return contadorRef.set(grupos.numChildren());
});
}
});

O código completo fica assim:

Depois de terminarmos as nossas funções, basta fazermos o deploy delas para o Firebase. Para isso, usamos o comando:

firebase deploy --only functions

E já está. Depois do processo de deploy terminar, já teremos as nossas funções na consola. Você pode experimentar adicionar um novo grupo no nó “grupos” de um estudante e verá o contador a incrementar. :)

No artigo a seguir vemos como enviar notificações à usuários sobre eventos que aconteceram na base de dados, usando o Firebase Cloud Messaging.

Se você tem alguma dúvida ou sugestão, não hesite em me contactar pelo email rosariofernandes51@gmail.com ou pelo Telegram. Ficarei feliz por conversar com você. :)

--

--

Rosário Pereira Fernandes

Firebase DevRel Engineer at Google … Views and Opinions are my own.