Los fósforos de turnbased desaparecen después de cargar por primera vez

Estoy desarrollando un juego para Android mediante los Servicios de Google Play para crear un partido basado en turnos.

Al principio, todo estaba bien. Cargo los partidos de turnbased para el usuario registrado usando

Games.TurnBasedMultiplayer.loadMatchesByStatus(getApiClient(), new int[]{TurnBasedMatch.MATCH_TURN_STATUS_MY_TURN, TurnBasedMatch.MATCH_TURN_STATUS_THEIR_TURN, TurnBasedMatch.MATCH_TURN_STATUS_INVITED, TurnBasedMatch.MATCH_TURN_STATUS_COMPLETE}) .setResultCallback(this); 

Siempre cargó todos los partidos que son cualquiera de los estados dados. Pero desde el fin de semana pasado se llama la devolución de llamada, pero no hay coincidencias, ya que no estoy participando en ningún partido (la respuesta de estado es correcta). Eliminé la memoria caché de Google Play Services en mi teléfono y reinicié el dispositivo. En ese momento todos los partidos fueron mostrados de nuevo hasta la próxima vez que abrí la aplicación. Una vez más todos los partidos faltaban. Una vez que empiece un nuevo partido, el partido sigue apareciendo con el método anterior (actualizando la lista) hasta que cierre la aplicación. En el próximo lanzamiento, ese partido también se ha ido.

Tengo que decir que el juego aún no se ha publicado, pero en una fase de prueba en la consola de Google Play para desarrolladores. Encontré el mismo problema en un emulador. Funcionó bien durante días pero de repente obtuvo el mismo problema que mi dispositivo real (con una versión posterior, por lo que no es que un solo cambio de código provoca esto).

¿Alguien más notó este comportamiento o tiene una idea sobre cómo resolverlo?

¿Podría estar relacionada con tener varias aplicaciones conectadas a un juego? Tenía dos aplicaciones firmadas con certificados de depuración conectadas y esta tarde añadió una para un apk firmado. Cuando utilicé el apk firmado funcionó otra vez hasta que desplegé una nueva aplicación de prueba (debug firmado). Después de cambiar de nuevo al apk firmado, el fallo todavía está ahí.

Como nadie parece saber la respuesta déjame reformular la pregunta. ¿Debería poner en caché TurnBasedMatches en el dispositivo? Acabo de borrar la caché de servicios de reproducción de nuevo y reabrir mi aplicación. ¿Resultado? Una lista de cientos de juegos (ya que tengo que empezar un nuevo juego cada vez que pruebo …)

Mi código para manejar el loadMatchesResult

 @Override public void onResult(TurnBasedMultiplayer.LoadMatchesResult loadMatchesResult) { showToast("GotMatches status: " + loadMatchesResult.getStatus().getStatusCode()); //add matches to listview (only caching matchId, no references to turnbasedmatch) loadMatchesResult.getMatches().getMyTurnMatches().close(); loadMatchesResult.getMatches().getInvitations().close(); loadMatchesResult.getMatches().getTheirTurnMatches().close(); loadMatchesResult.getMatches().getCompletedMatches().close(); loadMatchesResult.release(); } 

Encontré otro punto de interés … empieza a parecer que el problema ocurre al desplegar un nuevo apk en el dispositivo … Una vez que implemente un nuevo apk (ya sea por instalar la versión alfa de google play o directamente depurar la versión de Android Studio) se fueron. Cuando no cambie el apk puedo reiniciar mi teléfono / cerrar la aplicación y funciona bien …

Problema también se produce si actualizar la aplicación a través de la tienda de juegos … Debe haber más personas que tienen este problema!

Obtenido de https://developer.android.com/reference/com/google/android/gms/common/api/PendingResult.html#setResultCallback(com.google.android.gms.common.api.ResultCallback )

Después de que el resultado ha sido recuperado usando await () o entregado al retorno de llamada de resultado, es un error intentar recuperar el resultado de nuevo. Es responsabilidad del receptor de llamada o de devolución de llamada liberar cualquier recurso asociado con el resultado devuelto. Algunos tipos de resultados pueden implementar Releasable, en cuyo caso release () debería utilizarse para liberar los recursos asociados.

Después de recuperar el resultado, se obtiene un error al intentar obtener los resultados de nuevo, hasta que libere los recursos asociados con el resultado devuelto, por lo que el borrado de la caché funciona para volverlos visibles de nuevo. Debes acceder a la caché del dispositivo y mostrar los resultados desde allí también, o borrar los recursos asociados (dentro del programa) cada vez que quieras acceder a los resultados de nuevo.

Tuve el mismo problema hasta que encontré "Juegos guardados" en mi consola de desarrollo:

  1. Ir a Servicios de juegos -> Detalles del juego -> Juegos guardados
  2. Establezca el elemento en "On"

Elemento Juegos guardados en la Consola del programador

Esto debería resolver su problema,

Aplausos, Pablo

  • No se pueden usar los servicios de Google Play en el complemento de java de unidad
  • No se puede resolver el símbolo 'LocationClient' en Android Studio
  • La inicialización de la aplicación es muy lenta: la inicialización de FirebaseApp no ​​tiene éxito
  • Consumir compras canceladas en la facturación en aplicaciones de Google Play
  • GamesClient no se conecta. Error: "Llamar a connect () y esperar a que onConnected () sea llamado."
  • ¿Cómo inhabilito la versión instalada de los servicios de Google Play en mi dispositivo Android?
  • Necesita el registro de cambios de Google Play Services / Notas de la versión
  • Esta aplicación no se ejecutará a menos que actualice el error de Google Play Services
  • El selector de sitios de Android (PlacePicker) ya no tiene el icono Buscar después de actualizar a Google Play Services 9.0.83
  • Cómo obtener la dirección del usuario mediante la dirección api de google play servicios 4.3 en android?
  • ClassNotFoundException para SignInConfiguration al iniciar sesión con Google
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.