Les Applications sur Facebook

Voici un article concernant le développement d'une application pour Facebook. Tout d'abord, il convient -ce que ne fait pas la documentation Facebook- de définir précisément ce qu'est une application Facebook. Il faut en fait distinguer deux "types" d'applications, deux systèmes aux fonctionnements différents.

  1. Les applications telles que les jeux, intégrées à Facebook au travers d'une iFrame ("canvas")
  2. Les applications extérieures à Facebook : un chat Facebook par exemple, ou encore Deezer lorsque vous voulez partager une musique.

Ces deux catégories restent des applications de Facebook, mais dans le développement on voit rapidement qu'il y a des différences sensibles. Je vais m'intéresser ici plus particulièrement à l'authentification -c'est à dire l'autorisation d'une application pour un utilisateur- d'une application. Tout d'abord pour les applications intégrées à Facebook.

L'utilisateur se trouve donc sur une page du type http://apps.facebook.com/monapplication, et le canvas affiche une page se trouvant sur votre serveur. Comme indiqué ici, il faut rediriger l'utilisateur vers la page https://www.facebook.com/dialog/oauth?clientid=YOURAPPID&redirecturi=YOURCANVASPAGE

Déjà la doc devient un peu confuse : que met-on dans YOURCANVASPAGE ? L'adresse de la page affichée dans le canvas, i.e. l'adresse de la page située sur le serveur ? Ou bien l'adresse de l'application sur Facebook ? Il faut en fait -c'est en tout cas ce que j'ai compris et ce que j'ai fais- indiqurt l'adresse de l'application : http://apps.facebook.com/monapplication. En effet, sinon l'utilisateur sortirait de Facebook, ce qui pourrait le désorienter. Si l'utilisateur autorise l'application il est rediriger vers cette page. Sinon, et là la doc mélange, son choix est de quitter l'application, et non pas de la refuser ! Il ne sera alors pas redirigé vers http://YOURCANVASPAGE?errorreason=userdenied&error=accessdenied&errordescription=The+user+denied+your+request., il sera simplement redirigé vers http://www.facebook.com.

Si il accepte l'application, il est intéressant pour celle-ci de récupérer un token à utiliser avec les API de Facebook, telles que Graph ou FQL . Là la doc est plutôt explicite, il s'extrait de $REQUEST["signedrequest"] de la façon décrite par la documentation (plus d'infos ici).

Sinon, si l'application cette fois est extérieure à Facebook. L'utilisateur se trouve donc sur votre site web disons. Il faut presque de la même façon le rediriger vers https://www.facebook.com/dialog/oauth?
clientid=YOURAPPID&redirecturi=YOURURL. Là pas d'ambiguité, dans YOURURL vous indiquez la page retour de votre site web. Et cette fois-ci, l'utilisateur aura le choix entre autoriser l'application, ou bien la refuser. Et dans le cas du refus, la page http://YOURURL?errorreason=userdenied&error=accessdenied&error_description=The+user+denied+your+request. sera bien appelée.

Si en revanche l'utilisateur autorise l'application, il sera redirigé vers http://YOURURL?code=ACODEGENERATEDBYSERVER. La méthode pour extraire de $GET['code'] un token est très différente. Le serveur doit appeler la page https://graph.facebook.com/oauth/accesstoken?clientid=YOURAPPID&redirecturi=YOURURL&clientsecret=YOURAPPSECRET&code=THECODEFROMABOVE qui affichera alors simplement un token. La page de la documentation est dans ce cas là très bien faite : http://developers.facebook.com/docs/authentication/

 

On voit donc que les fonctionnements sont finalement assez différents ; ce que la documentation ne signale pas explicitement.