API de Android IsConnected devolviendo TRUE tras finalizar sesión

Estoy desarrollando un juego para Android usando Google Play Game Services, usando Xamarin. Estoy haciendo mis pruebas usando un emulador Android de Genymotion. Me he topado con un problema que parece ser un error en la implementación de Google Play o de Xamarin.

Si salgo de una cuenta de Google , las llamadas a IGoogleApiClient.IsConnected () continúan devolviendo true (aunque claramente he firmado). Si intento utilizar ese objeto API, obtendré excepciones como:

Java.lang.SecurityException: No se ha iniciado sesión al llamar a API

Por ejemplo, el código de seguimiento produce la excepción anterior si se ejecuta después de cerrar sesión:

public void StartNewMatch() { if (!mGoogleApiClient.IsConnected) { return; } Intent intent = GamesClass.TurnBasedMultiplayer.GetSelectOpponentsIntent(mGoogleApiClient, 1, 1, true); StartActivityForResult(intent, RC_SELECT_PLAYERS); } 

Estoy saliendo en la bandeja de entrada de Google Play Games (selector de coincidencias); Como se muestra en las imágenes de abajo.

Alguien se topa con esto antes? ¿Me estoy perdiendo de algo? ¿Tienes algún problema?

Nota: esto sólo ocurre si se cierra la sesión a través de la interfaz de usuario de Google. Si firmo manualmente el usuario, con algo como mGoogleApiClient.Disconnect() , el problema no se produce; mGoogleApiClient.IsConnected() ahora devuelve false (como se esperaba).

Introduzca aquí la descripción de la imagen

Introduzca aquí la descripción de la imagen

Introduzca aquí la descripción de la imagen

Con el fin de mantener firmado en estado sincronizado debe implementar onActivityResult correctamente.

Esto debería verse como sigue:

NOTA: este es el código java, no estoy seguro de cómo se verá exactamente con Xamarin, pero espero que puedas averiguarlo 🙂

 @Override protected void onActivityResult(int requestCode, int responseCode, Intent data) { // check for "inconsistent state" if ( responseCode == GamesActivityResultCodes.RESULT_RECONNECT_REQUIRED && requestCode == <your_request_code_here> ) { // force a disconnect to sync up state, ensuring that mClient reports "not connected" mGoogleApiClient.disconnect(); } } 

NOTA: asegúrese de reemplazar en el código con el código de solicitud que utilizó. Es posible que tenga que buscar varios códigos de solicitud también.

Si está usando las clases de gameHelper de la biblioteca de BaseGameUtils (es más fácil de usar), puede modificar el código anterior a esto:

 @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); gameHelper.onActivityResult(requestCode, resultCode, data); if (resultCode == GamesActivityResultCodes.RESULT_RECONNECT_REQUIRED){ // force a disconnect to sync up state, ensuring that mClient reports "not connected" gameHelper.getApiClient().disconnect(); } } 
  • OnCreateOptionsMenu no recibe llamadas en Android 7.0
  • Pasar datos de una actividad a otra en Xamarin.Android
  • Serialización de objetos para una nueva actividad
  • Cómo cambiar la fuente / color / tamaño en Xamarin C #
  • ¿Cómo tratar con "$ {applicationid}" en Xamarin?
  • ¿Cómo puedo enlazar a `ItemClick` para un` MvxLinearLayout`?
  • La forma correcta de hacer streaming RTMP multiplataforma / reproducir aplicaciones. Phonegap livu plugin?
  • SQLite.SQLiteException lanzado en Xamarin.Android al intentar crear una tabla
  • Xamarin Forms Android Problemas, el paquete android.support.design. * No existe
  • Xamarin Studio 2 - última actualización estable - Error ejecutando la tarea Aapt: La secuencia de origen está vacía
  • El botón de Android muestra diferentes mensajes de Toast dependen del número de clics
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.