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
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.