Firebase Cloud Functions — Como começar?
Este artigo é parte da série Firebase Cloud Functions:
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:
- 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).
- 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) - 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:
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 contadorreturn 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ê. :)