java如何在Firebase中聆听多个孩子的声音?
我目前正在尝试开发一款应用程序,用户可以用它追踪自己的位置。重要的是,其他用户不得看到不在群中的其他用户的位置
为了监听组中所有用户的位置更新,我想知道在每个位置上附加一个ChildEventListener是否是最有效的方法。在参考资料中添加这么多听众,感觉有点奇怪。(我考虑将uid存储在一个列表中,并将侦听器应用于带有uid的位置子对象)。据我所知,出于安全原因,我无法将侦听器设置为父对象
还有更好的方法吗?还是这条路
{
locations:{
yY6qmwJLj69JGzgG:{
"accuracy" : 23.429000854492188,
"altitude" : 57,
"latitude" : 3.4386667,
"longitude" : 10.024,
"speed" : 0,
"time" : 1531114956000
},
msVYdaTy2DWcjuJ7:{
...
},
...
},
groups:{
users:{
msVYdaTy2DWcjuJ7:true,
yY6qmwJLj69JGzgG:true,
...
},
...
},
...
}
我目前适用以下规则:
{
"rules": {
"groups" : {
".read" : false,
".write" : false,
"$gid" : {
".read" : "auth != null",
".write" : "auth != null"
}
},
"locations" : {
".read" : false,
".write" : false,
"$uid" : {
".read" : "auth != null",
".write" : "auth.uid === $uid"
}
}
}
}
我的想法是:
for(String uid : mUserList) {
mDatabaseReference.child("locations").child(uid).addValueEventListener(myListener);
}
# 1 楼答案
用户的位置只能在组内看到。例如
用户1和用户2可以看到彼此的位置,因为它们位于同一组中。但由于用户3和用户4的位置不同,他们不允许查看
因此,数据库结构应该如下所示:
假设用户1想要访问他的位置。他还可以访问用户2的位置
您将获得用户1所属的组,现在您可以使用下面的方法从该组id中检索该特定组中所有人的位置。还可以应用某些验证