Android - O banco de dados Firestore / Firebase Realtime “.info / connected” retorna o estado incorreto da conexão
Uso o Firestore Beta no meu aplicativo e gostaria de verificar se há uma conexão on-line em funcionamento com o banco de dados do Firestore. A documentação diz que atualmente não há uma maneira direta de consultar o estado da conexão, mas é possível usar o estado da conexão Firebase como uma solução alternativa. O trecho de código para isso também pode ser encontrado nesta parte da documentação:resença do @ Build no Cloud Firestore.
connectedRef = FirebaseDatabase.getInstance().getReference(".info/connected");
connectionStateListener = connectedRef.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot snapshot) {
Boolean connected = snapshot.getValue(Boolean.class);
if (connected == null) {
changeState(FirebaseConnectionState.error);
return;
}
if (connected) {
changeState(FirebaseConnectionState.connected);
} else {
changeState(FirebaseConnectionState.not_connected);
}
}
@Override
public void onCancelled(@NonNull DatabaseError error) {
L.i("FirebaseConnectionStateListener was cancelled");
}
});
OValueEventListener
está funcionando e eu recebo atualizações de status. Mas, por algum motivo, o status muda de "conectado" para "não conectado" após 1 minuto. Além disso, não consigo recuperá-lo para "conectado", exceto reiniciar o aplicativo.
Aqui está uma saída de depuração:
2018-11-15 13:38:20.340: [FirebaseHeartbeatConnector] FirebaseHeartbeatConnector() called with: firebaseApp = [FirebaseApp{name=development, options=FirebaseOptions{applicationId=1:xxxxx:android:xxxxx, apiKey=xxxxx, databaseUrl=null, gcmSenderId=null, storageBucket=xxxx.appspot.com, projectId=xxxxx}}]
2018-11-15 13:38:20.480: [FirebaseHeartbeatConnector] startConnecting() called
2018-11-15 13:38:20.482: [FirebaseHeartbeatConnector] doSendFirestoreHeartbeatRequest() called
2018-11-15 13:38:20.840: [FirebaseHeartbeatConnector] change State called
2018-11-15 13:38:20.840: [FirebaseHeartbeatConnector] State changed initial -> not_connected
2018-11-15 13:38:21.380: [FirebaseHeartbeatConnector] change State called
2018-11-15 13:38:21.381: [FirebaseHeartbeatConnector] State changed not_connected -> connected
2018-11-15 13:39:20.514: [FirebaseHeartbeatConnector] change State called
2018-11-15 13:39:20.515: [FirebaseHeartbeatConnector] State changed connected -> not_connected
Por que é isso e como posso obter uma atualização de status correta?