Приносим извинения, если что-то из этого не имеет смысла, я изо всех сил пытаюсь полностью понять слушателей в реальном времени.
Я пытаюсь добавить слушателя в реальном времени в часть чата моего приложения, чтобы я мог добавлять новые сообщения на экран по мере их поступления в базу данных. В приведенном ниже коде я загружаю все текущие сообщения на экран, когда пользователь открывает страницу, а затем (пытаюсь) добавить слушателя в реальном времени, чтобы любые новые сообщения могли быть добавлены на экран.
Однако doc_snapshot
- это просто список идентификаторов документов, а не message_dict
, который я использовал выше, как мне получить доступ к данным для каждого документа в doc_snapshot
, а не только к идентификатору?
Или я делаю это совершенно неправильно, не следует ли мне загрузить одноразовую загрузку сообщений при открытии экрана и просто использовать прослушиватель в реальном времени для загрузки сообщений и прослушивания новых сообщений?
self.local_id
- это идентификатор пользователя, который вошел в систему, doc_id
- это идентификатор человека, которому они отправляют сообщения.
def move_to_chat(self, doc_id):
group_id = self.local_id + ":"+ doc_id
doc_ref = self.my_firestore.db.collection(u'messages').document(group_id)
doc = doc_ref.get()
if doc.exists: # Check if the document exists. If it does, load the messages to the screen
get_messages = self.my_firestore.db.collection(u'messages').document(group_id).collection(group_id).order_by(u'Timestamp').limit(20)
messages = get_messages.stream()
for message in messages:
message_dict = message.to_dict()
try:
if message_dict['IdFrom'] == self.local_id:
#Add label to left of screen
else:
#Add label to right of screen
except:
pass
else: # If it doesn't, create it
self.my_firestore.db.collection(u'messages').document(group_id).set({
u'GroupId': group_id
})
add_to_doc = self.my_firestore.db.collection(u'messages').document(group_id).collection(group_id).document()
add_to_doc.set({
u'Timestamp': datetime.datetime.now()
})
# Watch for new messages
self.query_watch = self.my_firestore.db.collection(u'messages').document(group_id).collection(group_id)
# Watch the document
self.query_watch.on_snapshot(self.on_snapshot)
def on_snapshot(self, doc_snapshot, changes, read_time):
for doc in doc_snapshot:
#Here's where I'd like to access data from the documents, to find the message that has been added.