在Firebase组消息传递应用程序中实施已读回执功能 [英] Implement a read receipt feature in Firebase group messaging app

查看:84
本文介绍了在Firebase组消息传递应用程序中实施已读回执功能的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想在我的Firebase组消息传递应用程序中实现"Seen"功能.您能否建议最好和最有效的方法(工作代码将不胜感激)?例如,该应用将在群组消息上显示" 6岁的人"或" 15岁的人".

I'd like to implement a 'Seen' feature in my Firebase group messaging app. Can you kindly advise the best and most efficient approach to take (working code will be appreciated)? For example, the app would show "Seen by 6" or "Seen by 15" on a group message.

这是我的项目: https://github.com/firebase/friendlychat/tree /master/android

这是MainActivity:

Here's the MainActivity: https://github.com/firebase/friendlychat/blob/master/android/app/src/main/java/com/google/firebase/codelab/friendlychat/MainActivity.java

推荐答案

要实现此目的,您需要在Firebase数据库中添加名为seenBy的另一个节点,该节点必须嵌套在meassage部分中的每个messageId下.您的数据库应如下所示:

To achieve this, you need to add another node in your Firebase database named seenBy which must be nested under each messageId in meassage section. Your database should look like this:

Firebase-root
   |
   ---- messages
           |
           ---- messageId1
                   |
                   ---- meessage: "Hello!"
                   |
                   ---- timestamp: 1498472455940
                   |
                   ---- seenBy
                          |
                          ---- userUid1: John
                          |
                          ---- userUid2: Mary
                          |
                          ---- userUid3: George

每次新用户打开一条消息时,只需按上述说明添加uidname.

Every time a new user opens a meesage, just add the uid and the name as explained above.

要实现Seen by 6选项,这非常简单.您只需要创建一个listener并使用getChildrenCount()这样的方法即可:

To implement Seen by 6 option, it's very easy. You just need to create a listener and use getChildrenCount() method like this:

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);

要知道是否已打开消息,您需要在用户部分添加另一个字段,在其中需要添加默认值falseboolean.这个新部分应如下所示:

To know whether a message has been opened or not, you need to add another field to your user section in which you need to add a boolean with the default value of false. This new section should look like this:

Firebase-root
   |
   ---- users
       |
       ---- userId1
           |
           ---- meessages
              |
              ---- messageId1: false
              |
              ---- messageId2: false
              |
              ---- messageId3: false

当用户打开该消息时,只需将特定消息的值从false设置为true,这意味着特定消息已被打开.这是代码:

When a users opens that message, just set the value of that particular message from false to true, which means that the particular message has been opened. This is the code:

DatabaseReference openedRef = rootRef.child("users").child(userId).child("meessages").child("messageId1");
openedRef.setValue(true);

创建消息时,请在引用上使用push()方法,如下所示:

When you create a message, use push() method on the reference like this:

DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference messageRef = rootRef.child("meessages").push();
String messageKey = messageRef.getKey();

有了此密钥,您可以在DatabaseReference中使用它.以同样的方式,您可以将其用于userId.

Having this key, you can use it in your DatabaseReference. In the same way you can use for the userId.

希望有帮助.

这篇关于在Firebase组消息传递应用程序中实施已读回执功能的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆