- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试在我的应用中实现聊天功能。当一个用户向另一个用户发送消息时,我想将保存在 Firebase 中的“未读消息数”计数器加 1。
这是我的 Firebase 树:
字段“newMessage”是我有多少未读消息的计数器。“Messages”之后是 Contact ID(消息被发送到的那个),然后是 Sender ID(向这个联系人发送消息的那个),然后是“newMessage”是有多少条来自 Sender 的未读消息联系方式。
我写了这个函数来添加一个新的未读消息:
private func AddNewMsgTick(contactID: String)
{
let ref = Constants.refs.databaseChats.child(contactID).child(senderId)
ref.observe( .value, with: {(snapshot) in
let dataDic = snapshot.value as? NSDictionary
if let currentNewMsgs = dataDic!["newMessage"] as? Int
{
let newIntMsg = currentNewMsgs + 1
ref.setValue(newIntMsg) // This isn't right and should be updated
}
})
}
而且这段代码似乎不能正常工作。我已经尝试了几次迭代,使用 ref.observeSingleEvent
,还尝试使用 .ChildAdd
,现在我已经达到了我要尝试的迭代将快照转换为字典并从那里获取值。
我所有的函数迭代都失败了。我无法正确读取值并将其解析为 Int。它读取了错误的信息,如下所示:
在聊天中按下“发送”按钮后激活的功能:
override func didPressSend(_ button: UIButton!, withMessageText text: String!, senderId: String!, senderDisplayName: String!, date: Date!)
{
Constants.refs.databaseChats.child(senderId).observeSingleEvent(of: .value, with: {(snapshot) in
if !snapshot.hasChild(self.contactID!)
{
self.CreateChatRoom(creatorID: senderId, creatorName: senderDisplayName, contactID: self.contactID!, contactName: self.contactDisplayName!)
}
let stringMsgPostedOn = Constants.GetCurrentDateTimeString()
let senderRef = Constants.refs.databaseChats.child(senderId).child(self.contactID!).child("Messages").child(stringMsgPostedOn)
let contactRef = Constants.refs.databaseChats.child(self.contactID!).child(senderId).child("Messages").child(stringMsgPostedOn)
let senderRefLite = Constants.refs.databaseChatsLite.child(senderId).child(self.contactID!)
let contactRefLite = Constants.refs.databaseChatsLite.child(self.contactID!).child(senderId)
let message = ["userID": senderId, "userName": senderDisplayName, "text": text]
let messageLite = ["userName": self.contactDisplayName, "lastMessage": text]
// Make all this one transaction
senderRef.setValue(message)
senderRefLite.setValue(messageLite)
contactRef.setValue(message)
contactRefLite.setValue(messageLite)
self.AddNewMsgTick(contactID: self.contactID!)
self.finishSendingMessage()
})
}
聊天室初始化:
private func CreateChatRoom(creatorID: String, creatorName: String ,contactID: String, contactName: String)
{
let infoForCreator = ["userName": contactName, "newMessage" : String(0)]
let infoForContact = ["userName": creatorName, "newMessage" : String(0)]
let childUpdates = ["Messages/\(creatorID)/\(contactID)/": infoForCreator,
"Messages/\(contactID)/\(creatorID)/": infoForContact,
"ChatRoomsLite/\(creatorID)/\(contactID)/": infoForCreator,
"ChatRoomsLite/\(contactID)/\(creatorID)/": infoForContact
]
Constants.refs.databaseRoot.updateChildValues(childUpdates)
}
实现这个功能的正确方法是什么?将不胜感激。
最佳答案
像这样重构您的 CreateChatRoom 函数:
let infoForCreator = ["userName": contactName, "newMessage" : 0]
let infoForContact = ["userName": creatorName, "newMessage" : 0]
然后,尝试更改您的 AddNewMsgTick 以使用:
ref.observeSingleEvent
关于ios - 使用 Swift 更新 Firebase 中未读消息的数量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49452789/
我正在尝试实现类似于电子邮件中的已读/未读的功能。我如何通过使用 jquery、php 和 mysql 来实现。我想分步执行的操作: 1- 当我单击 html 表中的一行时,我更改了此消息在数据库中的
如何确定消息状态(已读/未读)。聊天是通过 XMPP 协议(protocol)实现的。 最佳答案 XEP-0184 : Message Delivery Receipts 支持在消息已送达时通知发件人
上下文:我们正在实现一个新闻应用程序。现在,您可以假设所有用户的新闻都是相同的,并根据我们设置的参数(根据趋势和日期)维护订单。 问题:我们不确定跟踪用户阅读内容的最佳实现是什么。我们希望能够配置一种
好吧,另一个有趣的问题是 50 号公路。 我们想实现一个真正的论坛灯泡系统,其中用户未读的帖子(在创建用户帐户后)显示为未读,直到该状态被清除或直到用户阅读它们。 我们认为最好和最简单的方法是实现一个
我正在使用来自 google reader's API 的数据开发应用程序并使用 GData用于登录。 我希望能够将表格单元格内的帖子标记为已读/未读,但我发现这主要是未记录的,很难找到解决方案,有什
我的 C 程序已从 Linux 上的 TCP 套接字读取(使用 read(2) 或 recv(2))几个字节。是否可以将这些字节推回,以便后续的 read(2) 和 recv(2) 调用(在我无法控制
我是一名优秀的程序员,十分优秀!