Facebook Android SDK Sesión openForPublish no crear una nueva sesión

En el SDK de Android de Facebook cuando llamo

Session tempSession = new Builder(this).build(); Session.setActiveSession(tempSession); tempSession.openForRead(new OpenRequest(this).setPermissions(FB_PERMISSIONS)); 

Se obtiene una sesión de FB y todo funciona como de costumbre. Pero cuando reemplazo Read with Publish . Es decir, sigue

 Session tempSession = new Builder(this).build(); Session.setActiveSession(tempSession); tempSession.openForPublish(new OpenRequest(this).setPermissions(FB_PERMISSIONS)); 

Da un error diciendo, que la sesión está vacía, y no puede obtener los permisos de publicación a la sesión vacía.

¿Puede decir por qué es así y cuál sería la mejor manera de manejar esto?

La respuesta corta es, no llame a openForPublish. Llame a openForRead y, a continuación, soliciteNewPublishPermissions más tarde si necesita permisos de publicación.

La respuesta larga es que no puede solicitar permisos de publicación (en un usuario que nunca ha estado conectado con Facebook antes a través de su aplicación) a menos que ya tenga permisos básicos o predeterminados (lo que obtendría si llamara a openForRead con un conjunto de permisos vacío) . Así que openForPublish maneja un caso de uso de nicho muy específico que la mayoría de las aplicaciones probablemente no tienen.

Me tomó un tiempo para resolver esto para que un usuario puede hacer clic en un botón para compartir uno de mis productos en Facebook en un feed. No quería que se les pidiera que firmar en hasta que realmente quería compartir, por lo que realmente sólo quería publicar permiso. La siguiente pila de la solicitud inicial de inicio de sesión / permiso de lectura con la solicitud de permiso de publicación. Esto le pedirá dos veces a los usuarios, primero para leer, luego para publicar, pero eso es necesario ahora independientemente de la solución:

 Session session = Session.getActiveSession(); if (session == null) { session = new Session.Builder(this).setApplicationId("<APP ID HERE>").build(); Session.setActiveSession(session); session.addCallback(new StatusCallback() { public void call(Session session, SessionState state, Exception exception) { if (state == SessionState.OPENED) { Session.OpenRequest openRequest = new Session.OpenRequest(FacebookActivity.this); openRequest.setLoginBehavior(SessionLoginBehavior.SSO_WITH_FALLBACK); session.requestNewPublishPermissions( new Session.NewPermissionsRequest(FacebookActivity.this, PERMISSIONS)); } else if (state == SessionState.OPENED_TOKEN_UPDATED) { publishSomething(); } else if (state == SessionState.CLOSED_LOGIN_FAILED) { session.closeAndClearTokenInformation(); // Possibly finish the activity } else if (state == SessionState.CLOSED) { session.close(); // Possibly finish the activity } }}); } if (!session.isOpened()) { Session.OpenRequest openRequest = new Session.OpenRequest(this); openRequest.setLoginBehavior(SessionLoginBehavior.SSO_WITH_FALLBACK); session.openForRead(openRequest); } else publishSomething(); 
  • Android: Cómo obtener las fechas de nacimiento de los amigos del calendario de Facebook mediante Graph API
  • Obtener amigos taggable Facebook Android
  • ¿Cómo comprobar si el usuario está conectado con FB SDK 4.0 para Android?
  • Facebook FriendPicker no se muestra (Facebook Android SDK Tutorial "Show Friends" no están actualizados)
  • El uso de Facebook SDK en Android da "Usuario conectado como usuario de Facebook diferente." Error
  • Android FaceBook nuevoMyFriendsRequest devuelve EMPTY lista de amigos
  • "Facebook no se puede resolver a un tipo" en Facebook SDK para Android
  • ¿Por qué el ID de aplicación de Facebook de repente se convierte en no válido?
  • Botón de inicio personalizado de Facebook en el estudio android
  • Publicar en el muro de Facebook del usuario no funciona cuando se instala la aplicación de Facebook en el dispositivo / emulador
  • ¿Cómo instalar facebook api en el emulador en Windows 7?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.