簡體   English   中英

在Firebase群組消息傳遞應用中實施已讀回執功能

[英]Implement a read receipt feature in Firebase group messaging app

我想在我的Firebase群組消息應用中實施“看到”功能。 您能否建議采用最佳和最有效的方法(工作代碼將受到贊賞)? 例如,應用程序將在群組消息上顯示“ 由6看到 ”或“ 由15看到 ”。

這是我的項目: https//github.com/firebase/friendlychat/tree/master/android

這是MainActivity: https//github.com/firebase/friendlychat/blob/master/android/app/src/main/java/com/google/firebase/codelab/friendlychat/MainActivity.java

要實現此目的,您需要在名為seenBy的Firebase數據庫中添加另一個節點,該節點必須嵌套在meassage部分中的每個messageId下。 您的數據庫應如下所示:

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

每次新用戶打開一個meesage時,只需添加uidname ,如上所述。

要實現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);

要知道消息是否已打開,您需要在用戶部分添加另一個字段,您需要在其中添加一個默認值為falseboolean值。 這個新部分應如下所示:

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

當用戶打開該消息時,只需將該特定消息的值從falsetrue ,這意味着已打開特定消息。 這是代碼:

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。

希望能幫助到你。

是的,有可能,你可以在消息中添加一個孩子seen_by ,每當用戶查看消息將查看者userId附加到seen_by ,然后通過檢索userID ,你可以計算觀眾的數量,你也可以看到查看的列表成員也是。 格式應該是

message:{
    FirebaseKey:{
        message:"hi",
        timestamp:1498472455940,
        seen_by:"abc,def,ghi" //users UID
      }
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM