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?

questionAnswers(1)

yourAnswerToTheQuestion