Publicar en pared FB Utilizar SDK 3.0
Hola compañeros programadores, tengo dificultades en el nuevo SDK de Facebook,
El escenario es:
- Iniciar sesión en appengine desde el cliente android
- Cómo hacer la reanudación de sesión SSL en Android
- Funcionalidad de cierre de sesión en android
- Autorización para Android de Facebook - no puede iniciar sesión cuando se instala la aplicación oficial de Facebook
- Longitud de sesión corta en Google Analytics para Android
Im usando el fragmento así que sigo estos pasos
¿Por qué no funciona la interfaz de Android Facebook con Fragments?
Y ahora estoy recibiendo el oncomplete y el ID de token
Ahora quiero publicar en mi pared por lo que ive creado esta función
private void publishStory(Session session) { if (session != null){ // Check for publish permissions session.addCallback(new StatusCallback() { @Override public void call(Session session, SessionState state, Exception exception) { List<String> PERMISSIONS = Arrays .asList("publish_actions"); session .requestNewPublishPermissions(new Session.NewPermissionsRequest( getActivity(), PERMISSIONS)); Request request = Request.newStatusUpdateRequest( session, "Temple Hello Word Sample", new Request.Callback() { @Override public void onCompleted(Response response) { Log.i("fb:done = ", response.getGraphObject() + "," + response.getError()); } }); request.executeAsync(); } });
Y poner la Declaración sobre el Oncomplete
public void call(final Session session, SessionState state, Exception exception) { if (session.isOpened()) { Request.executeMeRequestAsync(session, new Request.GraphUserCallback() { @Override public void onCompleted(GraphUser user, Response response) { publishStory(session); } else { Log.v("FACEBOOK ", "NO ACCESS"); } } }); }
Mi problema está en esta línea de código session.addCallback(new StatusCallback() {
salta el siguiente paso así terminando la función sin publicar en mi pared.
Estoy seguro de que la sesión está activa, ya que tengo ID de aplicación y token de acceso.
¿Alguna ayuda?
Gracias
EDITAR
Estoy utilizando este código basado en la respuesta a continuación y agregó nuevos permisos
private void publishStoryTEST(final Session session) { if (session != null) { Bundle postParams = new Bundle(); postParams.putString("message", "TEST"); 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("JSON", "JSON error " + e.getMessage()); } FacebookRequestError error = response.getError(); Log.e("post response", response.toString()); if (error != null) { } else { } } }; List<String> PERMISSIONS = Arrays .asList("publish_actions"); session.requestNewPublishPermissions(new Session.NewPermissionsRequest(getActivity(), PERMISSIONS)); Request request = new Request(session, "me/feed", postParams, HttpMethod.POST, callback); RequestAsyncTask task = new RequestAsyncTask(request); task.execute(); } }
Pero aún estoy recibiendo un error diciendo
The user hasn't authorized the application to perform this action
¿Por qué es que todavía tengo ese error? ¿El permiso nunca se llama?
- Android: Persistencia de la sesión de servidor mediante cookie al realizar llamadas HTTP
- Estrategia de la aplicación de Android para realizar un seguimiento de una sesión de inicio de sesión
- Retrofit sigue olvidando mis cookies :( Android
- Android: inicia sesión en el sitio web y conserva sesión / cookie mediante DefaultHttpClient
- Android detecta si una aplicación entró en el fondo
- ¿Cómo puedo administrar la sesión en el inicio / cierre de sesión de Android?
- Inicio de sesión de Android - Mejor implementación
- Salir de una sesión de LinkedIn en Android
El problema es común, estoy compartiendo con usted el código fuente de trabajo del método de contabilización que estoy usando actualmente en mi aplicación.
private void publishStory(String status) { Session session = Session.getActiveSession(); if (session != null) { Bundle postParams = new Bundle(); postParams.putString("message", status); Request.Callback callback = new Request.Callback() { public void onMalformedURLException(MalformedURLException e) { } public void onIOException(IOException e) { } public void onFileNotFoundException(FileNotFoundExceptione) { } public void onFacebookError(FacebookError e) { } public void onCompleted(Response response) { JSONObject graphResponse = response.getGraphObject().getInnerJSONObject(); String postId = null; try { postId = graphResponse.getString("id"); } catch (JSONException e) { Log.i("JSON", "JSON error " + e.getMessage()); } FacebookRequestError error = response.getError(); Log.e("post response", response.toString()); if (error != null) { } else { } } }; Request request = new Request(session, "me/feed", postParams, HttpMethod.POST, callback); RequestAsyncTask task = new RequestAsyncTask(request); task.execute(); } }
Espero que esto resuelva tu problema.
EDITAR:
Consulte los siguientes enlaces para obtener un procedimiento detallado de configuración de Facebook SDK 3.0 con permisos adecuados y funciones de publicación.
Publicar en Facebook después de que el inicio de sesión no funcione Android
http://www.kpbird.com/2013/03/android-login-using-facebook-sdk-30.html
// Intente abajo el código
private void postData() { lnrPbr.setVisibility(View.VISIBLE); isSharingData = true; Session session = Session.getActiveSession(); if (session != null) { Bundle postParams = new Bundle(); postParams.putString("name", getIntent().getStringExtra("IN_SHARE_CAPTION") == null ? "" : getIntent().getStringExtra("IN_SHARE_CAPTION")); postParams.putString("caption", getIntent().getStringExtra("IN_SHARE_CAPTION") == null ? "" : getIntent().getStringExtra("IN_SHARE_CAPTION")); postParams.putString("description", getIntent().getStringExtra("IN_SHARE_DESCRIPTION") == null ? "" : getIntent().getStringExtra("IN_SHARE_DESCRIPTION")); postParams.putString("link", getIntent().getStringExtra("IN_SHARE_SHARELINK") == null ? "" : getIntent().getStringExtra("IN_SHARE_SHARELINK")); postParams.putString("picture", getIntent().getStringExtra("IN_SHARE_THUMB") == null ? "" : getIntent().getStringExtra("IN_SHARE_THUMB")); postParams.putString("message", getIntent().getStringExtra("IN_SHARE_MESSAGE") == null ? "" : getIntent().getStringExtra("IN_SHARE_MESSAGE")); Request.Callback callback = new Request.Callback() { public void onCompleted(Response response) { isSharingData = false; lnrPbr.setVisibility(View.GONE); FacebookRequestError error = response.getError(); if (error != null) { IjoomerUtilities.getCustomOkDialog(getString(R.string.facebook_share_title), error.getErrorMessage(), getString(R.string.ok), R.layout.ijoomer_ok_dialog, new CustomAlertNeutral() { @Override public void NeutralMethod() { finish(); } }); } else { IjoomerUtilities.getCustomOkDialog(getString(R.string.facebook_share_title), getString(R.string.facebook_share_success), getString(R.string.ok), R.layout.ijoomer_ok_dialog, new CustomAlertNeutral() { @Override public void NeutralMethod() { finish(); } }); } } }; Request request = new Request(Session.getActiveSession(), "me/feed", postParams, HttpMethod.POST, callback); RequestAsyncTask task = new RequestAsyncTask(request); task.execute(); } }
Consulte este tutorial ..
http://www.androidhive.info/2012/03/android-facebook-connect-tutorial/
public void postToWall() { // post on user's wall. facebook.dialog(this, "feed", new DialogListener() { @Override public void onFacebookError(FacebookError e) { } @Override public void onError(DialogError e) { } @Override public void onComplete(Bundle values) { } @Override public void onCancel() { } }); }
- Cambiar el color de la barra de notificación
- Error intermitente del punto final de la nube autenticada en el cliente de Android