Saltar al contenido

Estructura de la base de datos en tiempo real de Firebase en la aplicación de chat

Tenemos la respuesta a esta cuestión, al menos eso pensamos. Si continuas con inquietudes deja tu comentario, para nosotros será un placer responderte

Solución:

Si haces una estructura similar a esta:

-chats
   - chatUID
       - members
           - userUID
       - lastMessageSent:messageUID
       - ... more properties  

-chatMessages
   - chatUID
     - messageUID
         - sentBy: userUID
         - messageDate:""
         - messageTime:""
         - message:""

-userChats
    - userUID
       - chatUID

puede adjuntar un oyente a /userChats/userUID, que mostrará los chats activos, y un oyente a /chatMessages/chatUID, que obtendrá todos los mensajes de chat para una conversación de chat específica.

De esta manera es mucho más fácil configurar las reglas de seguridad de Firebase, y los usuarios solo recibirán mensajes de chat de los que son parte.

Sé que es tarde para responder, pero para los futuros lectores, aunque la respuesta de Linxy es más ordenada, me gustaría señalar una más eficiente que haya probado ambas estructuras:

ChatMessages
   smallerUID_biggerUID
      messageUID
         sentBy : userUID
         messageDate : ""
         message : ""
      .
      .
   .
   .
UserChats
   userUID
      pairUID
        lastMessage : ""       
      .
      .
   .
   .

De esta manera, en lugar de averiguar primero el ID de chat y luego qué usuario está asociado con ese ID de chat, podemos buscar directamente qué usuarios deberían aparecer en nuestra pestaña de chat activo y obtener la información de los usuarios (nombre de usuario, imagen de perfil). La razón de esto es que siempre podemos calcular el ID de chat si conocemos el ID del usuario con el que nos gustaría enviar mensajes. Entonces, para la pestaña de mensajes, calculamos el chatId (smallerUID_biggerUID) en el lado del cliente y buscamos los mensajes para hacer referencia a él.

Gracias a @Linxy por una respuesta brillante.

Creé una base de datos de firebase con respecto a la respuesta de @Linxy

ingrese la descripción de la imagen aquí

Aquí está la exportación JSON completa


  "Chats" : 
    "-Lsfsd234xda" : 
      "lastMessageSent" : "-LrDEBo1-Message",
      "members" : [ "-LrDEBoLokW-5mhaT3ys", "-LrDEBoLokW-5mhaT3yz" ],
      "more_properties" : "goes here"
    
  ,
  "Users" : 
    "-LrDEBoLokW-5mhaT3ys" : 
      "id" : "-LrDEBoLokW-5mhaT3ys",
      "userDisplayName" : "Qadir Hussain",
      "userEmail" : "[email protected]
", "userPhotoUrl" : "https://lh3.googleusercontent.com/a-/AAuE7XXXXXXXXX" , "-LrDEBoLokW-5mhaT3yz" : "id" : "-LrDEBoLokW-5mhaT3ys", "userDisplayName" : "Ishaq Bhojani", "userEmail" : "[email protected]", "userPhotoUrl" : "https://lh3.googleusercontent.com/a-/AAuE7mB3KTbXXXXXXXX" , "chatMessages" : "-Lsfsd234xda" : "-LrDEBo-MessageUID" : "message" : "Hi there!", "messageDate" : "10/10/2019", "messageTime" : "10:16pm", "sentBy" : "-LrDEBoLokW-5mhaT3ys" , "-LrDEBo1-MessageUID" : "message" : "Hello", "messageDate" : "10/10/2019", "messageTime" : "10:17pm", "sentBy" : "-LrDEBoLokW-5mhaT3yz" , "userChats" : "-LrDEBoLokW-5mhaT3ys" : "0" : "-Lsfsd234xda", "1" : "-Lsfsd234xda1", "chatUID" : "-Lsfsd234xda"

valoraciones y reseñas

Si te sientes impulsado, tienes la opción de dejar un enunciado acerca de qué le añadirías a esta sección.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *