Tip Android – Uso del SDK de Facebook para publicar en el muro

Tip Android – Uso del SDK de Facebook para publicar en el muro
portada2

Hola amigos de geekytheory, hoy vamos a aprender una buena forma de implementar tu app Android con Facebook. El objetivo de este TIP es que puedas publicar en el muro de Facebook aquello que quieras compartir de tu app (Score de un juego, Mensaje de logros, etc…).

Captura0

Para ello vamos a dividir el Tip en varias secciones:

  1. Creación de una app de Facebook.
  2. Importación del SDK de Facebook en tu app.
  3. Implementación de la app ejemplo.

Creación de una app de facebook En esta primera parte vamos a dar de alta nuestra app en Facebook. Para ello primero vamos al siguiente enlace: https://developers.facebook.com/apps Seguidamente pincháis sobre el botón Crear una nueva aplicación.

Captura1

Se abrirá una ventana que rellenaremos con nuestros datos.

Captura2

Una vez creada nos quedamos con el ID de la aplicación que usaremos en nuestra app. Importación del SDK de Facebook en tu app Tras obtener el ID de nuestra app de Facebook, nos creamos un proyecto que nos servirá como ejemplo para este TIP. Así pues, yo le he puesto como nombre de proyecto GeekyTheoryFacebook. El siguiente paso será descargar el SDK de Facebook, el cual, lo podemos encontrar en el siguiente enlace: https://developers.facebook.com/resources/facebook-android-sdk-3.0.1.zip Cuando se haya descargado importamos el SDK a nuestra app como una librería, para ello seguimos los siguientes pasos:

Captura3

En propiedades seleccionamos Android->library->add y buscamos la carpeta donde se encuentra el SDK de Facebook, Seleccionamos la librería “facebook”. De tal forma que quede así.

Captura4

Aceptamos y pasamos al último paso. Implementación de la app ejemplo La interfaz gráfica de nuestra app ejemplo será la siguiente:

Captura5

El código XML que genera esta interfaz es el siguiente: Una vez tenemos nuestra interfaz hecha vamos a seguir con nuestro código en java. Lo primero que haremos será implementar una clase llamada BaseDialogListener, que nos permitirá mostrar un dialog de este estilo:

Captura6

package com.example.geekytheoryfacebook; import android.os.Bundle; import android.util.Log; import com.facebook.android.DialogError; import com.facebook.android.Facebook.DialogListener; import com.facebook.android.FacebookError; public class BaseDialogListener implements DialogListener{ @Override public void onComplete(Bundle values) { // TODO Auto-generated method stub } @Override public void onFacebookError(FacebookError e) { // TODO Auto-generated method stub } @Override public void onError(DialogError e) { // TODO Auto-generated method stub Log.e("Facebook", e.getMessage()); e.printStackTrace(); } @Override public void onCancel() { // TODO Auto-generated method stub } } Seguidamente nos vamos a nuestra activity principal donde nos encontraremos con lo bueno: package com.example.geekytheoryfacebook; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.view.Menu; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.EditText; import android.widget.Toast; import com.facebook.android.AsyncFacebookRunner; import com.facebook.android.DialogError; import com.facebook.android.Facebook; import com.facebook.android.Facebook.DialogListener; import com.facebook.android.FacebookError; public class MainActivity extends Activity implements OnClickListener { //declaramos los elementos del XML EditText etTitulo, etDescripcion, etCaption, etUrl, etLink; Button publicar; //Guardamos en una constante el ID de nuestra app de Facebook private static String ID_FB="XXXXXXXXXXXXXXX"; //creamos un objeto Facebook private Facebook facebook; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //Creamos y asignamos los objetos de nuestro XML etTitulo = (EditText) findViewById(R.id.etTitulo); etDescripcion = (EditText) findViewById(R.id.etDescripcion); etCaption = (EditText) findViewById(R.id.etCaption); etUrl = (EditText) findViewById(R.id.etUrl); etLink = (EditText) findViewById(R.id.etLink); publicar = (Button)findViewById(R.id.bPost); publicar.setOnClickListener(this); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.main, menu); return true; } @Override public void onClick(View v) { // TODO Auto-generated method stub if(v.getId()==publicar.getId()){ //al pulsar sobre el boton publicar invocamos el método publicaMuro() publicarMuro(); } } private void publicarMuro() { // TODO Auto-generated method stub //Creamos un objeto facebook con el id de nuestra app facebook = new Facebook(ID_FB); //Ejecutamos la sesion de facebook new AsyncFacebookRunner(facebook); //en función del estado de la sesión hacemos una cosa u otra if(!facebook.isSessionValid()) { //si la sesion es valida mostramos en pantalla que hemos accedido correctamente y //publicamos el mensaje con el método mensaje_en_el_muro() facebook.authorize(this, new String[] {}, new DialogListener() { @Override al com public void onComplete(Bundle values) { Toast mensaje= Toast.makeText(MainActivity.this,"Has iniciado la sesion correctamente.", Toast.LENGTH_SHORT); mensaje.show(); //escribimos el mensaje en el muro mensaje_En_El_Muro(); } //Si la sesion devuelve un error mostramos un mensaje de error @Override public void onFacebookError(FacebookError error) { Toast mensaje= Toast.makeText(MainActivity.this,"Ha ocurrido un error al intentar iniciar sesión", Toast.LENGTH_SHORT); mensaje.show(); } @Override public void onError(DialogError e) { Toast mensaje= Toast.makeText(MainActivity.this,"Ha ocurrido un error al intentar iniciar sesión", Toast.LENGTH_SHORT); mensaje.show(); } @Override public void onCancel() {} }); } } private void mensaje_En_El_Muro() { // TODO Auto-generated method stub Bundle params = new Bundle(); //introducimos dentro del objeto Bundle el texto que introduzcamos en los editText. params.putString("description", etDescripcion.getText()+""); params.putString("name", etTitulo.getText()+""); params.putString("caption", etCaption.getText()+""); params.putString("picture", etUrl.getText()+""); params.putString("link", etLink.getText()+""); //ejecutamos un dialogo con el objeto Bundle rellenado facebook.dialog(MainActivity.this, "feed", params, new SampleDialogListener()); } @Override public void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); facebook.authorizeCallback(requestCode, resultCode, data); } public class SampleDialogListener extends BaseDialogListener { public void onComplete(Bundle values) { Toast mensaje= Toast.makeText(MainActivity.this,"Enviado", Toast.LENGTH_SHORT); mensaje.show(); } } } Tras implementar el código el cual está comentado pasamos a ejecutar nuestra app. Un ejemplo práctico puede ser el siguiente:

captura7
captura8

Pues eso es todo, si tenéis alguna inquietud no dudéis en pregunta vía comentarios o mediante mi twitter personal @alex_esquiva. Por Favor, Compartir el TIP a vuestros amigos a través de vuestras redes sociales. Un saludo. Enlaces Recomendados: [catlist name='Android' orderby=title order=asc numberposts=8]