Session: se ha intentado solicitar nuevos permisos para una sesión que tiene una petición pendiente

Quiero publicar la historia a través de la aplicación de Android y utilizo un código a continuación.

private static final List<String> PERMISSIONS = Arrays.asList("publish_actions"); private static final String PENDING_PUBLISH_KEY = "pendingPublishReauthorization"; private boolean pendingPublishReauthorization = false; private UiLifecycleHelper uiHelper; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); uiHelper = new UiLifecycleHelper(XXActivity.this, callback); uiHelper.onCreate(savedInstanceState); setContentView(R.layout.layoutAct); ... ... ... publishAddCardStory(); ... } @Override public void onResume() { super.onResume(); Session session = Session.getActiveSession(); if (session != null && (session.isOpened() || session.isClosed())) { onSessionStateChange(session, session.getState(), null); } uiHelper.onResume(); } @Override public void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); uiHelper.onActivityResult(requestCode, resultCode, data); Session.getActiveSession().onActivityResult(this, requestCode, resultCode, data); } @Override public void onPause() { super.onPause(); uiHelper.onPause(); } @Override protected void onDestroy() { super.onDestroy(); uiHelper.onDestroy(); } @Override public void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); outState.putBoolean(PENDING_PUBLISH_KEY, pendingPublishReauthorization); uiHelper.onSaveInstanceState(outState); } private void publishAddCardStory() { Session session = initFacebookSession(PopupAddCardSuccessActivity.this); session = Session.getActiveSession(); if (session != null){ // Check for publish permissions List<String> permissions = session.getPermissions(); if (!isSubsetOf(PERMISSIONS, permissions)) { pendingPublishReauthorization = true; Session.NewPermissionsRequest newPermissionsRequest = new Session .NewPermissionsRequest(this, PERMISSIONS); session.requestNewPublishPermissions(newPermissionsRequest); return; } Bundle params = new Bundle(); ... params.putString("message", msg); params.putString("description", desc); params.putString("link", LINK); ... Request.Callback callback= new Request.Callback() { public void onCompleted(Response response) { JSONObject graphResponse = response .getGraphObject() .getInnerJSONObject(); String postId = null; try { postId = graphResponse.getString("id"); } catch (JSONException e) { Log.i("FB-Response", "JSON error "+ e.getMessage()); } FacebookRequestError error = response.getError(); if (error != null) { Toast.makeText(XXActivity.this .getApplicationContext(), getString(R.string.fb_post_fail), Toast.LENGTH_SHORT).show(); } else { Toast.makeText(XXActivity.this .getApplicationContext(), getString(R.string.fb_post_success), Toast.LENGTH_LONG).show(); } } }; Request request = new Request(session, "me/feed", params, HttpMethod.POST, callback); RequestAsyncTask task = new RequestAsyncTask(request); task.execute(); } } private boolean isSubsetOf(Collection<String> subset, Collection<String> superset) { for (String string : subset) { if (!superset.contains(string)) { return false; } } return true; } private void onSessionStateChange(Session session, SessionState state, Exception exception) { if (state.isOpened()) { //shareButton.setVisibility(View.VISIBLE); } else if (state.isClosed()) { //shareButton.setVisibility(View.INVISIBLE); } } private Session.StatusCallback callback = new Session.StatusCallback() { @Override public void call(Session session, SessionState state, Exception exception) { onSessionStateChange(session, state, exception); } }; private static Session initFacebookSession(Context context) { Session session = Session.getActiveSession(); if (session != null) return session; if (session == null) session = new Session(context); return session; } 

En algún momento tengo estos 2 errores ….

Java.lang.UnsupportedOperationException: Session: se realizó un intento de solicitar nuevos permisos para una sesión que tiene una solicitud pendiente.

O en algún momento …

Java.lang.UnsupportedOperationException: Session: se realizó un intento de solicitar nuevos permisos para una sesión que no está abierta actualmente.

Cualquier sugerencia sería apreciar.

En primer lugar, su método initFacebookSession es inútil ya que llama Session.getActiveSession () justo debajo de él, para que pueda eliminar este método.

A continuación, debe manejar los cambios de SessionState en el método onSessionStateChange. Mientras que usted no hace y solamente el lugar donde usted llama el método de publishAddCardStory está en onCreate, asumo que la razón que usted consigue que los errores son esto:

  1. Usted llama al método publish en onCreate
  2. En el método de publicación llamas requestNewPermissions durante Session, por lo tanto tu actividad sería destruida y facebook activity con dialog que las peticiones permitiendo nuevos permisos de usuario aparezcan y Session get en estado pendiente
  3. El usuario permitiría (o no) nuevos permisos a través del diálogo
  4. Su actividad se crea de nuevo, por lo tanto, usted llama a newPermissionsRequest sobre Session de nuevo mientras Session sigue en estado pendiente while onSessionStateChange no fue llamado todavía

Trate de buscar en Facebook Dev Tutoriales: https://developers.facebook.com/docs/android/scrumptious/ cómo manejar los cambios SessionState. Facebook SDK también proporciona algunas aplicaciones de ejemplo que pueden ser útiles también. ¡Buena suerte! 🙂

  • El inicio de sesión de Android facebook no funciona con la aplicación de Facebook instalada
  • Cómo resolver las herramientas de Facebook: replace = "android: theme"?
  • LikeView Callback
  • Inicie sesión una vez y omita la configuración de inicio de sesión cada vez que se inicia la aplicación después del primer inicio de sesión
  • La clave de la aplicación de Android no coincide con ninguna hash de clave almacenada
  • Utilizando facebook sdk en android studio
  • No puede iniciar sesión con la nueva versión 3.0 de facebook sdk para android
  • ¿Podemos cambiar la imagen del enlace (que está publicado por la aplicación android) en facebook
  • Generación de hash de claves de liberación en Linux OS (Ubuntu): Android Facebook SDK
  • Configuración de sesión de Android FB API 3.0 con fragmentos
  • No se puede acceder a amigos de Facebook mediante la aplicación de Android
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.