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:
- Android + XAMARIN + Force para permanecer en modo "Retrato" (usando AndroidManifest)
- Xamarin: Android: System.UnauthorizedAccessException: se deniega el acceso a la ruta
- La aplicación de Android no aparece en la tienda de juegos de algunos dispositivos
- Xamarin vs Titanium Appcelerator?
- ¿Usa la unidad Xamarin?
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).
- Nativo de Google Plus Login para Xamarin.Android y Xamarin.iOS
- Enlace Xamarin.Android definiendo Getter / Setter Métodos usando EnumMethods.xml para la interfaz
- El código funciona en Xamarin Android pero no funciona en Java (HttpPost JSON)
- ¿Cómo puedo eliminar los idiomas no utilizados del archivo APK final con Xamarin.Android?
- El enlace MvvmCross Fragment no funciona
- Cómo configurar onclick oyente en xamarin?
- Error al inflar el fragmento de clase, Xamarin
- Pellizcar zoom en una imagen en Xamarin
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(); } }
- Error: (23, 13) No se pudo resolver: com.google.android.gms: play-services: 11.2.0 "Instalar repositorio y sincronizar proyecto" la dosis no funciona
- YouTubeThumbnailView en ListView