[英]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時,只需添加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);
要知道消息是否已打開,您需要在用戶部分添加另一個字段,您需要在其中添加一個默認值為false
的boolean
值。 這個新部分應如下所示:
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。
希望能幫助到你。
是的,有可能,你可以在消息中添加一個孩子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.