Поиск…


Вступление

В этом посте вы найдете различные способы реализации автономных возможностей при использовании Firebase , информацию о том, когда и почему может быть хорошей идеей, позволять автономные возможности и примеры этого с платформой Android.

замечания

Что я должен использовать? Устойчивость диска или keepSynced звонки?


По моему опыту могу сказать, что это всегда зависит от того, что работает ваше приложение, и как вы управляете транзакциями и базой данных своего приложения. Если, например, у вас есть приложение, в котором пользователь просто пишет и читает данные, но он не может удалить или отредактировать его, использование DiskPersistence будет правильным выбором.

Кроме того, DiskPersistence будет хранить данные в кеше, а это означает, что ваше приложение будет использовать больше места на устройствах пользователя, что, возможно, не лучшая идея в вашем случае.

С другой стороны, если ваше приложение управляет множеством сложных транзакций, и ваши данные обновляются очень часто, возможно, вам следует избегать DiskPersistence и использовать keepSynced в ссылках, которые вы хотите сохранить свежими.

Зачем?


DiskPersistence хранит данные, полученные локально, что иногда может привести к многократной десинхронизации, показывающей ваши данные, если вы не используете ее вместе с непрерывными ListenerValueEvents . Например:

  1. Пользователь A пишет сообщение «Hello World» в вашем приложении, которое получено для пользователя B
  2. Пользователь B загружает сообщение от пользователя A в свой телефон и видит сообщение «Hello World»
  3. Пользователь. Редактирование его сообщения «Firebase - это круто».
  4. Пользователь 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


Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow