# FireBase RealTime Database

El BackEndBase permite utilizar la API de FireBase para enviar información a la RealTime Database (opens new window)

Nota

No se utiliza ningún cliente nativo, sólo los servicios Rest proporcionados por FireBase, más información por aquí (opens new window).

# Funciones disponibles

El módulo realtime, implementado en el BackEndBase contiene las siguientes funciones:

# get_token_realtime

La función get_token_realtime obtiene un nuevo token de sesión de Firebase.

def get_token_realtime():
    ...

El Token generado, utiliza Ámbitos de OAuth 2.0 para las API de Google (opens new window) y get_token_realtime especifica los permisos adicionales de OAuth 2.0 que se solicitan al proveedor de autenticación.

# define los scope a los que tendrá acceso el token de sesión
scopes = [
    "https://www.googleapis.com/auth/userinfo.email",
    "https://www.googleapis.com/auth/firebase.database"
]

Se utiliza por defecto la cuenta de servicio (opens new window) asociada al proyecto.

Este token es almacenado en caché, bajo la clave token_realtime.

# Un ejemplo

from app.ext.firebase.realtime import get_token_realtime
from loguru import logger
...

access_token = get_token_realtime()

if access_token is None:
    logger.warning("realtime_api invalid access token: {}", access_token)
    return None
# do stuff

Nota

Esta función es usada internamente por realtime_api, para el envío de las notificaciones.

# realtime_api

La función realtime_api espera dos parametros, notification_name y data

  • notification_name: El identificador del mensaje, apoyáte en funciones como generate_salt, y/o generate_uuid, para crearlos de forma dinámica.
  • data: La información del mensaje, usualmente es un objeto tipo json con la información a enviar.
def realtime_api(notification_name=None, data=None):
    ...

# Un ejemplo

from app.ext.firebase.realtime import realtime_api
from app.ext.security import generate_salt
...

message_id = generate_salt(20)

message_data = {
	"title": "nuevo mensaje usando la RealTime",
	"body": "favor no responder",
	"created_at": "20200520153750"
}

result = realtime_api(message_id, message_data)
print("realtime_api result:", result)

El resultado del ejemplo anterior:

{
  "name": "-MBp616pcPdhqnZwNDka"
}

Nota

Por defecto la información se envía a un nodo llamado messages de la RealTime Database.

# Más información

Para mas información consulte: