我想实施一个“看过”的内容。我的Firebase群组消息应用中的功能。您能否建议采用最佳和最有效的方法(工作代码将受到赞赏)?例如,该应用会显示" 6见"或" 见到15 "关于群发消息。
这是我的项目:https://github.com/firebase/friendlychat/tree/master/android
答案 0 :(得分:5)
要实现此目的,您需要在名为seenBy
的Firebase数据库中添加另一个节点,该节点必须嵌套在messageId
部分中的每个meassage
下。您的数据库应如下所示:
Firebase-root
|
---- messages
|
---- messageId1
|
---- meessage: "Hello!"
|
---- timestamp: 1498472455940
|
---- seenBy
|
---- userUid1: John
|
---- userUid2: Mary
|
---- userUid3: George
每次新用户打开meesage时,只需按照上述说明添加uid
和name
。
要实施Seen by 6
选项,这很容易。您只需创建一个listener
并使用getChildrenCount()
方法,如下所示:
DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference seenByRef = rootRef.child("messages").child(messageId).child("seenBy");
ValueEventListener eventListener = new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
long seenBy = dataSnapshot.getChildrenCount();
Lod.d("TAG", "Seen by: " + seenBy);
}
@Override
public void onCancelled(DatabaseError databaseError) {}
};
seenByRef.addListenerForSingleValueEvent(eventListener);
要知道邮件是否已被打开,您需要在用户部分添加另一个字段,您需要在其中添加boolean
,其默认值为false
。这个新部分应如下所示:
Firebase-root
|
---- users
|
---- userId1
|
---- meessages
|
---- messageId1: false
|
---- messageId2: false
|
---- messageId3: false
当用户打开该消息时,只需将该特定消息的值从false
设置为true
,这意味着该特定消息已被打开。这是代码:
DatabaseReference openedRef = rootRef.child("users").child(userId).child("meessages").child("messageId1");
openedRef.setValue(true);
创建消息时,请在引用上使用push()
方法,如下所示:
DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference messageRef = rootRef.child("meessages").push();
String messageKey = messageRef.getKey();
拥有此密钥后,您可以在DatabaseReference
中使用它。以与userId相同的方式使用。
希望它有所帮助。
答案 1 :(得分:2)
是的,有可能,您可以在邮件中添加子seen_by
,只要用户查看邮件将查看者userId附加到seen_by
,然后检索userID
即可可以计算查看者的数量,也可以查看已查看成员的列表。格式应为
message:{
FirebaseKey:{
message:"hi",
timestamp:1498472455940,
seen_by:"abc,def,ghi" //users UID
}
}