Оба выделенных абзаца являются, на мой взгляд, прямыми объяснениями и отвечают на ваши вопросы:
Обновляет ли Firestore этот кэш всякий раз, когда происходят изменения в серверной части?
Да, если вы находитесь в автономном режиме и некоторые документы изменены, после того как вы вернетесь в сеть, вы получите все измененные документы и наоборот, если вы измените некоторые документы локально (в своем кэше), когда вы вернетесь в сеть, все измененные документы отправляются на серверы Firebase.
Если у вас есть запрос, который возвращает 10 документов, это означает, что вы синхронизированы с 10 документами, что в основном означает, что если из этих 10 документов будет изменен, ваш слушатель будет запущен только для этого изменения.
обновляет документ (а) автоматически при изменении этого документа в серверной части
Да, прежде всего в вашем кеше, и как только вы вернетесь в сеть, также на серверах Firebase.
всякий раз, когда я делаю запрос, который использует этот документ, и я в это время нахожусь в сети?
Всякий раз, когда вы находитесь в сети и документ изменяется, вы получаете уведомление в режиме реального времени.
Изменить:
если один из этих документов изменяется в облаке (не на смартфоне), при каких условиях Firestore SDK будет обновлять документ в кеше? Будет ли он (а) обновлять документ автоматически, вскоре после изменения в облаке, или (б) обновлять документ в следующий раз, когда мобильное приложение выполнит запрос, использующий документ?
Пока вы синхронизированы с этими документами, это происходит во второй момент, когда документ изменяется. Синхронизация означает, что вы используете в своем коде вызов get()
для получения этих документов или если вы слушаете изменения документов в режиме реального времени. Просто создав ссылку на документ или запрос без использования слушателя, вы нигде не будете уведомлены.
обновить документ в следующий раз, когда мобильное приложение выполнит запрос, использующий документ?
Неправильно, так как вы находитесь в сети и синхронизированы с документами, слушатель срабатывает мгновенно.
Edit2:
Короче говоря, слушатель вызывается каждый раз, когда происходит изменение в документе. «В следующий раз, когда приложение выполнит запрос» - это неправильное предложение, потому что, когда вы создаете запрос и присоединяете слушателя, вы всегда синхронизированы с базой данных, и когда документ изменяется, вы немедленно получаете уведомление. Это не , как документы в базе данных чередуются, и когда я запрашиваю (в какой-то момент времени), я получаю изменения, нет, вы всегда будете уведомлены о них. В этом прелесть базы данных в реальном времени, которую нужно уведомлять о происходящих изменениях :)