Do not speak Spanish? Read this post in English.

Jueves, 30 d julio d 2009.

Facebook Api: Pedir permisos al usuario para publicar en su cuenta de Facebook

Nota
La Api de Facebook antigua, en la que está basada la mayor parte de este post, está siendo reemplazada poco a poco por una nueva api de facebook. Es necesario que sepas que Facebook cada día da menos soporte a su antigua api y a Facebook Connect.

Si estás buscando información general sobre este tema te recomiendo que leas los artículos más actuales en la categoría Facebook Graph Api de este mismo blog.

Más concretamente, y en relación a este artículo, puedes leer:

Un tema crítico si queremos hacer SMO con nuestras aplicaciones de Facebook o con nuestras webs ligadas con Facebook Connect es el de pedir los permisos al usuario para que nuestra aplicacion le publique cosas en Facebook.

Dare un pequeño repaso a las distintas formas que hay para conseguirlo. Cada una de ellas se adapta a una forma de hacer esta petición y unas cudrarán más en unas webs que otras.

Lo primero a saber es que permisos debo solicitar al usuario. Existen varios permisos que se nos pueden conceder, unos son más abusivos que otros pero también sus mensajes de advertencia al usuario pueden asustarle más o menos (si es que nos creemos que los usuarios leen estos cuadros...).

Los distintos permisos así como los strings que actuan como identificadores de los mismos pueden encontrarse en este link. Está en inglés, pero no es dificil de entender.

Los usuarios por defecto no tienen ninguno de los permisos activados y hay que pedirles que los activen.

Aprovechando para preguntarlo en un envío de formulario

Si estamos desarrollando aplicaciones internas de Facebook (¡y no con Facebook Connect!) podemos incluir en cualquier formulario una peticiónde permisos. Lo que hará Facebook es que al procesar el formulario pedirá esos permisos antes de continuar cargando la página de respuesta que será en la que lanzaremos nuestra accion contando con que nos han dado permisos.

<form promptpermission="status_update" >
  <p>Tu nuevo status: <input type="text" name="newStatus" /></p>
  <p><input type="submit" value="Enviar" /></p>
</form>

Usando Facebook Connect

Para mi, la forma y más fácil y controlada para conseguir permisos es con Facebook Connect ( como usar facebook connect ). Ahí, si usamos la api javacript de facebook tenemos un método llamado showPermissionDialog() que nos permite sacar una ventana modal pidiendo el permiso que queramos...

// FB.Connect.showPermissionDialog( stringId_del_permiso, callback );

FB.Connect.showPermissionDialog("status_update",function(r) {
if (r) alert("Ya tienes permisos para publicar status");
else alert("Vaya! no te han dado permiso");
});

Usando FBML (FaceBook Marckup Language)

Entre la api de etiquetas FBML está una que genera un link para pedir permisos:

<fb:prompt-permission perms="read_stream,publish_stream"> 
Dar permisos para leer y publicar tu estado
</fb:prompt-permission>

Usando redirección en el servidor

En el proceso de nuestro servidor podemos provocar una redirección al usuario hacia una pagina de petición de permisos. La url es la siguiente:

http://www.facebook.com/authorize.php?api_key=[[APIKEY]]&v=1.0&ext_perm=[[STRINGID_DEL_PERMISO]]&next=[[URL_SI_DA_EL_PERMISO]]&next_cancel=[[URL_SI_NO_LO_DA]]

$hasPermission =  $facebook->api_client->call_method("facebook.users.hasAppPermission",array(
  'uid'			=> $user_id,
  'ext_perm'		=> 'share_item'
));
if ( !$hasPermission )
{
  $urlNext = "/mipagina";
  $urlNextCancel = "/mipagina2";
  header( "location: http://www.facebook.com/authorize.php?api_key=".$appapikey."&v=1.0&ext_perm=share_item&next=" . urlencode($urlNext) . "&next_cancel=" . urlencode($urlNextCancel) );
  die();
}

Esta es la forma más compleja de hacerlo y la que más problemas puede dar. En las pruebas que he hecho el cuadro se mostraba sin problemas pero he recibido avisos de personas a las que Facebook se les queja de que están haciendo demasiadas redirecciones. Tengo que mirar si encuentro una forma de evitar ese aviso en todas las aplicaciones.

A mi me parece que la forma más cómoda y controlada es la Api javascript de Facebook Connect, pero como veis, para gustos, colores...

Temas Relacionados: programacion tutoriales

Autor:

8 Comentarios para “Facebook Api: Pedir permisos al usuario para publicar en su cuenta de Facebook”

  1. Ariel dice:

    Es necesario tener una aplicación de Facebook para poder postear a una página de facebook desde mi web??
    Gracias por la respuesta.

  2. Juan Belón dice:

    No hace falta Ariel, mira un componente sencillo como Share It, o un botón sencillo como el que tiene puesto ikhuerta donde dice "Comparte este artículo", no hace falta crear una aplicación, pero el origen del comentario para el muro al compartir no será tu página sino el propio motor de Facebook...
    entiendes?
    saludos

  3. Selene Moon dice:

    Hola, quisiera saber como tengo que hacer para pedir "permiso" para crear un Rol en FB, para diversion con un grupo de amig@s de un libro que estamso leyendo. He visto que grupos de rol tienen los permisos dados y sinceramnete no se como conseguirlos

  4. Gustavo dice:

    Hola, quería saber como hacer con PHP para averiguar que permisos concedió determinado usuario a mí aplicación.

  5. Marcelo dice:

    Tengo una pregunta:

    Quiero hacer esto mismo, que para acceder a un archivo a descargar en mi página, los usuarios deban clickear en un botón "me gusta", y una vez hecho eso, aparezca en el muro de ese usuario un mensaje como "he descargado el archivo xxxx etc." . Luego que el usuario ponga "me gusta" re dirigirlo al archivo a descargar. Como podré hacer eso?

  6. marcos dice:

    hola una pregunta como hago para compartir comentarios pongo todo y me dice no tienes suficiente permiso

  7. Rosario vilar rodrigez dice:

    hola como hago para compartir comentarios pongo todos y me dice no tiene suficiente permiso

  8. Victor dice:

    Hola actualmente tengo una api que permite tomar los permisos basicos
    como foto de usuario, email y nombre. tengo un problema mi api funciona solo de google chrome cuando intento hacer el llamado desde otro navegador no funciona. tiene alguna idea de que sea?

Anímate y deja tu comentario

Esto son experimentos, no preguntes ;) prueba metadescription Prueba title