我正在尝试用Firebase Cloud构建一个小型聊天应用程序。 我在Firebase数据库中创建了以下结构:
Collection "users" -> bob@gmail.com document -> map of "chat rooms" field (type Map<String, DocumentReference>)
Collection chatRooms -> room id document -> Collection messages -> message id document -> fields
邮件id文档
包含以下字段:
from: the user that sent the message
message: the text of the mesasage
sentAt: Date
我想创建一个当前用户的所有聊天室的回收视图。 所以我做的是:
FireDB.collection("users").document(connectedEmail).get().addOnSuccessListener(new OnSuccessListener<DocumentSnapshot>() {
@Override
public void onSuccess(DocumentSnapshot documentSnapshot) {
Log.d(this.getClass().getName(), "addOnSuccessListener:success");
if (!(documentSnapshot.exists())) {
// TODO
return;
}
Map<String, DocumentReference> chatRooms = (Map<String, DocumentReference>) documentSnapshot.get("chatRooms");
if (chatRooms.isEmpty()) {
// TODO
return;
}
}
}).addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
Log.d(this.getClass().getName(), "addOnSuccessListener:failed");
}
});
到最后一条信息的日期去聊天室地图最简单的方法是什么? 我想在room id document
级别中保留最近一次接触这个文档的时间,但是我想知道是否可以在不添加特殊支持的情况下使用Firebase。
是的,你必须更新聊天室的文档,每当一个消息被发送,Firebase Firestore不会自动添加时间戳到写入。
假设您在room文档中有字段“updated_at”(时间戳中的时间),那么每当在这个room中发送消息时,您只需用最新的时间戳更新它。 然后你可以按特定的顺序得到所有的房间。
为什么在时间戳中节省时间?