El diálogo de la parte posterior del facebook de la identificación del poste vuelve siempre null en androide

Utilicé la identificación de la aplicación de prueba y registro por usuario de prueba crear en la aplicación de dash_board en facebook desarrollar el sitio, requieren permiso pulish_actions cuando inicio de sesión con el botón de inicio de sesión widget de facebook sdk pero resultado obtener postid siempre = null. Aquí está mi código:

.... shareDialog = new ShareDialog(MainActivity.this); shareDialog.registerCallback(callbackManager, new FacebookCallback<Sharer.Result>() { @Override public void onSuccess(Sharer.Result result) { if (result.getPostId() != null) Log.e(TAG, result.getPostId()); } @Override public void onCancel() { } @Override public void onError(FacebookException e) { } }); pulishButton.setOnClickListener(this); try{ loginButton.setPublishPermissions(new String[]{"publish_actions","publish_stream"}); }catch (FacebookException e){ e.printStackTrace(); } loginButton.registerCallback(callbackManager, new FacebookCallback<LoginResult>() { @Override public void onSuccess(LoginResult loginResult) { Log.e(TAG, "success"); loginButton.setEnabled(false); pulishButton.setEnabled(true); GraphRequest.newMeRequest( loginResult.getAccessToken(), new GraphRequest.GraphJSONObjectCallback() { @Override public void onCompleted(JSONObject json, GraphResponse response) { if (response.getError() != null) { // handle error System.out.println("ERROR"); } else { System.out.println("Success"); } catch (JSONException e) { e.printStackTrace(); } } } }).executeAsync(); } @Override public void onCancel() { Log.e(TAG, "On cancel"); } @Override public void onError(FacebookException e) { Log.d(TAG, e.toString()); } }); 

La solución es obligar a ShareDialog a utilizar el modo Feed y evitar el uso de la App de FB para compartir:

 shareDialog.show(linkContent, ShareDialog.Mode.FEED); 

Creo que esto es un error de FB. No envían postId a la devolución de llamada onSuccess cuando usan FB App para compartir (postId = null), pero lo hacen si usan Feed.

He oído que puedes evitar el problema "postId = null" usando el inicio de sesión de Facebook y exigiendo el permiso "publish_actions". Pero no creo que esta sea la manera correcta de lidiar con este problema. Respecto al mencionado permiso, Facebook afirma:

La publicación a través de diálogos o plugins sociales no requiere este permiso. No solicites revisión de este permiso si solo estás usando el diálogo Compartir, Diálogo de Feed, Diálogo de Mensajes, etc., o Plugins Sociales (por ejemplo, el botón Like).

Documentos de Facebook en el diálogo Compartir:

Esto no requiere el inicio de sesión de Facebook ni ningún permiso extendido, por lo que es la forma más fácil de habilitar el uso compartido en la web.

No puedes iniciar sesión directamente con "publish_action", primero debes iniciar sesión con cualquier permiso de lectura y luego pedir permisos de publicación https://developers.facebook.com/docs/facebook-login/permissions/v2.4#publishing

  • Facebook Deep Linking no funciona en Android
  • Error: Clase no encontrada al desmarcar: com.facebook.login.Login Solicitud del cliente
  • Cómo obtener la dirección de correo electrónico del usuario registrado con la solicitud de gráfico en Facebook Android sdk 4.0
  • Android facebook sdk 4.0 ProfileTracker onCurrentProfileChanged nunca se llama
  • Comparte con Facebook Messenger
  • FacebookButton SDK v4 LoginButton ignora las personalizaciones XML
  • NullPointerExcepetion Facebook sdk v4.5.0 cuando habilite Proguard (cuando intente ingresar usando la biblioteca de Parse)
  • ¿Cuál es la nueva implementación del diálogo de solicitudes de aplicaciones en Android Facebook SDK 4.0.1
  • Android Facebook SDK 4.0.0 Compartir la devolución de llamada no funciona correctamente
  • Cualquier ejemplo que muestre cómo iniciar sesión con Facebook SDK 4.0 en Android, ya sea utilizando el botón propio o el botón de Facebook?
  • Inicio de sesión de Android Facebook SDK 4.0 con LoginManager
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.