Android - Firestore / Firebase Realtime Database ".info / connected" devuelve un estado de conexión incorrecto

Uso Firestore Beta en mi aplicación y me gustaría comprobar si hay una conexión en línea que funcione con la base de datos de Firestore. La documentación dice que actualmente no hay una forma directa de consultar el estado de la conexión, pero se puede usar el estado de conexión de Firebase como solución alternativa. El fragmento de código para eso también se puede encontrar en esta parte de la documentación:Build presencia en 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");
        }
    });

LosValueEventListener sí está funcionando y obtengo actualizaciones de estado. Pero por alguna razón, el estado cambia de "conectado" a "no conectado" después de 1 minuto. Además de que esto es incorrecto, no puedo volver a "conectado", excepto reiniciar la aplicación.

Aquí hay algunos resultados de depuración:

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 qué es eso y cómo puedo obtener una actualización de estado correcta?

Respuestas a la pregunta(1)

Su respuesta a la pregunta