Android / Java – Publicar texto simple en la pared de Facebook?

Estoy intentando integrar la publicación en la pared desde mi aplicación. Ya tengo un área donde el usuario puede guardar su nombre de usuario y contraseña (cifrado). Quisiera que mi programa recupere el username y la contraseña ahorrados, pase eso a Facebook para la autentificación, y después permita que la aplicación publique el texto simple (quizá un acoplamiento también) a la pared del usuario.

Dicho esto, he leído todo en las páginas de desarrolladores de Facebook (la api me parece completamente ajena … nunca he hecho ningún tipo de desarrollo de aplicaciones web antes … solo aplicaciones de escritorio) y he experimentado con Java Bibliotecas aquí, pero para ser honesto, no entiendo ninguna de las diversas implementaciones. Algunos afirman ser simple de usar, pero al parecer están todos por encima de mi cabeza.

Incluso he intentado jugar con el SDK oficial de Android de Facebook, pero que utiliza una interfaz webview, y no puedo pasar el nombre de usuario y la contraseña para la autenticación fácil. Además, todavía no tengo ni idea de cómo publicar en la pared, incluso después de la autenticación correcta.

Por favor ayuda. Gracias.

Oh, btw ya tengo una clave de API de Facebook y el ID de la aplicación.

[UPDATE 1]

Para mayor claridad: Si utilizo el fragmento de código siguiente con el SDK oficial de Facebook para Android, http://github.com/facebook/facebook-android-sdk ¿Qué debo hacer a continuación (después de que el usuario haya iniciado sesión)? Esto no está claro para mí.

Facebook facebookClient = new Facebook(); facebookClient.authorize(this, "[APP ID]", new String[] {"publish_stream", "read_stream", "offline_access"}, this); 

Donde "this" es una actividad que implementa un DialogListener, y "[APP ID]" es mi ID de aplicación de Facebook.

Gracias.

[UPDATE 2]

He encontrado una solución (ver más abajo), aunque lo único que falta es la capacidad de auto-rellenar los cuadros de texto de inicio de sesión con los datos que he almacenado en la aplicación. El Facebook oficial de Android SDK no puede permitir esto. Voy a seguir investigando.

Lo deduje, con la ayuda de Tom (gracias). La clave era crear un diálogo con la llamada a la API de "stream.publish", utilizando el SDK de Android de Facebook. Estos son los pasos:

  1. Descargue el SDK oficial de Facebook para Android: http://github.com/facebook/facebook-android-sdk
  2. Importe los archivos de proyecto en Eclipse.
  3. Exporte el proyecto como un archivo * .jar. (Esto podría causar un conflicto)

    [ACTUALIZAR]

    Facebook recientemente actualizó el código fuente y me di cuenta de que el icono de archivo causado conflictos de identificación de recursos con mis proyectos (Android 1.5 +). Mi solución es olvidar la exportación como un frasco. En su lugar, copie la carpeta "com" de Facebook directamente en la carpeta "src" de su aplicación (es decir, "com.facebook.android" debería ser un paquete en su aplicación … junto a sus archivos de origen). Si ya tiene una carpeta "com" en su carpeta "src", no se preocupe por los cuadros de diálogo que aparecen sobre sobrescribir archivos, ninguno de sus archivos de origen debe sobrescribirse. Volver a Eclipse, y actualizar la carpeta "src" y "com.facebook.android" ahora debe aparecer como un paquete. Copie uno de los iconos de Facebook incluidos en la carpeta "dibujable" de su aplicación y actualícela también. Eclipse se quejará del archivo "FbDialog.java" … solo agregue una importación apuntando al archivo "R" de su aplicación al encabezado de ese archivo (por ejemplo, si el nombre del paquete de su aplicación es "com.android.myapp" y luego agregue Esto: "import com.android.myapp.R;"). Vaya a # 5 si usted necesitó hacer esto.

  4. Agregue el archivo .jar a la ruta de construcción de su proyecto

  5. Observe el siguiente código de ejemplo simplificado:
import android.app.Activity; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.LinearLayout; import com.facebook.android.*; import com.facebook.android.Facebook.DialogListener; public class FacebookActivity extends Activity implements DialogListener, OnClickListener { private Facebook facebookClient; private LinearLayout facebookButton; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); this.setContentView(R.layout.test);//my layout xml facebookButton = (LinearLayout)this.findViewById(R.id.Test_Facebook_Layout); } @Override public void onComplete(Bundle values) { if (values.isEmpty()) { //"skip" clicked ? return; } // if facebookClient.authorize(...) was successful, this runs // this also runs after successful post // after posting, "post_id" is added to the values bundle // I use that to differentiate between a call from // faceBook.authorize(...) and a call from a successful post // is there a better way of doing this? if (!values.containsKey("post_id")) { try { Bundle parameters = new Bundle(); parameters.putString("message", "this is a test");// the message to post to the wall facebookClient.dialog(this, "stream.publish", parameters, this);// "stream.publish" is an API call } catch (Exception e) { // TODO: handle exception System.out.println(e.getMessage()); } } } @Override public void onError(DialogError e) { System.out.println("Error: " + e.getMessage()); } @Override public void onFacebookError(FacebookError e) { System.out.println("Error: " + e.getMessage()); } @Override public void onCancel() { } @Override public void onClick(View v) { if (v == facebookButton) { facebookClient = new Facebook(); // replace APP_API_ID with your own facebookClient.authorize(this, APP_API_ID, new String[] {"publish_stream", "read_stream", "offline_access"}, this); } } }
import android.app.Activity; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.LinearLayout; import com.facebook.android.*; import com.facebook.android.Facebook.DialogListener; public class FacebookActivity extends Activity implements DialogListener, OnClickListener { private Facebook facebookClient; private LinearLayout facebookButton; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); this.setContentView(R.layout.test);//my layout xml facebookButton = (LinearLayout)this.findViewById(R.id.Test_Facebook_Layout); } @Override public void onComplete(Bundle values) { if (values.isEmpty()) { //"skip" clicked ? return; } // if facebookClient.authorize(...) was successful, this runs // this also runs after successful post // after posting, "post_id" is added to the values bundle // I use that to differentiate between a call from // faceBook.authorize(...) and a call from a successful post // is there a better way of doing this? if (!values.containsKey("post_id")) { try { Bundle parameters = new Bundle(); parameters.putString("message", "this is a test");// the message to post to the wall facebookClient.dialog(this, "stream.publish", parameters, this);// "stream.publish" is an API call } catch (Exception e) { // TODO: handle exception System.out.println(e.getMessage()); } } } @Override public void onError(DialogError e) { System.out.println("Error: " + e.getMessage()); } @Override public void onFacebookError(FacebookError e) { System.out.println("Error: " + e.getMessage()); } @Override public void onCancel() { } @Override public void onClick(View v) { if (v == facebookButton) { facebookClient = new Facebook(); // replace APP_API_ID with your own facebookClient.authorize(this, APP_API_ID, new String[] {"publish_stream", "read_stream", "offline_access"}, this); } } } 
 AsyncFacebookRunner mAsyncRunner; Facebook facebook =new Facebook("Your app id"); btnLogin.setOnClickListener(new OnClickListener() { @Override public void onClick(View arg0) { // TODO Auto-generated method stub facebook.authorize(FbdemoActivity.this, new String[]{ "user_photos,publish_checkins,publish_actions,publish_stream"},new DialogListener() { @Override public void onComplete(Bundle values) { } @Override public void onFacebookError(FacebookError error) { } @Override public void onError(DialogError e) { } @Override public void onCancel() { } }); } }); public void postOnWall(String msg) { Log.d("Tests", "Testing graph API wall post"); try { String response = facebook.request("me"); Bundle parameters = new Bundle(); parameters.putString("message", msg); 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(); } 

Esta es una respuesta objetiva a su nueva pregunta, "¿Qué hago a continuación?"

Una mirada rápida al código fuente me lleva a creer que esto es lo que usted hace:

Compruebe esta URL para los métodos de la API REST ( http://en.wikipedia.org/wiki/Representational_State_Transfer ) que puede utilizar para dejar un comentario / publicación:

http://developers.facebook.com/docs/reference/rest/

Específicamente esto: http://developers.facebook.com/docs/reference/rest/links.post

Echa un vistazo a las líneas 171 a 295 de Facebook.java http://github.com/facebook/facebook-android-sdk/blob/master/facebook/src/com/facebook/android/Facebook.java

Para ver cómo utilizar la API para realizar estas solicitudes.

Es probable que desee este método (está sobrecargado, vea el código).

  /** * Make a request to Facebook's old (pre-graph) API with the given * parameters. One of the parameter keys must be "method" and its value * should be a valid REST server API method. * * See http://developers.facebook.com/docs/reference/rest/ * * Note that this method blocks waiting for a network response, so do not * call it in a UI thread. * * Example: * <code> * Bundle parameters = new Bundle(); * parameters.putString("method", "auth.expireSession"); * String response = request(parameters); * </code> * * @param parameters * Key-value pairs of parameters to the request. Refer to the * documentation: one of the parameters must be "method". * @throws IOException * if a network error occurs * @throws MalformedURLException * if accessing an invalid endpoint * @throws IllegalArgumentException * if one of the parameters is not "method" * @return JSON string representation of the response */ public String request(Bundle parameters) 

A los que tienen problemas, en el nuevo facebook (); , La cadena es App_id, y simplemente elimine el APP_ID en la llamada autorizada.

No sé por qué se muestra el mensaje de error, pero supongo que facebook actualizó el SDK de Facebook.

  • ¿Cómo se puede forzar una descarga en un objeto OutputStream sin cerrarlo?
  • ¿Cómo puedo detectar si un sprite fue tocado en Java libGDX?
  • Android Google Maps V2 - Tarjeta Sd como proveedor de mosaico
  • Android: Cómo cargar una foto en flickr usando flickrj-android-2.0.0 android library
  • OnOptionsItemSelected, return super.onOptionsItemSelected (item) explaination
  • Ajuste el botón Visible en otro acticty con la configuración de Preferencias
  • Html.fromHtml (String) + problema de desviación de línea
  • Citas de relleno en JSONObject
  • Android Visualización de datos de json a cardview en RecyclerView
  • CameraDevice no puede crear sesión
  • Cómo girar un marcador en OSMDroid para Android?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.