Publié par marc | 3 commentaires

Vous l’avez rêvé, vous l’avez espéré durant vos longues soirées d’hiver, j’ai entendu vos prières ! Enfin un tutoriel pour la création d’applications Facebook en français.

Ce tutoriel sera en fait une série de plusieurs articles sur une même application, j’ai nommé “My Tag Cloud”. Nous retracerons toutes les étapes qui mènent vers une application finalisée, utilisant au maximum les possibilités offertes par Facebook et facebooker. Ce premier article décrit la mise en place d’un système d’invitations, en se basant sur mon dernier article.

C’est parti !

“My Tag Cloud”, comme son nom l’indique, permettra aux utilisateurs de soumettre des tags pour leurs amis. Chaque utilisateur, si il a été taggé par au moins un de ses amis, verra apparaître son “tag cloud” (prononcez tak claude). Nous permettrons également à tout ce beau monde d’inviter d’autres amis via le système d’invitations mis en place par Facebook et utiliserons tous les moyens de communications offerts par Facebook (feeds, profile box, profile tab, notifications).

Etape 1 : On prend les mêmes et on recommence

Pour cette première étape, je vous renvoie à mon article précédent précisant la marche à suivre pour commencer une application. Le principe est exactement le même, seul le nom change…

Etape 2 : Et si on invitait des potes ?

Nous allons commencer par ajouter quelque chose de simple, un système d’invitations.
Commençons par créer une ressource Invitation et son contrôleur associé :

Ajoutez dans le fichier routes.rb

   1  map.resources :invitations

Créez app/controllers/invitations_controller.rb

   1  class InvitationsController < ApplicationController 
   2       
   3        before_filter :ensure_authenticated_to_facebook
   4  
   5        def index
   6        end 
   7        
   8        def show
   9        end
  10       
  11        def new
  12        end 
  13  end

Pour les vues, deux possibilités s’offrent à vous. Vous pouvez :

  • utiliser directement des balises FBML
  • utiliser les helpers de facebooker

D’abord un petit mot sur le FBML.

Ouvrez la parenthèse et vos yeux par la même occasion.

Le FBML est en fait un sous-ensemble du HTML. Certaines balises y ont été retirées et d’autres ajoutées. Le but du FBML est de rendre votre application complètement intégrée dans le “look and feel” de Facebook et donc, de permettre à vos utilisateurs d’avoir la même expérience utilisateur que si ils naviguaient sur Facebook ou sur une application développée par l’équipe de Facebook.

Chaque page de votre application va être “parsée” par Facebook, qui transformera les balises FBML en balises HTML correspondantes, en prenant soin de supprimer toutes celles qu’il ne supporte pas… Un fameux petit sournois ce Facebook…

Fermez la parenthèse.

Facebooker, dans son infinie bonté, nous a concocté nombre de helpers pour nous simplifier la vie. Le wiki des développeurs Facebook contient la liste et les spécifications de chaque balise FBML, le sujet ici étant en partie facebooker, je ne m’attarderai sur les balises FBML que lorsqu’il n’y a aucun helper permettant de la remplacer.

Etape 3 : Et sploutch les mains dans le cambouis

La première chose à faire, c’est construire notre message d’invitation :

Créez la vue app/views/invitations/new.fbml.erb

   1  <% content_for("invite_message") do%>
   2  	Tag your friends and show what your friends tagged 
   3                about you with My Tag Cloud !
   4  		<%= fb_req_choice("Install My Tag Cloud", friends_path)%>
   5  <% end %>

Le texte contenu dans le content_for est simplement celui qui apparaîtra dans votre invitation.

Par défaut, un bouton “Ignore” est ajouté à votre invitation. Le helper fb_req_choice vous permet d’en ajouter un ayant les caractéristiques de votre choix, le chemin en paramètre spécifie où l’utilisateur sera dirigé après avoir cliqué sur ce bouton.

Il nous manque maintenant le fameux formulaire vous montrant tous vos amis. Pas de panique, là encore, les helpers sont là !

Toujours dans app/views/invitations/new.fbml.erb

   1  <% fb_request_form("My Tag cloud", "invite_message", invitations_path) do %>
   2  	<%= fb_multi_friend_selector("Invite you friends to install My Tag Cloud.", 
   3  	:exclude_ids => 
   4      @facebook_session.user.friends_with_this_app.map(&amp;:id).join(",")) %>
   5  <% end %>

Les invitations sont une forme de ce qu’on appelle sur Facebook une “request”, c’est à dire une notification qui vous demande de faire un choix. Les exemples les plus connus étants les “friends requests”, ou les invitations à installer une application, comme celle-ci.

Le helper fb_request_form crée l’enveloppe en FBML générant le formulaire. fb_multi_friend_selector quand à lui, génère automatiquement une liste de vos amis, vous permettant de choisir à qui vous souhaitez envoyer l’invitation. C’est pas magique tout ça?

Le lecteur averti aura remarqué une petite astuce… Mais pourquoi envoyer des invitations à des amis ayant déjà installé l’application ? “Paaaaaaaaarce queuuuuuuu !!!” me rétorquerait notre pulpeuse amie bûcheronne qui boit de l’orangeade, mais n’en faites rien, ça ne sert évidemment qu’à embêter vos amis. Voilà pourquoi cette option a été ajoutée :

   1  :exclude_ids => 
   2    @facebook_session.user.friends_with_this_app.map(&amp;:id).join(",")

Le but de cette simple ligne est d’extraire les id de vos amis ayant déjà l’application, et de les exclure de la liste. Pas mal hein ?

Veillez bien sûr à ajouter, dans la méthode new du contrôleur une ligne du style

   1  @facebook_session = facebook_session

Pour nous permettre d’y avoir accès dans notre vue.

Et voilà ! Il ne reste plus qu’à fignoler.

Etape 4 : Justement, on fignole

Lorsque notre utilisateur envoie des invitations, le formulaire vas le renvoyer vers l’action create de notre contrôleur, comme nous le lui avons demandé. Il suffit juste de faire un petit redirect et le tour est joué.

Si notre utilisateur clique sur “skip”, il sera envoyé vers l’action index de notre contrôleur, là aussi, un petit redirect_to fera l’affaire. Libre à vous de choisir vers quoi l’utilisateur sera redirigé, mais dans l’état actuel de notre application, ce sera simplement friends_path dans les deux cas.

   1  class InvitationsController < ApplicationController 
   2       
   3        def index
   4            redirect_to friends_path
   5        end
   6  
   7        def new
   8             @facebook_session = facebook_session
   9        end 
  10        
  11        def create
  12             redirect_to friends_path
  13        end
  14  end

Etape 5 : Encore un peu plus “Facebook-like”

Il nous reste encore une petite chose à faire avant d’avoir fini. Ajouter quelque part un lien vers notre nouveau système d’invitations.

Toutes les applications Facebook qui souhaitent respecter la charte graphique de notre cher réseau social, ont ce qu’on appelle en FBML un “dashboard”. Il s’agit en fait d’un en-tête dans lequel se trouvent des liens ou des actions.

Là encore, facebooker nous propose un helper.

Dans votre application.fbml.erb

   1  <% fb_dashboard do %>
   2      <%= "My Tag Cloud" %>
   3  	<%= fb_action 'Invite friends', new_invitation_path %>
   4          <%= fb_help 'Feedback', fb_about_url %>
   5  <% end %>

fb_dashboard génère tout le bloc FBML nécessaire. On ajoute alors une action vers notre système d’invitations et un lien vers la “about page” de notre application !

Et voilà à quoi ressemble le bousin au final !

A bientôt pour la suite !

De nouveau quelques liens :

I like turtles.

3 Commentaires

Commentaire posté par aurels le 15/01/09

Salut Marc!

En parlant d’être un peu plus “Facebook like”, il y a une manière officielle de styler ses données dans le canvas? Par exemple la présentation en “cases” sur My Web Portfolio, ce sont des ids/classes de tableaux persos ou venant de Facebook?

Tout ce que j’ai trouvé sur le sujet c’est:
http://www.socialsnippets.com/snippets/how-to-style-an-application-like-facebook.aspx

Commentaire posté par marc le 15/01/09

Sur My Web Portfolio, ce sont des ids/classes perso, en s’inspirant des couleurs qui sont dans l’article que tu as trouvé, et en chosant quelque chose le plus proche possible du look and feel Facebook.

Je me suis aussi fort inspiré de ce qu’il y a sur le wiki, c’est un peu une diarrhée de css mais il y a plusieurs trucs intéressants, il y a des classes css à reprendre ect…

http://wiki.developers.facebook.com/index.php/CSS_Tips_and_Tricks
http://wiki.developers.facebook.com/index.php/Facebook_Styles

De manière générale, et si ton application le permet, il vaut mieux utiliser un max de FBML ou les helpers de facebooker qui leurs sont associés. Le reste, c’est vraiment quand c’est impossible de faire autrement. Mais il est vrai que dès que tu veux faire quelque chose d’un peu compliqué, ça devient vite le cas…

Commentaire posté par aurels le 15/01/09

OK, c’est bien ce que je craignais. Merci!

Ajouter un commentaire

Vous devez être identifié pour poster un commentaire. Identifiez-vous, ou inscrivez-vous si ce n'est déjà fait.