Hasta este punto, si todo ha salido bien, hemos podido desplegar un simple mensaje en facebook utilizando un servlet; sin embargo esto puede no ser suficiente para hacer ciertas cosas que podamos querer hacer dentro de nuestra aplicación, como mandar invitaciones a amigos, publicar historias en el “mini-feed” de Facebook, inclusive no podemos ni si quiera saber quien es o cuál es el número de usuario de la persona que está ejecutando nuestra aplicación. Existe entonces un procedimiento de autentificación que nos permite tener una interacción con la plataforma de tal manera que podamos hacer todas estas cosas:
Este diagrama es parecido al anterior, solo muestra ciertos detalles extras:
- El usuario visita facebook y “ejecuta” nuestra aplicación
- Facebook hace la petición al servidor del contenido de la aplicación
- Facebook y nuestro servlet mantienen una interacción usando la API de java (para hacer esto es necesario llevar a cabo la autentificación), además se cargan datos de nuestra base de datos (de tener una) y se crea el contenido de la aplicación.
- El contenido es enviado a Facebook
- EL contenido de la aplicación es mostrado al usuario.
El punto 3 es lo que la mayoría de los desarrolladores de aplicaciones hacen, de esta manera podemos hacer todas esas cosas que antes mencionamos y que, sin autentificar el cliente, no podríamos hacer. Es aquí también donde entra la controversia hacerca de la privacidad en Facebook, acerca de como las aplicaciones pueden tener acceso a nuestra información; obviamente es una cuestión de ética no hacer mál uso de esta información por parte del desarrollador, además, por parte de los usuarios es cuestión de saber qué instalamos y confiar o no en el contenido de las aplicaciones (…ver más).
El proceso de autentificación puede ser generalmente complicado o un poco difícil de entender. Dentro de las características de nuestra aplicación, descritas por la aplicación Developer se encuentran dos datos de crucial importancia, el API KEY y el SECRET, estos datos nos permitirán hacer la autentificación de nuestro servlet de tal manera que este tenga el permiso necesario para interactuar con Facebook.
Si me hicieron caso, compilaron y probaron la aplicación de prueba que se provee con la API, si no ¡HÁGANLO!, (aclarará muchas cosas). El proceso de autentificación es el siguiente, en un algoritmo sencillo:
(click en la imagen para agrandar)
¿Cómo saber si el usuario ha inicado sesión en Facebook?
Si un usario ha iniciado sesión en Facebook, la llamada a la aplicación http://apps.facebook.com/nombredemiapp/ llevará como parámetro un “SESSION_KEY”, por el cual podemos preguntar en nuestro servlet por medio de una petición de la siguiente forma:
String sessionKey = request.getParameter(FacebookParam.SESSION_KEY.toString());
Donde request es un objeto del tipo HttpServletRequest;
Ahora podemos comprobar si el sessionKey es null o su longitud no es mayor que 0; de ser así, quiere decir que el usuario no ha iniciado sessión en Facebook por lo que tenemos que redireccionarlo a la página de inicio de sesión:
http://www.facebook.com/login.php?api_key=YOUR_API_KEY&v=1.0
o
https://login.facebook.com/login.php?api_key=YOUR_API_KEY&v=1.0
Obviamente se reemplaza YOUR_API_KEY por el número de aplicación que se nos asignó. Esta URL soporta varios parámetros, entre los importantes:
canvas
Si este parámetro NO se añade, nuestra aplicación se va a comportar de manera curiosa, después de hacer correctamente el inicio de sesión, Facebook llamará a nuestro “callback URL”, es decir, al repositorio que hemos especificado, es decir http://www.abcdefg.com/washa/, y si se tiene un index.html se mostrará el contenido de este, como una página externa completamente.
Al añadir el parámetro canvas a la URL, le especificamos a facebook, que después de la autentificación use la dirección de nuestro canvas y no el callback URL, es decir http://apps.facebook.com/elnombredemiap/. Pero también hay que especificar qué servlet se va a llamar, esto se hace con el siguiente parámetro.
next
Ya sea usando el callback URL o el canvas, con este parámetro especificamos que página (Servlet) se adjunta a la llamada, es decir callbackURL/next o canvas/next, es por eso necesario especificar cuál será el servlet a cargar.
Haciendo más claro todo:
1.- Una llamada de la siguiente manera:
http://www.facebook.com/login.php?api_key=YOUR_API_KEY&v=1.0
Llamará la siguiente dirección:
http://www.abcdefg.com/washa/&session_key=”123456″
y ya que este es solamente la dirección de nuestro repositorio (si no tiene un index.html) será mostrado nuestro perfil de facebook solamente.
2.- Una llamada de la siguiente manera:
http://www.facebook.com/login.php?api_key=YOUR_API_KEY&v=1.0&canvas&next=Servlet1
Llamará la siguiente dirección:
http://apps.facebook.com/elnombredemiap/Servlet1&session_key=”123456″
Este último resultado es el tipo de llamada que deseamos para nuestra aplicación, es bueno que prueben con ambas llamadas para que se den cuenta de la diferencia (con y sin next).
Para una descripción completa de los parámetros ver esta página.
Una vez que tengamos nuestro SESSION_KEY, es posible autentificar un cliente y hacer uso de las funcionalidades de este de la manera en que nosotros deseemos. Para autentificar el cliente es necesario usar un objeto de la clase FacebookXMLRestClient:
FacebookXMLRestclient cliente= new FacebookXmlRestClient(api_key,secret,sessionKey);
y después especificar que nuestro cliente no es de tipo “Desktop”:
client.setIsDesktop(false);
Y eso es todo, ¡ahora podremos hacer llamadas a la API de Facebook!
. Les doy un Servlet que pueden probar y usar, por el bien de la comunidad =), ya que soy usuario de SW libre, compartamos el conocmiento.
Descargar Principal.java (update:ya funciona el enlace, lo siento).
Tags: autentificación facebook, Facebook


July 1, 2008 at 1:09 pm |
dice que mi cuenta no esta confirmada pero mi page=174
July 1, 2008 at 9:54 pm |
tu page=174 ??
¿Estás usando el “SESSION KEY” y el “SECRET” de tu aplicación?