Sugerencias

Tag: facebook (3 posts)

Problemas al renderizar fbml en una aplicación de facebook con iframes

Publicado el 10 Aug 2010

Ahora es posible usar marcado fbml dentro de una aplicación de facebook basada en iframes. Pero no es posible usar toda la colección de tags disponibles, sino una lista reducida conocida como Xfbml.

Para hacer uso en nuestra aplicación de estos tags, debemos inicializar la librería de javascript de facebook de la siguiente manera:

 <script type=text/javascript>  
    FB_RequireFeatures(["xfbml"], function(){  
        FB.facebook.init("YOUR APIKEY", "xd_receiver.htm");  
 });  
 </script>

y en cualquiera de nuestras vistas podriamos usar código fbml de la siguiente manera directamente:

Hola soy <fb:name uid="<%= facebook_session.user.id %>" useyou=false> </fb:name>
Y mi avatar es:  <fb:profile-pic uid="<%= facebook_session.user.id %>" > </fb:profice-pic>
    

    

y en principio con esto valdría... pero como muchas veces pasa con facebook, esto no funciona. Para conseguir hacer funcionar el marcado, es necesario hacer un pequeño truco: en la configuración de nuestra aplicación a través de la aplicación "Developer" necesitamos que, aunque nuestra aplicación esté dentro de facebook y no sea una aplicación "connect" (es decir, que no es una aplicación que usemos para iniciar sesión a través de facebook en una web externa), configurar el parámetro Connect Url de la sección Connect con la misma url que estamos usando en Canvas Callback URL.

canvas_callback

connect_url_

Un poco extraño todo esto, la única explicación un poco razonable que se puede encontrar a éste pequeño requisito, es que todo el desarrollo del Xfbml se implementó de la mano de la api para facebook connect, para poder pintar los "Social Widget" de facebook (que son marcado xfbml) en cualquier web fuera de facebook y esa feature es la que estamos usando aqui para poder pintar fbml dentro de nuestro iframe, pues al fin y al cabo, nuestro querido iframe es una web externa a facebook.

Cosas que no funcionan en la api de facebook (Parte I)

Publicado el 12 Feb 2010

Creo que cualquiera que haya desarrollado con la api de facebook vera que éste tema da mucho de sí, de ahí que lo haya dividido en partes y cada día voy a hablar de algún punto en particular.

Widget de Comentarios

Ampliamente usado en muchísimos sites pero con una gran pega (al menos para algunos): no permite la pre-moderación de comentarios, bueno, o si según ellos, ya que permiten a partir de la variable numposts fijar el número de comentarios máximo mostrado por el widget, con lo que poniendo éste numero a 0, nunca se mostraran los comentarios de los usuarios en el widget en el momento de hacerlos, y se podría realizar una premoderación sobre ellos. Pues bien, esto no funciona en el widget. Por mucho que nos empeñemos en cambiar ese número, se lo pasa por ahí, y siempre muestra el número de comentarios por defecto, en este caso 10.

Ésto esta reportado en su foro de desarrolladores desde hace por lo menos un mes, pero hasta la fecha no han hecho mucho caso...

Una funcionalidad muy ligada a la anterior es la de consultar a través de FQL todos los comentarios que los usuarios han dejado en nuestro site con el widget. No esta soportado por la api un método para poder recuperar todos los comentarios de un site, sino que hay que ir pidiendo los comentarios para cada uno de los xid con los que hayamos registrado nuestros widgets de comentarios. Pero según la documentacion del método usado para pedir los comentarios, Comments.get, se puede hacer una query directamente a la tabla de comentarios para pedir los comentarios de todos los xid que queramos, pudiendo bajar de una vez todos los comentarios del site. Pues bien, otra de las cosas que no funcionan, o más bien que su documentación dice que se puede hacer y no es así. Según su documentación, teniendo una sesión valida, podríamos hacer lo siguiente:

session.post("facebook.fql.query",:query => "select xid,text,id,fromid,time from comment 
where xid IN (#{ids.join(',')})")

donde el array ids contendría todos los xid usados por nuestros widgets de comentarios. Si ese array contiene mas de 20 elementos (aproximadamente, tampoco es una cienca exacta :) ) ese petición falla, devolviendo un error. Por lo tanto tenemos que escalonar nuestras peticiones limitando en cada query a 20 (mas o menos) el numero de xid pedidas.

session = Facebooker::Session.create
offset = 0
while offset <= Item.count do  
    items = Item.find(:all,:select => :id, :limit => 20, :offset => offset).map(&:id)
    session.post("facebook.fql.query",:query => "select xid,text,id,fromid,time from 
   comment where xid IN (#{items.join(',')})")
    offset += 20
end

Si en nuestro site, tenemos mucho contenido, con lo que tendremos muchísimos widgets de comentarios, ésta tarea puede ser laboriosa y costosa en tiempo y recursos.

Una última funcionalidad de la que no te puedes fiar mucho tampoco, es la posibilidad de que te notifiquen cada vez que algún usuario comenta en tu site con el widget. Se supone que te mandan una notificación a tu cuenta de facebook, cosa que yo he visto funcionar algunas veces y otras muchas no.

Hay un hilo de foro de desarrolladores bastante interesante alrededor del widget de comentarios, que intenta aclarar muchas de las dudas que los usuarios tienen alrededor de él, y que ha juzgar por el numero de respuestas del hilo, son muchísimas :) ...

¿Para cuando un simple método que nos devuelva todos los comentarios de nuestro site? ¿Tan difícil es?

Y vosotros, ¿os habeís encontrado con mas fallos básicos en la api de facebook?

Facebook empieza a dar los emails de sus usuarios a los desarrolladores

Publicado el 10 Feb 2010

Como anunció facebook en su blog para desarrolladores el pasado mes de enero, van a empezar a ceder el email de los usuarios a todas aquellas aplicaciones que lo solicten, previa autorización de los mismos.

Hasta ahora esto no era posible. Cuando desde un site se queria hacer una integración con facebook, através de facebook connect por ejemplo, se podia conseguir que los usuarios iniciaran una sesión valida en nuestro site através de las credenciales de facebook, pero en ningún caso podiamos enviar notificaciones a los usuarios a su email. El único canal existente para comunicarnos con los usuarios de facebook era através del proxied email donde dependias del propio facebook para hacer llegar tus notificaciones a los usuarios.

Ahora todo esto ha cambiado, y lo mejor de todo es que también funciona ;-). Através de un simple permiso llamado 'email' podemos solicitar a nuestros usuarios que compartan, incluso de manera obligatoria si así lo deseamos, su dirección de email en facebook con nuestro site.

A partir de ahora, podremos conseguir registrar a los usuarios en nuestro site de una manera mucho mas autónoma, sin tener que pedir campos adicionales una vez que se han logueado con facebook connect.

Para los desarrolladores de facebook bajo rails que usen el plugin facebooker ya pueden conseguir los email de los usuarios de la siguiente manera. Al inicializar facebook connect en nuestra vista, podemos pedir el permiso especial:

<%= init_fb_connect "XFBML" , :app_settings => {:permsToRequestOnConnect => "email"} %>

con lo que conseguiremos, que una vez el usuario haya hecho login en facebook, le salga la siguiente petición de permisos:

email facebook permission

Una vez que el usuario ha aceptado los permisos, podemos acceder a su email con una simple FQL (Facebook Query Language:

"SELECT email FROM user WHERE uid='#{facebook_session.user.id}'";

o através del método directo de facebooker:

 @user.email = facebook_session.user.email