我目前正在使用Firebase构建应用,并决定实施聊天。
我能够使用JSQMessagesVC作为GUI,并使Firebase聊天方面也能正常工作(通过组合2个UID来创建聊天室,例如:/ 123_456)。但是,如果他们收到消息,我将失去通知其他用户的方法。 (如果用户123打开聊天室123_456并在其中发送消息,如何通知用户456他们已收到消息?)
感谢您的帮助!
答案 0 :(得分:0)
您的问题与设计数据库更相关。如果实现聊天功能,您需要重新考虑数据库结构。它完全与数据库结构有关,因为Firebase不会为您提供任何触发器,因此您可以在其他节点(即数据库表)上执行某些操作,并在您所在的节点中执行主要操作。
虽然您可能已经阅读了所有这些教程,但无论如何都可以再看看structuring your data
这里有一个很好的chat example,可能对您有所帮助。虽然它指的是群聊。您可以查看数据库是如何为此目的而构建的。
基本上,当有人打开房间与其他人聊天时,您需要在客户端的不同节点中添加一些额外的操作。
哦,这是另一个SO Answer,你应该看看。
答案 1 :(得分:0)
我遇到了同样的问题,我通过添加一个额外的节点来解决这个问题,每个用户都有许多聊天室。将观察者放在聊天室中的用户(在下面的情况下为“0888a5dc-fe8d-4498-aa69-f9dd1361fe54”),带有计数器,描述和时间戳。每个新消息,更新计数器和lastMessage等,请参见下文:
"Messages" : {
"0888a5dc-fe8d-4498-aa69-f9dd1361fe54" : {
"0888a5dc-fe8d-4498-aa69-f9dd1361fe5451879163-8b35-452b-9872-a8cb4c84a6ce" : {
"counter" : 2,
"description" : "Breta",
"lastMessage" : “cool”,
"lastUser" : "51879163-8b35-452b-9872-a8cb4c84a6ce",
"messageType" : "txt",
"sortTimestamp" : -1.459518501758476E9,
"updatedAction" : 1.459518501758468E9,
"userId" : "51879163-8b35-452b-9872-a8cb4c84a6ce"
},
"0888a5dc-fe8d-4498-aa69-f9dd1361fe547bfe8604-58ad-4d18-a528-601b76dd2206" : {
"counter" : 0,
"description" : "Romeo",
"lastMessage" : “yep”,
"lastUser" : "0888a5dc-fe8d-4498-aa69-f9dd1361fe54",
"messageType" : "txt",
"sortTimestamp" : -1.459527387138615E9,
"updatedAction" : 1.459527387138613E9,
"userId" : "7bfe8604-58ad-4d18-a528-601b76dd2206"
}
}