Problema de sesión de Android Facebook

He utilizado el siguiente código para la autenticación de Facebook y está funcionando bien, pero cuando he cancelado la autenticación y trató de autenticar de nuevo la aplicación se estrelló y el registro fue causado por: java.lang.UnsupportedOperationException: Session: an attempt was made to open an already opened session.
En depuración conseguí como esto

 {Session state:CREATED, token:{AccessToken token:ACCESS_TOKEN_REMOVED permissions:[]}, appId:xxxxxxxxxxxxxxx} 

¿Cómo puedo resolver este problema.Por favor, ayúdame.Gracias de antemano

 private void askFacebbokAuthentication() { Session session = Session.getActiveSession(); if (session.isOpened()) { facebook = true; if (!hasPublishPermission()) { session.requestNewPublishPermissions(new NewPermissionsRequest( MyActivity.this, PERMISSIONS)); } } else { Session.OpenRequest openRequest = null; openRequest = new Session.OpenRequest(MyActivity.this); if (openRequest != null) { openRequest.setDefaultAudience(SessionDefaultAudience.FRIENDS); if (!hasPublishPermission()) { openRequest.setPermissions(PERMISSIONS); } session.openForPublish(openRequest); } } } 

Yo también tenía el mismo problema, pero he resuelto con estas líneas. A mi entender, no podemos solicitar una sesión para nuevos permisos que ya está abierta.

 Session session = new Session(this); Session.setActiveSession(session); session.openForRead(new Session.OpenRequest(this).setCallback(callback).setPermissions(Arrays.asList("your_permissions"))); 

Espero que ya hayas añadido debajo de la línea en onActivityResult()

 Session.getActiveSession().onActivityResult(this, requestCode, resultCode, data); 

Si la Sesión no está abierta ni cerrada, creo que es mejor que Session.openActiveSession ()

Este snipped es copiado-pegado del proyecto de ejemplo de Facebook SDK SessionLoginSample, LoginUsingActivityActivity # onClickLogin ()

 private void onClickLogin() { Session session = Session.getActiveSession(); if (!session.isOpened() && !session.isClosed()) { session.openForRead(new Session.OpenRequest(this).setCallback(statusCallback)); } else { Session.openActiveSession(this, true, statusCallback); } } 

Tenga en cuenta que la sesión # openActiveSession () también crea una sesión bajo el capó, que está bien. Desde https://developers.facebook.com/docs/technical-guides/iossdk/session/#lifecycle :

Las sesiones sólo se pueden abrir una vez. Cuando se cierra una sesión, no se puede volver a abrir. En su lugar, debe crearse una nueva sesión. Las aplicaciones típicas solo requieren una sesión activa en cualquier momento. El SDK de Facebook proporciona métodos de sesión activos estáticos que se encargan de abrir nuevas instancias de sesión.

  • Facebook SDK para android: getFirstName () y getLastName () devuelven cadenas null
  • Uso del diálogo compartido en Android Facebook SDK. ¿Cómo saber si el usuario comparte o cancela la actividad compartida?
  • ¿Estaría bloqueando Facebook Androoid SDK mi apps en el nivel de api por debajo de 15?
  • Android Facebook 4.0 SDK Cómo obtener correo electrónico, fecha de nacimiento y sexo del usuario
  • Android Facebook SDK 3.0 proporciona "remote_app_id no coincide con el ID almacenado" al iniciar sesión
  • Iniciar sesión en facebook un botón para abrir una nueva actividad
  • Cómo salir de sesión de forma programática de Facebook SDK 3.0 sin utilizar el botón de inicio de sesión / cierre de sesión de Facebook?
  • Botón de inicio de sesión de Facebook: aplicar estilo personalizado
  • LikeView Callback
  • Facebook Android SDK 4.0: newGraphPathRequest devuelve "Un token de acceso activo debe utilizarse para consultar información sobre el usuario actual."
  • FacebookSdk.sdkInitialize (Context) está obsoleto
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.