新消息计数器

时间:2017-04-22 18:25:21

标签: ios swift firebase firebase-realtime-database

我正在开发一个简单的社交应用程序(使用firebase和jsqmessagesviewcontroller)并尝试制作“新消息”计数器。 firebase中是否有任何内置功能来检测是否添加了新子项?我试图以这样的方式制作:

ref.observe(.childAdded, with: { (snapshot) -> Void in
  self.newMsg += 1
})

但是这一行找到了所有消息,而不仅仅是新消息。是否有任何内置功能可以帮助我解决这个问题?提前谢谢。

1 个答案:

答案 0 :(得分:0)

没有解决此问题的方法。但我对如何处理这个问题有一些想法。

可能性A:

我建议您在设备上存储可用子项的值。 (您可以使用UserDefaults。)然后,如果您检查新的孩子,您将获得所有孩子的新数量。您只需要在代码中进行此计算:newValueOfChildren - valueOfChildren。如果结果相同,你知道没有新的孩子。如果结果不相等,那么现在添加了多少新孩子。完成此计算后,您使用valueOfChildren

UserDefaults覆盖newValueOfChildren

让我们初始化变量:

let valueOfChildren = UserDefaults.standard
var newValueOfChildren: Int!

我们假设您当前有6个孩子存储在Firebase实时数据库中。

//How to set user defaults:
valueOfChildren.setInteger(6, forKey: "valueOfChildren")

现在我加了三个孩子。因此,现在Firebase数据库中存储了9个子项。您计算现有孩子的代码必须如下所示:

var newValueOfChildren: Int!
ref.observe(.value, with: { (snapshot: FIRDataSnapshot!) in
    newValueOfChildren = snapshot.childrenCount
}

现在让我们从UserDefaults获取当前的Int并将它们分配给一个新变量(calcValueA)。之后我们将计算:

//How to get user defaults:
var calcValueA = defaults.integerForKey("valueOfChildren")

print(newValueOfChildren - calcValueA)

print()语句将返回:

  

3

将变量命名有点不同可能有用。 : - )

可能性B:

您可以Firebase Cloud Functions并使用服务器上的更新和与上述方法类似的功能,或者通过在数据库中将计数器值加1来响应新子项。您只需将其存储在数据库中并从设备中读取即可。

查看Firebase团队构建的这些示例: