firebase
Оффлайн-возможности Firebase
Поиск…
Вступление
В этом посте вы найдете различные способы реализации автономных возможностей при использовании Firebase
, информацию о том, когда и почему может быть хорошей идеей, позволять автономные возможности и примеры этого с платформой Android.
замечания
Что я должен использовать? Устойчивость диска или keepSynced звонки?
По моему опыту могу сказать, что это всегда зависит от того, что работает ваше приложение, и как вы управляете транзакциями и базой данных своего приложения. Если, например, у вас есть приложение, в котором пользователь просто пишет и читает данные, но он не может удалить или отредактировать его, использование DiskPersistence
будет правильным выбором.
Кроме того, DiskPersistence
будет хранить данные в кеше, а это означает, что ваше приложение будет использовать больше места на устройствах пользователя, что, возможно, не лучшая идея в вашем случае.
С другой стороны, если ваше приложение управляет множеством сложных транзакций, и ваши данные обновляются очень часто, возможно, вам следует избегать DiskPersistence
и использовать keepSynced
в ссылках, которые вы хотите сохранить свежими.
Зачем?
DiskPersistence
хранит данные, полученные локально, что иногда может привести к многократной десинхронизации, показывающей ваши данные, если вы не используете ее вместе с непрерывными ListenerValueEvents
. Например:
- Пользователь A пишет сообщение «Hello World» в вашем приложении, которое получено для пользователя B
- Пользователь B загружает сообщение от пользователя A в свой телефон и видит сообщение «Hello World»
- Пользователь. Редактирование его сообщения «Firebase - это круто».
- Пользователь B по-прежнему будет смотреть сообщение «Hello World», даже если он обновит данные, потому что моментальный снимок будет таким же, как и фильтр Firebase для него.
Чтобы избежать этого, лучшая идея - держать непрерывных слушателей в ссылках, которые вы хотите отслеживать все время.
Могу ли я использовать оба вместе?
Конечно, вы можете, и в большинстве приложений, возможно, лучше всего избежать загрузки большого количества данных и предоставить пользователю возможность работать с вашим приложением, даже если у него нет связи.
Если вам не нужно использовать пространство кэша в пользовательском устройстве, я рекомендую вам включить diskPersistence
в свой объект FirebaseDatabase
а также добавить флаги keepSync
для каждой ссылки, которые могут иметь много раз за короткое время или вы хотите держитесь свежим все время.
Включить жесткость диска (только для Android / iOS)
Чтобы включить жесткость диска, вы должны включить флаг persistenceEnabled
в объекте FirebaseDatabaseInstance
вашего приложения:
Android
FirebaseDatabase.getInstance().setPersistenceEnabled(true);
IOS
Database.database().isPersistenceEnabled = true //Swift
[FIRDatabase database].persistenceEnabled = YES; //Objetive-C
Если вы хотите отключить персистентность в какой-то момент жизненного цикла приложения, вы должны отключить его так же:
Android
FirebaseDatabase.getInstance().setPersistenceEnabled(false);
IOS
Database.database().isPersistenceEnabled = false //Swift
[FIRDatabase database].persistenceEnabled = NO; //Objetive-C
Сохранение данных свежее (только для Android / iOs)
Firebase синхронизирует и сохраняет локальную копию данных для активных слушателей при использовании на мобильных устройствах. Кроме того, вы можете синхронизировать определенные местоположения.
Android:
DatabaseReference workoutsRef = FirebaseDatabase.getInstance().getReference("workouts");
scoresRef.keepSynced(true);
Иос:
//Objetive-c
FIRDatabaseReference *scoresRef = [[FIRDatabase database] referenceWithPath:@"scores"];
[scoresRef keepSynced:YES];
//Swift
let scoresRef = Database.database().reference(withPath: "scores")
scoresRef.keepSynced(true)
Клиент Firebase автоматически загружает данные в этих местах и обновляет их, даже если в ссылке нет активных слушателей. Вы отключите синхронизацию со следующей строкой кода.
Android:
scoresRef.keepSynced(false);
IOS:
[scoresRef keepSynced:NO]; //Objetive-C
scoresRef.keepSynced(false) //Swift