Cómo publicar en la pared de Facebook con Facebook SDK de Android, sin abrir el cuadro de diálogo

Estoy usando facebook sdk y con la ayuda del ejemplo dado con ese SDK desarrollé un código para iniciar sesión y almacenar access_token en la base de datos

tengo 2 problemas:

1). cuando trato de buscar access_token desde la base de datos y pasarlo a Facebook, no me permite publicar en la pared usando ese ejemplo dado con ese facebook sdk, ¿por qué es así?

2). Pasé por ese código facebook.java, pero lo que obtuve es que para publicar en una pared tengo que abrir un cuadro de diálogo ya que no hay otro método para pasar mi mensaje de inmediato y publicarlo. Por favor dígame solución hacia él o dígame qué debo hacer cuando quiero publicar en una pared sin abrir un cuadro de diálogo

mPostButton.setOnClickListener(new OnClickListener() { public void onClick(View v) { String message = "Post this to my wall"; Bundle params = new Bundle(); params.putString("message", message); mAsyncRunner.request("me/feed", params, "POST", new WallPostRequestListener()); } }); public class WallPostRequestListener extends BaseRequestListener { public void onComplete(final String response) { Log.d("Facebook-Example", "Got response: " + response); String message = ""; try { JSONObject json = Util.parseJson(response); message = json.getString("message"); } catch (JSONException e) { Log.w("Facebook-Example", "JSON Error in response"); } catch (FacebookError e) { Log.w("Facebook-Example", "Facebook Error: " + e.getMessage()); } final String text = "Your Wall Post: " + message; Example.this.runOnUiThread(new Runnable() { public void run() { mText.setText(text); } }); } } 

¿Qué pasa con el código de arriba … no está publicando en la pared y dándome Wall Post: vacío en el teléfono y emulador de ambos

Gracias por adelantado..

Apliqué el siguiente código y pude publicar mi mensaje en la pared.

 public void postOnWall(String msg) { Log.d("Tests", "Testing graph API wall post"); try { String response = mFacebook.request("me"); Bundle parameters = new Bundle(); parameters.putString("message", msg); parameters.putString("description", "test test test"); response = mFacebook.request("me/feed", parameters, "POST"); Log.d("Tests", "got response: " + response); if (response == null || response.equals("") || response.equals("false")) { Log.v("Error", "Blank response"); } } catch(Exception e) { e.printStackTrace(); } } 

Actualicé mi tutorial en http://www.integratingstuff.com/2010/10/14/integrating-facebook-into-an-android-application/ y ahora está respondiendo exactamente esta pregunta. Se basa y básicamente es lo mismo que la respuesta de Ankit, pero guía a las personas de principio a fin a través de la implementación de todo el proceso.

Bueno, no es que algo se publique en la pared sin informar al usuario. Cuando el usuario permite su aplicación, el sdk de Android de Android presenta otra página, donde hay un texto enviado por sus aplicaciones, y un cuadro de texto donde el usuario puede escribir en su pared, similar a la captura de pantalla que adjunté

El diseño real en el dispositivo móvil es ligeramente diferente, pero está en el mismo formato. Este proceso se muestra bien en los ejemplos de muestra de facebook android sdk.

Ahora comprueba la pregunta formulada en esta publicación:

Facebook Connect Android – usando stream.publish @ http://api.facebook.com/restserver.php ‘> Facebook Connect Android – usando stream.publish @ http://api.facebook.com/restserver.php

En esa pregunta, busque esto: postParams.put (), tipo similar de líneas estará allí en algunos de sus archivos JAVA. Estas son las líneas con las que puede publicar los datos en Facebook.

Por ejemplo:

 postParams.put("user_message", "TESTING 123"); 

es el mensaje,

postParams.put("attachment", "{\"name\":\"Facebook Connect for Android\",\"href\":\"http://code.google.com/p/fbconnect-android/\",\"caption\":\"Caption\",\"description\":\"Description\",\"media\":[{\"type\":\"image\",\"src\":\"http://img40.yfrog.com/img40/5914/iphoneconnectbtn.jpg\",\"href\":\"http://developers.facebook.com/connect.php?tab=iphone/\"}],\"properties\":{\"another link\":{\"text\":\"Facebook home page\",\"href\":\"http://www.facebook.com\"}}}");

es la línea donde está proporcionando el icono para la aplicación, descripción, título, título, etc.

texto alternativo

Utilicé el código de Ankit para publicar en Facebook, pero su código me dio el error android.os.NetworkOnMainThreadException .

Después de buscar en este problema, una solución me dijo que pusiera su código en AsyncTask para deshacerse de este problema. Después de modificar su código, funciona bien para mí.

El código modificado se ve así:

 public class UiAsyncTask extends AsyncTask { public void onPreExecute() { // On first execute } public Void doInBackground(Void... unused) { // Background Work Log.d("Tests", "Testing graph API wall post"); try { String response = facebook.request("me"); Bundle parameters = new Bundle(); parameters.putString("message", "This test message for wall post"); parameters.putString("description", "test test test"); response = facebook.request("me/feed", parameters, "POST"); Log.d("Tests", "got response: " + response); if (response == null || response.equals("") || response.equals("false")) { Log.v("Error", "Blank response"); } } catch(Exception e) { e.printStackTrace(); } return null; } public void onPostExecute(Void unused) { // Result } } 

Esta clase me ayuda a enviar mensajes en mi muro de Facebook SIN diálogo:

 public class FBManager{ private static final String FB_ACCESS_TOKEN = "fb_access_token"; private static final String FB_EXPIRES = "fb_expires"; private Activity context; private Facebook facebookApi; private Runnable successRunnable=new Runnable(){ @Override public void run() { Toast.makeText(context, "Success", Toast.LENGTH_LONG).show(); } }; public FBManager(Activity context){ this.context = context; facebookApi = new Facebook(FB_API_ID); facebookApi.setAccessToken(restreAccessToken()); } public void postOnWall(final String text, final String link){ new Thread(){ @Override public void run(){ try { Bundle parameters = new Bundle(); parameters.putString("message", text); if(link!=null){ parameters.putString("link", link); } String response = facebookApi.request("me/feed", parameters, "POST"); if(!response.equals("")){ if(!response.contains("error")){ context.runOnUiThread(successRunnable); }else{ Log.e("Facebook error:", response); } } } catch (Exception e) { e.printStackTrace(); } } }.start(); } public void save(String access_token, long expires){ SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context); Editor editor=prefs.edit(); editor.putString(FB_ACCESS_TOKEN, access_token); editor.putLong(FB_EXPIRES, expires); editor.commit(); } public String restreAccessToken(){ SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context); return prefs.getString(FB_ACCESS_TOKEN, null); } public long restreExpires(){ SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context); return prefs.getLong(FB_EXPIRES, 0); } 

}