Mantenha os dados do Firebase Realtime Database sempre sincronizados

Atualmente, estou re-trabalhando em um aplicativo meu que atualiza seu banco de dados SQLite interno, buscando dados brutos de um site, não de uma API oficial.

Como isso é propenso a erros, eu gostaria de mover o processamento de dados do cliente para um servidor back-end. A idéia é ter um script em execução no servidor várias vezes ao dia - semelhante ao comportamento do cliente antes - e armazenar os dados em um banco de dados em tempo real do Firebase. Então, todos os clientes não precisam mais processar os dados, mas solicitam os dados analisados no Firebase DB.

Só estou me perguntando qual é a melhor abordagem para manter os dados sincronizados. Tive duas idéias, mas como não estou muito familiarizado com o Firebase, não sei o que é preferível.

Por um lado, eu poderia imaginar manter os dados do cliente sincronizados usandokeepSynced() esetPersistenceEnabled() em alguns nós. Mas não tenho certeza se isso manterá os dados atualizados quando o aplicativo estiver em segundo plano. Também estou preocupado com o uso da bateria e da rede dessa abordagem. Um terceiro ponto é a quantidade de conexões simultâneas, questiono com essa abordagem que todos os clientes estarão conectados o tempo todo, certo?

A segunda abordagem seria usar o FCM para notificar o cliente sempre que houver uma alteração em um de seus nós interessados, por exemplo. usando o Firebase Cloud Functions para ouvir o evento e acionar a mensagem. Então o cliente iriagoOnline() para sincronizar com o banco de dados egoOffline() novamente. Isso evitaria a enorme quantidade de conexões, além de reduzir o uso da bateria e da rede. Mas não tenho certeza de como manter todos os dados no dispositivo enquanto estiver offline? Não quero usar um banco de dados SQLite para manter os dados no dispositivo. ÉsetPersistenceEnabled() suficiente para manter uma quantidade específica de notas do banco de dados no dispositivo?

Ou é uma mistura de ambos o caminho a percorrer? ConfiguraçãokeepSynced() esetPersistenceEnabled() nos nós necessários egoOnline()/goOffline() dependendo das mensagens na nuvem?

Qualquer ajuda ou conselhos baseados em experiências próprias são bem-vindos!

questionAnswers(2)

yourAnswerToTheQuestion