Android - Firebase Offline Best Practices

Я застрял в понимании концепции создания Firebase App Offline. В соответствии с документацией нам нужно позвонить:

FirebaseDatabase.getInstance().setPersistenceEnabled(true);

Но где мы должны это назвать? Должен ли он использоваться во всех действиях приложения? Потому что, когда я использую это внутри моего метода класса onCreate(), мое приложение прерывается непрерывно.

Итак, какова лучшая практика, которой мы должны следовать, чтобы отключить наше приложение.

Еще одно сомнение заключается в различии между приведенным выше и DatabaseReference.keppSynced(true);

Ответ 1

setPersistenceEnabled() следует вызвать один раз при запуске, прежде чем вы получите первую ссылку на базу данных. Я вызываю мой непосредственно после того, как я вызываю FIRApp.configure()

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

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

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

Более подробную информацию о сохранении и синхронизации можно прочитать здесь в документации Firebase: https://firebase.google.com/docs/database/android/offline-capabilities

Ответ 2

Создать класс приложения

public class MyApp extends Application {
    @Override
    public void onCreate() {
        super.onCreate();
        FirebaseDatabase.getInstance().setPersistenceEnabled(true);

    }
}

И измените свой манифест как

<application
    android:name=".MyApp"
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"

Ответ 3

Взято из здесь

Не уверен, если это актуально. Но есть и другой сценарий, когда это может произойти.

Если ваше приложение имеет сервис (с другим процессом) и вы создаете свой собственный класс приложений, служба и приложение переднего плана будут использовать тот же класс приложения (не тот же самый экземпляр) для инициализации. Теперь, когда я использую com.google.firebase: зависимость от firebase-crash для обработки сбоев, он создает фоновое обслуживание your.app.packagename: background_crash. По какой-то причине это вызывало сбои в моем приложении. В частности, потому что в моем классе приложения я делал вызов как

FirebaseDatabase.getInstance().setPersistenceEnabled(true);

Я предполагаю, что фоновая служба при инициализации с нашим классом Application, как-то Firebase не инициализируется. Чтобы исправить это, я сделал

if (!FirebaseApp.getApps(this).isEmpty())
        FirebaseDatabase.getInstance().setPersistenceEnabled(true);

Ответ 4

Если любой разработчик iOS там сталкивается с той же проблемой, затем напишите следующую строку в файле AppDelegate.swift в функции "application: didFinishLaunchingWithOptions" непосредственно перед оператором возврата

FirebaseDatabase.getInstance().setPersistenceEnabled(true); 

и используйте следующую строку

DatabaseReference.keppSynced(true);

со ссылкой на вашу базу данных внутри вашего viewController.

Ответ 5

FirebaseDatabase.getInstance() setPersistenceEnabled (истина);.

Просто вставьте строку выше в самом первом задании или в действии запуска в методе onCreate после просмотра содержимого. Это прекрасно работает для меня.