Persistencia en dispositivos móviles - iOS
  • Introduction
  • Persistencia básica
    • El sistema de archivos
    • Serialización de clases
    • Property Lists
    • Preferencias de usuario
    • Ejercicios
  • SQLite
    • Introducción a SQLite en iOS
    • El API básico de SQLite
    • Frameworks de terceros
    • Ejercicios
  • ¡Hola Core Data!. Una aplicación de ejemplo
    • Introducción a Core Data
    • El stack de Core Data
    • Las entidades
    • Recuperar los datos
  • Modelos de datos en Core Data
    • Crear modelos
    • Entidades con clases propias
    • CRUD
    • Ejercicios
  • Más sobre modelos de datos
    • Tipos de datos transformables
    • Validaciones
    • El ciclo de vida de los objetos gestionados
    • Deshacer y rehacer operaciones
    • Ejercicios
  • Búsquedas en Core Data
    • Predicados
    • Ordenación
    • Ejercicios
  • Tablas en Core Data
    • El fetched results controller
    • Inicializar el "fetched results controller"
    • Mostrar los datos en la tabla
    • Refrescar la tabla
    • Secciones de tabla automáticas
    • Ejercicios
  • Migraciones de datos
    • Qué son las migraciones de datos
    • Versiones del modelo de datos
    • Migraciones ligeras
    • Migraciones pesadas
    • Ejercicios
    • Apéndice: migraciones en iOS<=9
  • Contextos múltiples
    • Múltiples contextos para trabajos en background
    • Comunicación entre contextos
    • Contextos anidados
    • Ejercicios
  • Persistencia como servicio
    • Backend as a Service
    • Gestión de usuarios en Firebase
    • Persistencia en Firebase
    • Ejercicios
  • Arquitecturas de aplicaciones en iOS
    • Model/View/Controller
    • Model/View/Presenter
    • Model/View/ViewModel
    • VIPER
    • Ejercicios parte I
    • Ejercicios parte II
    • Ejercicios parte III
Powered by GitBook
On this page
  • Login/logout (3 puntos)
  • Pantalla inicial:
  • Segunda pantalla
  • Mensajes del chat (5 puntos)

Was this helpful?

  1. Persistencia como servicio

Ejercicios

En las plantillas de la sesión hay un proyecto Xcode con las librerías de Firebase ya instaladas y configuradas. El proyecto está vinculado con una aplicación ya dada de alta en el servidor de Firebase.

IMPORTANTE: para trabajar con el proyecto, abrir el .xcworkspace, NO el .xcodeproj que abrimos habitualmente. Al abrir el workspace veréis dos proyectos, uno con la app en sí, llamado ChatFirebase y otro con las librerías auxiliares llamado pods. Tras abrir el workspace lo primero que deberíais hacer es Product > Build.

El objetivo es desarrollar un pequeño chat con la realtime database. La plantilla ya tiene la interfaz hecha y hay que añadirle el código de Firebase.

Login/logout (3 puntos)

Pantalla inicial:

En la pantalla inicial de la app hay un formulario para hacer login. Añade el código necesario para que cuando se pulse sobre el botón "Entrar" se haga login en Firebase.

Segunda pantalla

El botón "Entrar" está conectado mediante un segue con la segunda pantalla, que es donde se verán los mensajes del chat. En el outlet usuarioLabel debería aparecer el login del usuario que se ha autentificado.

Añade el código necesario para mostrar el email del usuario actual de Firebase en el usuarioLabel. Puedes hacerlo en el método viewWillAppear del ChatViewController.

Finalmente, añade el código necesario para que al pulsar sobre Salir se haga logout en Firebase.

Mensajes del chat (5 puntos)

Usaremos la siguiente estructura para almacenar los mensajes del chat:

{
  "mensajes": {
    "1jdakdueidas" : {
        "texto":"hola qué tal",
        "usuario":"pepe@ua.es"
    },
    "uiusd_ur48850_d" : {
        "texto":"bien,y tú?",
        "usuario":"pepa@ua.es"
    }
  }
}

donde los identificadores de mensaje deberían ser generados automáticamente por la base de datos con childByAutoId()

Llevad mucho cuidado, ya que con vuestro usuario tenéis permiso total para escribir en la base de datos, por lo que por error podríais borrar los mensajes enviados por los demás.

Para que funcione el chat hay que implementar dos funcionalidades:

  • Que cuando se pulse sobre "Enviar" se guarde el mensaje en la BD. Usando el API de la base de datos habrá que:

    • Obtener la referencia al nodo "mensajes"

    • Generar la referencia a un nuevo nodo id hijo de la referencia anterior con childByAutoId()

    • Fijar el valor de este nuevo nodo con setValue() a un diccionario Swift con las claves "texto" y "usuario" y que contenga el texto del mensaje y el email del usuario actual de Firebase.

Con el HTML que se incluye en las plantillas podéis ver el estado actual de la BD y podéis comprobar si se ha insertado correctamente vuestro mensaje

  • Que cuando alguien envía un mensaje al chat este aparezca en la tabla

    • Recibir el mensaje: en el viewWillAppear del ChatViewController añadir un listener para que escuche el evento .childAdded sobre el nodo "mensajes"

Ten en cuenta que el código que recibe el evento recibe un parámetro snapshot con los nuevos valores en el campo value. En nuestro caso será un diccionario con el texto y el usuario. Podemos hacer el cast a un diccionario con claves y valores String para poder usarlo en el código, algo como:

if let valor = snapshot.value, let v = valor as? [String:String] {
   //Aquí ya podríamos acceder a los valores con v["texto"] y v["usuario"]
}
  • Cuando se reciba el evento, mostrar el mensaje en la tabla. Con el texto del mensaje y el email del usuario construir un struct de tipo Mensaje y añadirlo al array self.mensajes del ChatViewController. Para que aparezca visualmente en la tabla tienes además que añadir una fila en la posición correspondiente:

let indexPath = IndexPath(row:self.mensajes.count-1,section:0)
self.miTabla.insertRows(at: [indexPath], 
                     with: UITableViewRowAnimation.bottom)
PreviousPersistencia en FirebaseNextArquitecturas de aplicaciones en iOS

Last updated 6 years ago

Was this helpful?