Problema sin conexión con Firestore vs Firebase

Convertí una de mis aplicaciones a la nueva Firestore. Estoy haciendo cosas como guardar un documento con un clic de botón, y luego en elonSuccess oyente, yendo a una actividad diferente.

También uso el hecho de que las operaciones de guardado de Firestore devuelven tareas, para agrupar tareas juntas usandoTasks.whenAll:

val allTasks = Tasks.whenAll(
       createSupporter(supporter),,
       setStreetLookup(makeStreetKey(supporter.street_name)),
       updateCircleChartForUser(statusChange, createMode = true), 
       updateStatusCountForUser(statusChange))

      allTasks.addOnSuccessListener(this@SignUpActivity, successListener)
      allTasks.addOnFailureListener(this@SignUpActivity, onFailureListener)

Finalmente, obtengo la identificación del documento de un guardado exitoso y lo almaceno en preferencias o en una base de datos local para su uso posterior (dentro delonSuccessListener)

Todo esto funciona muy bien.Hasta que haya una pérdida de conectividad de red. Luego, todo se desmorona, porque las tareas nunca se completan y los oyentes onSuccess / onFailure / onComplete nunca reciben llamadas. Entonces la aplicación simplemente se cuelga.

Estoy trabajando en esto comprobando la disponibilidad de la red antes de cada guardado, y luego haciendo una solución creando tareas sin ningún oyente. También estoy generando una identificación de documento localmente usando un generador de UUID.

Esto, por cierto, no era la forma en que la aplicación funcionaba con la antigua base de fuego. En ese caso, todo funcionó bien cuando estaba desconectado y vi que los documentos se sincronizaban cada vez que la aplicación se conectaba.

Mi solución para Firestore parece un truco terrible. ¿Alguien ha encontrado una solución mejor?

Ver relacionadoLa base de datos de Firestore en las devoluciones de llamada de inserción / eliminación de documentos no se invoca cuando no hay conexión addOnCompleteListener no se llama sin conexión con cloud firestore

Respuestas a la pregunta(3)

Su respuesta a la pregunta