我目前正在尝试开发一个用户可以用来跟踪其位置的应用。重要的是其他用户不得看到其他人不在组中的位置。
为了侦听组中所有用户的位置更新,我想知道是否将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);
}
答案 0 :(得分:0)
您不应该在所有孩子上使用childEventListener
。相反,应该在其父级上使用childEventListener
。
您的想法:
mDatabaseReference.child("locations").child(uid).addValueEventListener(myListener)
;
您应该实现:
mDatabaseReference.child("locations").addValueEventListener(myListener);
答案 1 :(得分:0)
只能在组内看到用户的位置。例如-
procedure TControl.DoAddObject(const AObject: TFmxObject);
begin
...
if AObject is TControl then
For i := 1 to FUpdating do
TControl(AObject).BeginUpdate;
...
end;
用户1和用户2可以看到彼此的位置,因为它们存在于同一组中。但是由于组不同,他们不允许查看用户3和4的位置。
为此,数据库结构应类似于-
procedure TControl.DoRemoveObject(const AObject: TFmxObject);
begin
....
if AObject is TControl then
For i := 1 to FUpdating do
TControl(AObject).EndUpdate;
....
end;
假设用户1要访问他的位置。他还可以访问用户2的位置
Group A - User 1
- User 2
Group B - User 3
- User 4
您将获得用户1所属的组,现在可以从该group_id中使用以下方法检索该特定组的所有人员的位置。您还可以应用某些验证。
groups:{
users:{
user1:{
"user_id" : x
"grp_id": 11
"grp" : "A"
}
user2:{
"user_id": y
"grp_id" : 11
"grp" : "A"
}
user3:{
"user_id" : z
"grp_id" : 22
"grp" : "B"
}
user4:{
"user_id" : a
"grp_id" : 22
"grp": "B"
}
}
}
locations:{
user_id:{
"accuracy" : 23.429000854492188,
"altitude" : 57,
"latitude" : 3.4386667,
"longitude" : 10.024,
"speed" : 0,
"time" : 1531114956000
"grp_id" : 11
},
user_id:{
...
"grp_id" : 22
},
...
}
答案 2 :(得分:0)
我通过将结构保存为以下模型来解决了问题
<input type="checkbox" id="chkPrint" name="Print" value="false" onclick="myFunction()" onchange="yourFunction()">
这样做,我可以用一个监听器收听所有位置